Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1VS0kq-0004Rm-2e for pgsql-hackers@arkaria.postgresql.org; Fri, 04 Oct 2013 08:28:56 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1VS0kp-00062f-H2 for pgsql-hackers@arkaria.postgresql.org; Fri, 04 Oct 2013 08:28:55 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1VS0ko-00062W-4v for pgsql-hackers@postgresql.org; Fri, 04 Oct 2013 08:28:54 +0000 Received: from smtp-outbound-1.vmware.com ([208.91.2.12]) by magus.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1VS0kk-0002S2-1A for pgsql-hackers@postgresql.org; Fri, 04 Oct 2013 08:28:53 +0000 Received: from sc9-mailhost3.vmware.com (sc9-mailhost3.vmware.com [10.113.161.73]) by smtp-outbound-1.vmware.com (Postfix) with ESMTP id B1E772B6D0; Fri, 4 Oct 2013 01:28:46 -0700 (PDT) Received: from zcs-prod-ext-mta-1.vmware.com (zcs-prod-ext-mta-1.vmware.com [10.113.62.223]) by sc9-mailhost3.vmware.com (Postfix) with ESMTP id AD8C14041C; Fri, 4 Oct 2013 01:28:46 -0700 (PDT) Received: from zcs-prod-ext-mta-1.vmware.com (localhost.localdomain [127.0.0.1]) by zcs-prod-ext-mta-1.vmware.com (Postfix) with ESMTP id 1B8DA120032; Fri, 4 Oct 2013 01:35:43 -0700 (PDT) Received: from [192.168.1.90] (zimbra-prod-ext-proxy-vip.vmware.com [10.113.63.87]) by zcs-prod-ext-mta-1.vmware.com (Postfix) with ESMTPSA; Fri, 4 Oct 2013 01:35:41 -0700 (PDT) Message-ID: <524E7C3B.7060402@vmware.com> Date: Fri, 04 Oct 2013 11:28:43 +0300 From: Heikki Linnakangas Organization: VMware User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.12) Gecko/20130116 Icedove/10.0.12 MIME-Version: 1.0 To: Alexander Korotkov CC: pgsql-hackers Subject: Re: GIN improvements part 1: additional information References: <51CEA13C.8040103@vmware.com> In-Reply-To: Content-Type: multipart/mixed; boundary="------------090105070304090601010203" X-Pg-Spam-Score: -7.6 (-------) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is a multi-part message in MIME format. --------------090105070304090601010203 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Aside from the pg_upgrade discussion, here's an updated version of the patch, rebased over master. It also contains some other misc refactoring I've done while reading through the patch. I haven't tested this much, I may well have also broken something, but I wanted to post an update before the weekend. Thinking about the page format, I think we should start using the pd_lower/upper pointers in the data page format. For a non-leaf page, pd_upper would always point to the beginning of the special area, and pd_lower would indicate the end of PostingItems. For a leaf page, pd_lower would indicate the end of the compressed posting list, and pd_upper would point to the "leaf-index" at the end of the page. That matches the standard page layout in the sense that the space between pd_lower and pd_upper is free, although the data stored in the non-free areas would be quite different. That would allow us to mark full-page images with buffer_std, allowing the "gap" to be left out. I think that would be a more natural way to keep track of the used/unused space on the page, anyway, compared to the current maxoff/endoffset field in the special area. In the attached patch, I in fact already did that for data leaf pages, but didn't change the format of non-leaf pages yet. If we want to support pg_upgrade, we might want to refrain from changing the non-leaf format. - Heikki --------------090105070304090601010203 Content-Type: application/x-gzip; name="gin-packed-postinglists-8-heikki.patch.gz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="gin-packed-postinglists-8-heikki.patch.gz" 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 tFmhymidF8UMPv/f4somIEkPAb29i1mavhOktS6/M7c2wnzqNI+lFXRCvWlN HoVdB/atStfpY9EWlM3Q6mukHyMtEE1tIlqNoiuQRQi1yoo/OoQ7n1jc2W/2 cRhHaJlkvkOx9+ltgiXI0nA8uBGHdRMbKIfLmtoesgMda4VDmw8NrS/AtkYC b5n8J7p+jKdyqODRZ0pW777xpucSDb5NOg1xwPhu4wZlwzpoS+n0gCBhPj1M 677p3WOUzZRmVH5UfNHa3fBVvPW1nX5FskjD/pATK9uiBvlqS4YzoASClN9H M6PxWPdBhWdX3JzSc8SP5vR2wgL9gUoAl/h8/Jmz3zwrV9Vgl45553gek79M IvccX09yhzwygs48MSk3KWZkq8UPR3m4xCTJhcD9tkyKKNXzsVBcXqC6tEdX +NAnt5gJmSWLY20pJ3Td7Lf7mKB3dw/Trn8vfDVhPvDPoJES2nIOSIu/ou6w aTBLuC8rzRw7goymMLz1FD1E7qk641vJLiFQbQNnmI7uSgQZPb8AFZh1RaJj TZakVnyjTLwRAIhelnS42uN9mpCe1gkjahgtr6NobGmY0SUtM227D4+G9nHc EgO6zTE7P8T7KQkpVkHpVBeoCvYu+8SP+Q5kzW+Pfv5waBZXViot39fcGOJG Ix9IKccOd8MtnCb/zD46R6ascX7XaLbETZhdEI7HgbM+eoSr2PglR6HaNoQ3 LQFP2Zlvo2uOVKnlWFo8rzEHXm5v95HN3V3vGzb3cjb6xBd78+Tdxdufjkle vHh5+u6sNU9BIKs5jcgyps8eRv6ecEJPo5pZVgzu1pOCuzkheBEbJZP5icpJ nMKKwyySlL2OKrlCdEbUr+n2iDNd4PTITXTJ8+H6YHC52+1e7e70oq3aRdWk k0UOj9KM1JzrKBMH/AOLPTkKfkSF02iYSI5OipW0anU1ysamgj2aDVbZfCBa +uuqPKerOoVmdYuW7lZre6RnxI5yR8MKZ6xmeT/WLFo1Bza0VIbYFDM+F+RP SfIhxbTg544uLP4gkGp7B1GAVqXZg/OAHI3jqYfGnOb7zcvzl+oP+vX94cu3 BM5vT3+M29l5YaP6F2rZnA9YZLHZSR+0Vcaph+siE6AIx8jytnCBxtDXeeG7 GNTS/XkfKkECaP3+7FhawJ5KdpJKzSCqLKszGC8gT17G1FichZ1wt1ywW9fG IsDNhKz+dXwXjXNfZZKuEssHoLMN3RrW7zmZdhUsMtPuN+SjDID8OCNXHCpF 7XbIDmvkOBJnMKEs47oDPHQyjqQ76SJEK7JkOy2JuxEadaL7xkoMzMYejfWG uWUcPSULz7jMYZkHF5ezfBEjJ8tkvrs6/sCeF7Ap67CSSwNerjH4hvKJnjPM lOPr4SxHYYo7QVeNuLpgRdvkSjDkZeZEpJCsH6Zpcs/9/CK98Hn+VaUo+Vk/ n6pSiyvFHObOKuhAUAy0n9LcbaLPDWwV/ThQTy2t8U6UdhAlXQhbaBN306zu o6h/1oFq875/fqAR/48/9G9z+mT/2vkJ39F9mkfCPz86IXU6gzu/tcUdGNAl 09s3evSKtUuEHfOkfmCe9UpauCxaVWWNiwc5eIuyiL490N2V+T1ytKJiRZHE xOFPL/3hw6prOHN47s1Bw6ehKYXjUl8INCzloyT3dk0WSiegAe6s31tvbzvc wzIdGXleOTrYnEcC6WxbXvYBvtf4xiKNluZ4O6XG8t0+Zenob262tzYeOFOj YOCxY9Kweq73eW05PfwuDCHP2yTz0OoedqlgGmyd9is6de258G/BEO7a+J4p rq3hXCtS/ZI5kCNDFRpcNoDYRVR62OIB7kL4dBh7NPXB5ZbaFK12Yrrje6+B D1mqTUZCCUjA1YRKRFRb1qGgI9/3WhTQq1wfLYxT4yGVeaxyIHZrIAF7wnVi iGmh0Dws/KUvPx2QJ9SjlLVwOT/NTngFejS0lCYguqyCa9TWOyQcqP5G92Hg rBbn/8+tNbylZDIU1Ywr1Ylk9NI0xiivVpDFAeHRTyQKolG4uF0Onq/rjtaZ 6Bm+HPpklkDmVBJxoYd3nw0wcaexgHi7aPtUr8qDB4sE5WDIO/rlTgIGN/JT o74BkIkXb75JcUwPqVAMt16BZgbkfaFxxQSdmngcOYmIAIIr+4U3CyAkDfMF pCxywXp0Z53CMMvl/KQf7i5QH4ZI1MHjRn5fzPzNcQFkMUcFOpMGLXfKsKYF zU3QEtMWk4Puy0Mnresd1pYbvV7n8f0tQ4gH6U+lAmQ5TW7nBHMTnmVCs+Tu 7u+uo4NbsLHba29vOnf32WQU12Uy3GubFAPa9EjXEQZzLyXk09CsDGQlPL+2 pmV8+tH49JE6dGS1iyXOGG4E5SWKtXkPDI+0ZdEkTMNpklry9sVYLn32pDOf 8I0cFa2N8qMkECVstZRRxQ0q6dc1out+Pdv7wp7ldFho0mMxKxhQFGFQSvOD Cm7tgZBKvxOk0seClGP3a5Cpqa1GjNXUVzqpqGzcsJcsI3NjxMFBqQ1Js5e3 Abu6jKb3UTQmqmwSBXyIboGm6MDX9UrFnJCNKSVAGJkJ5JI8l+21Tvgs3y64 YAgM7uUyknAS/LqjR/ZWKKoGdhlwea4l15Yy8GEgZ23esnLY+tAlpd6SUmdJ ws2O5qVI1I3S6kYaPFaBmXmsSrUOcyRKzBGBbOTEDVd/k8o3KaOtG9ZR4/oa aa2mHWrxR3IGU+ejVX9m5G7yCgmzrAngXdSXahpf7meZeuxw9QCpHoCxhBBR 7gRvWwua7JGosq9G4XWGEgv94m9z4aO06iNlKK9YbWcTORRoD2WnCZpWQW1U AJbnve9T3FXdRQ4eJZdU5XpdY5khuavlcyu5pBb123mhw0+/CJEt8Scrod85 kjb3Bg8sd7fwUp1IsorSy0FLAjpunH3KFm9UajfKQK4E/xoPuocXLy190NKE LpUhJ+lK6y46aCxa9dcytdLG3na7t45upJvt/p7DmjpW33r8qXGDe1ceVCNM yyJjkSkvX5OPtfN0vnV2UK1WMLOa9a/ltu4b1BoLQm++lKqWVFG1lNN90W1h LtsCjx24apPlwbPvXtBWKVHBrxQu9ofc7J4WYIF9kK9+78O6kp73aaP04nJO CZ85I5F+qTdJAcIDEdN87GPmfO6rEi2Ni2oJYpblByFXsW1ytd5Z3zE+KHjM Wd79EE3DSf2j3mjYEugcookOjFnEKZY58dpNhCHulH3E8SEzSqw5x03TxsXr NxmYG41KozC9rLT8kndOf6fd6wFodjbxZ16zjri2LBnEkgxhPEI4ZLNLSpbO nlOyIpjo29lodJrcO6GEC4lQj+BSAyl6hXC7Ot2v1+1+XbqH/1aoLXnfhXog jHexsGlfBXtbWwb9XidjOMuziJUg1+hTgekY0CeKHqnVjHQUK1zS9wTDpdMI Dwh6rjefUnZq4Hij0Vh7cDnX8Zlvf3na5GTWYodR1LXjTWz5u1KqjnjrdNBl d7o5/B7hoJvTnE7A/D3gORjurzheNRtYOtyC0SxPuHBlDr9hVECMAPwpcxoS TyGgpWevOLai4MMl6YXXyrILi1/VvCbiw7UTXm2Euzvd7t7uYHsX8KvgwzW3 E+vDNbcZsUl9IhH4gzJo51LW6Y1lOCPg2EPLdasleIzi8ad9og9URJhEc86P wdSxJCRbmvMjTGgUc/IP426EnTyzKS+dNOqrTIXdlIzul39oNyUOP3e/g2Nt c2g6iOaP/NT75j+87rrqI7d8f3R2Ll4ic+bIFKPLbC9VcNGG6FKQLAeRwBmt ejH5BXifzVlMyQK+qhkeLJ1SNo3gIrnj1FX6GYmo+w1h/iN1GWMA4FU8jjnh +GWEiWXw1vhaxC7j/Cbce29vV/y/DV5ySg1ymH7nJyaBj/+FRqL0M/qpmwtG +/C21N9hxuzAfDS+SlC3hMNLW/Z81YklkAPC5qpp8m20dNIm9We1rp5pdocg gOEuHWce78qyLbgTCdZWl2kO815t5nOykH2avMhXW+JVHywEAgXmOEOX5oUw bs8DHLzziINTmigSLB69T0kCv8wm1J5ERWBERa4chHGwHIy/31QMxN06dHQz AP0ZpAnXMqDS3kTAJcscZ9pr4mEextlglmWc5EJxKXJmhPq9DbpJ+v2eMJv1 TqyHgeWhJeSWakn9uzwDZE7rNB4WMLokI9S45d4cBX7K7Q7a5g+z59YPZK7p Wx3KkLZ8WTnMKO36Yd36QHVSChH50CkvLt58/Ntxs9lkLw/AG9YlIEH+kTLx kGzfoVPfyCfxKFBuRK81tWHRj6M+5BVeOTW72K7qYh7O6mrwHspKrZhdiiTq b2yLe1FdvJTBCApNt9JNi9XsTlUOpwqOaOAp7p3TzKXR9WwEY+iL9FjPlZsO QFoI47Hb0xH7TbPTK4gG0DJOKXO4x/GQEwoGiHPmf7m4MS4MS4fBy+IoKqyq TtKmL0KpV/eEiADyzU+oN2ZLpzot3L/NYhgPCMInLkYkKfQqus7lFC5v5JTG oGL24kXKoCNqxOmhOMn5y9H0hjIemxwDZbBuq8nwAubLWZRnOCS58AwpvTp1 5Piv5nNDddVLmUgI0MHwG0kId5UgEGAnX5L/K/Xj9oGTbV5GVzghSpscjvjL FiX1Uwa2Alazcl4bzHk2mVA9sRirsBBww6miXM+YoRPAiJ7Q4WdM3kGp9G4n 8OZSF0fUc3oCl8p4GKbDJ8zJkac1jUhTlA4wkWIaX3JJksvZFbGIN20spYXD svt1RDmgo+416XNZy3CRTYeAo9FY3acxQc3mgcqemT0P8kVagjl/yTP68A+V I0V/iBaZlcF/uJjU7XYbSv1ROWDg/VU5oI+RmAnlD80pV3Ve0WOxc9GT/R+D k16/epz8Q6XuDEJUT6V8BsWnge32j0YeDWm5gDQuxj75xrHMkmjZ0rWtG8QJ 2bwREaElgaS9HUQa7XImMffWXOQCw0Ev8AaVMljUyLhMV6koa3Zv3AWrR2g2 LQLznQFshd79uuM4Mf/NuR3CtWlu2LKbvOXfq/XWXKmZJmvsohkBu8ntgkVT m7cd8wCVS8elI04Pfw8H+XfI9eY6qlAC5Vm60v1tVfVmVesNEtaqsGNRWjQc AbUBpdyCL+2jMF0+mbLcGTytvE200kBAiBy3Or2W1es735K4C/MsmaPHrKAW qHyORV9PmmOnwFkvM8MSaLrDV5nNWMQt0ZSCoF8VxvasFCpo2i1fbw4vYaku gi9MOcfbZ5j2BQeLFBedxchGC2evwnnK9Lk2R5Jd5/RhNO2leNSomGqZmFCU cLxKijARYv23Nkg339/rSRq+eqw/3I61ZBWa8Fo15VJ2Y6G/i9cfP5ycHp6d Hb65ODo//HBx8vHo+PzwlFKaql0kTyJxcKQoiRgqf7a10YakOdYGqUUCXI3F KJptrlwJBbOV2XrLItm8ECLWBdIaTDjSVy9mS1sw9yvouw3qUliMqNBGw6BB +pL6pyGoexpKG5ZBrrppYbEtPj/FNZZecziSOfsnqdy8aAxmJVEOEnoizSY1 qXY7Lgym6bBrUeYhSlcBt8U8UpybFo9mcPsMBB0UPhDVSHJ/d3T8J6xwM+L8 +YLybJrYpiqvu1LlNWeZuK6I6WUDxWk0ehuPomNMtarTqxayPqFZymRc0S6t WIadBTyWAkQPDpN0/YBZnS/f6pzDWC+3Ur7VnbLmu2r2nkbs5/cf312gdv7o +Ozw9Fyp9d/765z3apuCu7Y21kthA3vwCrURZ9Nw8KlosZHFF+PQO6UBqvln bf9gV5AIRWW1QaqNB/pbYQwy/RhAZI0NzDskY50UHjiKu2jE5mUNaK87HKJs vWqVMySxEXxzd5szsa23S0oymS/ZtOUvtbmKITyUgg/DBIgBecW22RPiUxyY +pHCrTy6NVevo+n76IqyYp0wN+/31rJ555qrcXZIBZ3o6HtNX5WkOCbzKkYL 4qeUO+k8KYxR9qEx9dO2ra6Se0bdjnIwL+lLZzVosr27sqeaU1Nmaph1mnJf zevtlU1swAmwNtp9YAa2dncwYxw8in4HhB1TmKW61kWe/xqOZpHpVYkpPrfW DH+0V/I9oBXphFAvq9eDl50IkxOZaEli/aFLUmeSRmZAHLSMaBX/fqaadyVF WdAi+Q1FWejzkoD3YdurwVIsv7JvZkvwwandJCnIQDxVZwmcfMbpDSGQg604 SVDyJ/KSyAO4bIXiJFNrnUp7FuQAWDIXmsRbwcHCRCQBVUqJBOWPERBY+wb+ cHp1AHFt7uL38fjTEYCladNZ4eHMTQR91Co3vhwiQaMA+LLNdQbLvy66oOGc dX4eb4rlcUemeRs1x24AEv7pBCHhn+R45Z4IdMQpHghBnuv6NSvZUL+oZmVV K69mJeXqyuG640rryrfO2l1uAhdVmmsij31+z6507/TsSfbLdI19SIbC8p4r uiECu9PfxbStO0Bfd3ol9BX48Amh3dswm74GZigaTEsJVjlhfo2Zr+BAlH5B m0QU6C4cXAyjUfhZslm9mo0+8ZJOOSMFkt5pxsHBa8Xi7sTYyQQ4Kdv1ghBG UxeiVu1se0IQu3N9v3tQAWDb5fKnIKh1Cqpa5U5BYCVIBkppDqR9p0ju29l4 QJHVKAlgxkjklieYd2roaY+66qeMDRR3YUoF0WGngAuIyAhGXVFBzGmCZXbi 8Qi55yuKg8Ier0LXCIVUk72USPmt89ZcpcltSb4bYoMyw5S6n9hSalSaF3uk dDT/GqWJ33d2Q4WVLvEcZbISKguMM045YQ3bbChBSjFzDb37+eefn3HxpDEV qglJOcirHao7gJMGJc7nh5N3Fz+dHYLs8P7o+JCKjOaS4Aic6tWQz/tDL1FC /uElqmP90taOj7VDZ7FgNT22JZ2xZuTqxBaNrCgl/YdUI9/oAzt5p56q5n/o muUtrEsdu+lF0BW0v4upW5roHXoAf7Qw8W2z+KVq9vDzTVOUJ8agwB2dkkSy nxydXcg3F2eH5827ljiJy3g0s+3NVlUt7ur3tiY3+5zrlsVi9aYTmi+AQaaQ bxk8qCS47FrZhwf5ivUAwvXf38K//dJPbnDvi4W+X9AqnU9dLNGpaGoih07N IziBHdfCid6mgxO9zQU40S/DCa4yvggh3Bv4KPsrRuJIup1WHtRU5VzplD37 5VXttV4GLwxdLY5zN5G/QYaJmsMRXilUUlaMzSmm63VoFCX+p2z2qNtNTBlr IlYuUR52gQueomeo9heIscCwriCXzSZY4ItN7iv/F4wNGhy7dAEA --------------090105070304090601010203 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --------------090105070304090601010203--