Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ePqQw-0008RL-Cy for pgsql-hackers@arkaria.postgresql.org; Fri, 15 Dec 2017 13:53:50 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ePqQv-0002bR-Rw for pgsql-hackers@arkaria.postgresql.org; Fri, 15 Dec 2017 13:53:49 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1ePqQv-0002bF-FS for pgsql-hackers@lists.postgresql.org; Fri, 15 Dec 2017 13:53:49 +0000 Received: from mail-lf0-x243.google.com ([2a00:1450:4010:c07::243]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1ePqQs-0001N6-H1 for pgsql-hackers@postgresql.org; Fri, 15 Dec 2017 13:53:47 +0000 Received: by mail-lf0-x243.google.com with SMTP id 6so2026577lfa.6 for ; Fri, 15 Dec 2017 05:53:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:from:subject:message-id:date:user-agent:mime-version :content-language; bh=wTXtClf/Y8Vedl+XX2iOGxH6OIFoFHgyNDcVAsQmpDE=; b=EBDVsiJsknNoaeTKzNRdcMSqDTkAIYVQ1KgY/gxSsRV2HlDic5DWCpEnLymLi/e0ik Ic1TzMWIXeGIUHhztMwtaco8bf1yvUz4PQrO5AdtKXMFb3ZZWaCjqOjI380hkVwTphSZ CwwdbJb8HI6G/nllfr2T59qfV7DJM6ndUuyCbSV/r1hYwwHRiW5OEnIPHHUafSeYmQgv qP1Ij5v0/De17l64XZ0kGBN6sUlEeGuayM4Kp7xQR4mM4NJIq7bFgVWzIlxPYK2NOPFs KaCguFwpqUzmfs+i749BhAD9tWRixrofyWd/HHSQ6obBWBqenM6PsrVCDzT0yW1kXqIl 6Nrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version:content-language; bh=wTXtClf/Y8Vedl+XX2iOGxH6OIFoFHgyNDcVAsQmpDE=; b=WqDLDlWZClVZ2jBTYebdpqf69AdMuS/xGrYchH197tgl57TMyaJvO5y6B/zJZ3wtcE 6IvKEp8ZYwHIiUYfjfV4g+irpMZeLQRUxIW03kV63SNL4zqAJzfSOSa+46LhhwTlQbJJ q2ccVOrDC4HVQcDZ6kTdsNZws8rSgaW+aOtutKpOUqvuSVd2gT+Vj+nB5ZkcvFENO9TH 2sgmm5kgmoslI+XRgBej+16zadNkWEDcNFg/Se231vm0Q9bXmAh0HgaMubgno6noMZOD W+pIyM+F6dNEVMEmNbjftyI/uoBIDA78eoHQvoQd2tu3tOaVo8993XBo1pYlbcgRp/CE K2ww== X-Gm-Message-State: AKGB3mIfeD9UYJUGfalW/MQvuykJXq0eDewrVLhTqLM33LN5rTJ16YLM fR5UI2YbXFpnreC6+GoMTVvFpnb8 X-Google-Smtp-Source: ACJfBouDPmjxRCa4TQVF9slWyq7c6KqsVUSOX91nJZVt8Sg4/MJx+E83v2xzVoWzDLPRqBbWf5KcWA== X-Received: by 10.25.198.147 with SMTP id w141mr5486290lff.84.1513346023140; Fri, 15 Dec 2017 05:53:43 -0800 (PST) Received: from [10.3.1.85] ([185.62.200.107]) by smtp.gmail.com with ESMTPSA id 17sm1227862ljp.13.2017.12.15.05.53.41 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Dec 2017 05:53:41 -0800 (PST) To: PostgreSQL mailing lists From: Maksim Milyutin Subject: [HACKERS] wrong t_bits alignment in pageinspect Message-ID: Date: Fri, 15 Dec 2017 16:53:41 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------E415E954BC8176D6B1223976" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------E415E954BC8176D6B1223976 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Hi! I found out the problem in exposing values of t_bits field from heap_page_items function. When the number of attributes in table is multiple of eight, t_bits column shows double number of bits in which data fields are included. For example: # create table tbl(f1 int, f2 int, f3 int, f4 int, f5 int, f6 int, f7 int, f8 int); # insert into tbl(f1, f8) values (x'f1'::int, 0); # select t_bits, t_data from heap_page_items(get_raw_page('tbl', 0));                    t_bits      |       t_data            ------------------+--------------------  1000000110001111 | \xf100000000000000 I suppose the prefix 10000001 corresponds to real value of t_bits, the rest part 10001111 - to the lower byte of f1 field of tbl. Attached patch fixes this issue. -- Regards, Maksim Milyutin --------------E415E954BC8176D6B1223976 Content-Type: text/x-patch; name="pageinspect_tbits_alignment_fix.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="pageinspect_tbits_alignment_fix.patch" diff --git a/contrib/pageinspect/heapfuncs.c b/contrib/pageinspect/heapfuncs.c index ca4d3f5..fe53a1a 100644 --- a/contrib/pageinspect/heapfuncs.c +++ b/contrib/pageinspect/heapfuncs.c @@ -234,7 +234,7 @@ heap_page_items(PG_FUNCTION_ARGS) int bits_len; bits_len = - ((tuphdr->t_infomask2 & HEAP_NATTS_MASK) / 8 + 1) * 8; + TYPEALIGN(8, (tuphdr->t_infomask2 & HEAP_NATTS_MASK)); values[11] = CStringGetTextDatum( bits_to_text(tuphdr->t_bits, bits_len)); } --------------E415E954BC8176D6B1223976--