Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1TtT60-00005p-7j for pgsql-hackers@arkaria.postgresql.org; Fri, 11 Jan 2013 01:07:44 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.72) (envelope-from ) id 1TtT5z-00058m-5M for pgsql-hackers@arkaria.postgresql.org; Fri, 11 Jan 2013 01:07:43 +0000 Received: from magus.postgresql.org ([87.238.57.229]) by malur.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1TtT5x-00058g-PB for pgsql-hackers@postgresql.org; Fri, 11 Jan 2013 01:07:41 +0000 Received: from sss.pgh.pa.us ([66.207.139.130]) by magus.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1TtT5w-0002Zd-2Q for pgsql-hackers@postgresql.org; Fri, 11 Jan 2013 01:07:41 +0000 Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1]) by sss.pgh.pa.us (8.14.5/8.14.5) with ESMTP id r0B17YgF013968; Thu, 10 Jan 2013 20:07:34 -0500 (EST) From: Tom Lane To: Simon Riggs cc: Jeff Janes , pgsql-hackers Subject: Re: [PERFORM] Slow query: bitmap scan troubles In-reply-to: <13842.1357583258@sss.pgh.pa.us> References: <092a01cdd230$ff6143c0$fe23cb40$@foo.me.uk> <097601cdd249$ae338530$0a9a8f90$@foo.me.uk> <9022.1354730710@sss.pgh.pa.us> <28944.1357424296@sss.pgh.pa.us> <18164.1357498720@sss.pgh.pa.us> <8539.1357513385@sss.pgh.pa.us> <12791.1357580151@sss.pgh.pa.us> <13842.1357583258@sss.pgh.pa.us> Comments: In-reply-to Tom Lane message dated "Mon, 07 Jan 2013 13:27:38 -0500" MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0" Content-ID: <13922.1357866285.0@sss.pgh.pa.us> Date: Thu, 10 Jan 2013 20:07:34 -0500 Message-ID: <13967.1357866454@sss.pgh.pa.us> X-Pg-Spam-Score: -1.1 (-) 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 ------- =_aaaaaaaaaa0 Content-Type: text/plain; charset="us-ascii" Content-ID: <13922.1357866285.1@sss.pgh.pa.us> I wrote: > I'm fairly happy with the general shape of this formula: it has a > principled explanation and the resulting numbers appear to be sane. > The specific cost multipliers obviously are open to improvement based > on future evidence. (In particular, I intend to code it in a way that > doesn't tie the "startup overhead" and "cost per page" numbers to be > equal, even though I'm setting them equal for the moment for lack of a > better idea.) I realized that there was a rather serious error in the graphs I showed before: they were computing the old cost models as #tuples/10000 or #tuples/100000, but really it's #pages. So naturally that moves those curves down quite a lot. After some playing around I concluded that the best way to avoid any major increases in the attributed cost is to drop the constant "costs of indexscan setup" charge that I proposed before. (That was a little weird anyway since we don't model any similar cost for any other sort of executor setup.) The attached graph shows the corrected old cost curves and the proposed new one. > One issue that needs some thought is that the argument for this formula > is based entirely on thinking about b-trees. I think it's probably > reasonable to apply it to gist, gin, and sp-gist as well, assuming we > can get some estimate of tree height for those, but it's obviously > hogwash for hash indexes. We could possibly just take H=0 for hash, > and still apply the log2(N) part ... not so much because that is right > as because it's likely too small to matter. In the attached patch, I use the proposed formula for btree, gist, and spgist indexes. For btree we read out the actual tree height from the metapage and use that. For gist and spgist there's not a uniquely determinable tree height, but I propose taking log100(#pages) as a first-order estimate. For hash, I think we actually don't need any corrections, for the reasons set out in the comment added to hashcostestimate. I left the estimate for GIN alone; I've not studied it enough to know whether it ought to be fooled with, but in any case it behaves very little like btree. A big chunk of the patch diff comes from redesigning the API of genericcostestimate so that it can cheaply pass back some additional values, so we don't have to recompute those values at the callers. Other than that and the new code to let btree report out its tree height, this isn't a large patch. It basically gets rid of the two ad-hoc calculations in genericcostestimate() and inserts substitute calculations in the per-index-type functions. I've verified that this patch results in no changes in the regression tests. It's worth noting though that there is now a small nonzero startup-cost charge for indexscans, for example: regression=# explain select * from tenk1 where unique1 = 42; QUERY PLAN ----------------------------------------------------------------------------- Index Scan using tenk1_unique1 on tenk1 (cost=0.29..8.30 rows=1 width=244) Index Cond: (unique1 = 42) (2 rows) where in 9.2 the cost estimate was 0.00..8.28. I personally think this is a good idea, but we'll have to keep our eyes open to see if it changes any plans in ways we don't like. This is of course much too large a change to consider back-patching. What I now recommend we do about 9.2 is just revert it to the historical fudge factor (#pages/100000). Comments? regards, tom lane ------- =_aaaaaaaaaa0 Content-Type: image/png Content-ID: <13922.1357866285.2@sss.pgh.pa.us> Content-Description: newer_costs.png Content-Transfer-Encoding: base64 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 TkSuQmCC ------- =_aaaaaaaaaa0 Content-Type: text/plain; charset="us-ascii" Content-ID: <13922.1357866285.3@sss.pgh.pa.us> Content-Description: gnuplot.txt set terminal png small color set output 'newer_costs.png' set xlabel "Index tuples" set ylabel "Added cost" set logscale x set logscale y fo = 256.0 h(x) = (x <= fo) ? 0 : (x <= fo*fo) ? 1 : (x <= fo*fo*fo) ? 2 : (x <= fo*fo*fo*fo) ? 3 : (x <= fo*fo*fo*fo*fo) ? 4 : 5 head(x) = 4*log(1 + (x/fo)/10000) + 0.25 historical(x) = 4 * (x/fo)/100000 + 0.25 ninepoint2(x) = 4 * (x/fo)/10000 + 0.25 plot [10:1e9][0.1:10] 0.0025*(ceil(log(x)/log(2))) + 0.125*(h(x)+1), head(x), historical(x), ninepoint2(x) ------- =_aaaaaaaaaa0 Content-Type: application/octet-stream Content-ID: <13922.1357866285.4@sss.pgh.pa.us> Content-Description: index-access-costs-1.patch.gz Content-Disposition: attachment; filename="index-access-costs-1.patch.gz" Content-Transfer-Encoding: base64 H4sICJFg71ACA2luZGV4LWFjY2Vzcy1jb3N0cy0xLnBhdGNoAORce3PbNrb/ W/kUsHfaSo4k6y2rbjLj2G7X9yZW1nE3vTM7o4FIUOKGIliCtK3dzXe/5wFQ pB5ppmlne+9mEtkigAPg4Dx+5+AwfhgEotVahJmQpyb1TufS+6Bi/1R6njLm NJ5nqVL4I5EL1fbE/HN6PQtjXz2J0ajbmwzOxqPJPBjJQXeiJl6vP5JBryu7 Uo69gRp15pN5uz3pdPvBoDvujedn3cmo5/uT7mQ88ufDfl/KTjDx5qPOeDAS 3U5nNBg8Ozk5+bz1Pmu1Wp+55pPqHzGbZ7OFyrI0V6nWWf1ORTILdSxSFTVo BYNurwmLFtidJqIHkz4wtNV6JsRH+Ad/T0+ePRfipGYJIrGlChfLrN6AnuIH lQl4IPiZ0AF9o9UJo2TqLQX+3iYiTKn2XsEqsjyNqW+kHlQk6p7O4yyMFyJI 9Ur8A1bdcNS8PE1VnIlAmkzgAtqW0P0yNEAqSZWBdkOd43w1VykNxTUQdSMe 1Te+WMoHJTItfGU84CV0T3W+WFpi0GAymYIoxWu7ARYE3kZlBzQx/M2N8sV8 TRMnkYxjmDnQqfC0yVrKZOGKmZ7kaaKNMm0h3oWxB5Szb4ylpeNoDXMK2101 hYmQl9G6BeuJlPBlJnGyIIyhcalw/CM81vE3mXjUabq2lORc55nIExiAjAS2 PIQ6N0Dek94SVoqUeB+n8BnGGXzunmtVVJ6Lf8K/2qv7NyqTb0HYrnA5Jyv4 5p9DCzaSjNTEiYCT9WArQE88LmWGy4wVTExnSkfJC8HRKLi8IiFuAuKIiHVm KdmOa5U1RaSlD+3IPBmHGWxnqbwPBliRKrHKQSiAbyBopa3UG20mhButhYGo w2ZaL1N/JldEWrx4IW5/fP0aN1ijHdZe5UGg0loNFzfPg3N6iDvmR8mCn7y6 x2fTRP6cK9qIpl8dL9xw8cKtB77g7E3x6v7u+nr25vr+4u3FD9f4fXZ3fXHV OC/GJQsYxusAxcJ56pZcqRPPBx3r5aU0BP4Oo94lygtl9FbD+aq0zmRLw32c 4t52xkMtd6FepyfCEKNbxGg6uOLEmKPE0qP6Zjmtl2CK9CyI5MKIr3EC2mhD /Otf1J+nxl6r2UouQk8cvXAMufjh5rLBveBEE51m9eu7u+ldk5/VanWVpp72 FT6+nF5dz25ur65/ml1O7+5+fHt/fdUoegrouTKL+jGr7t+OvzJ/O0blAckS ktX6uOhdqzlZB1a4X2/lSuF5NeBPwRLcbmkHDyo1qCHFHv56fffuZnr7W+/C zbMKDYt4GIvyzr4FowAWwnX7ym8KnKH04HM3W+q2u8/m1i4bZVmhH6CxN2Ss U0VqTGZakMCQCldUE0yXMmi81BPIKp4LqaQjBIZ4DgInfTSFWvwdFdxkOmF9 l2C4mb0kl8wN633gnNFxtB2l+k8//SQSlS5lYraWYJY6j3ycyFvKeAGmBqaV UaQfgSzQ8aRR7YYldLpPBmiHYEXezm6nt9fclQ0J+UpgaqH4VR2uWefX4a8f d1l5SRaqonbkBNC1xOoJdh6uVGVtO9ZNvFErna4vNRiBp+wCNuYVJpB45j1l pTMnqTPhP5QO6lVT3yhMx8pL1ttmlPcGYveJsTT8kyxxLHDmqb7tbRpia95z djvocPgkUZzIv1vHAZAQzgtdOYMIowA+hJHl14UxCvRzxya9qNqk8/19nXa9 2Nb+A/0Rt5C0HBXS4vhiRWGrM4EW7GIZA5IhHAYjk4wiwfjrryoNAwQgEvUo ACS0BOCQKuAjyU2kNXhKMOcAwQQ5fiEedOg/8w9h5xgMiDkFJBHksWd2QPN2 s0XL/f540JH+aK464/nQ98eqJwdn/uis0+t0AfcGQ1/1xz2/3e4Dgh0Gw+5Y jUZDL/B746E3GvvzcV8Cnu50hmf9vhoPvMNoeWcJuzB5p8sOPoa2G1z5NIGf ga6/y1IATfgrGJsU7WgMdueGpu+Ox70mfJxtwLJ9dNZxcBml8UqL2+k9AC9w vSixYJ1VBMoBCBQtFQC4MEPsC4CWBIhOo/b+7ub+evbjze397Pub69dXdTw4 AyJStH3/enrhGrM8iZRpiuOv2p3gmEWOe20IoJebsU0sk9l0iD0d5avYNJwe yTSVa16ugS8K1QmEKALsCAgzW5IxAiHO5xFBaN5ief3TmytLHDYuVzwvUCbx SFKCy6ny89iXMNKEFsUyIeqURaGp0rxFL8lEoQfgWR/IfuFJnnXx2Eblkzzr 46NJcZI8+avp9LWdPI9DRFjnexvD1Ur5IQD3A+3LdYLQOgs9GRX8LvD7HNtS 8RgCjy37PZ2EZcycLMDqCQhw0jVzx0ZmEB0A0V/QZp2ArwDbnJ7mWRidYpDi yWxHqw91s9o98P3eYDTo9QcjqYKz4Xh4Jn0578lhN+iN+8Oh3+kPJh3Q7k43 mJydBWOvPxkE3lB5czlR3dFw0On3hmo8lnNv2O/53cPafXApu1p+sOuWjNAs vU6zN9wcO34duSP/E4hjlANwOrbx9ULFctVeHu9rWypwyQcbQT9nPpjzMDLY 5fluF47dD4w3ayMhaj/QmqUyNgfnfor0Apu2NQRQD/peAnzg/EFF3nKsSjpy gq6pKaYgRdi5P+w1+8NSWqA/7Df7o4124B8k0nrJpgj8NTln/nbOXUhECV0g auLuZBc2TvPiDdoMi5gtcELV+B5ADnEIjBwGkhSJW4D3uES4C8rDoXyB/3Si YgeFitVtjOAmFiuFuTTS4WAHzT5aAA8Ge+/CWFt50myd4BoZn8JCQffAMh7n 8YdYP8bHjNYAT35yXa1uaWbmHVGfeZE2qrrIprjVr7X3gQxNqS/SxWOI0NIR s5ti0wC9D1oHVBtzKv3s1Khov7/f18Vahbk/Arc/BkswVme9wcCbqM581O0O RoEcwhNfKdD6/qDdVkG3H3Q7cuiBSRgEfbAKvcAbzKUadueBL3sjgAqDYH7Y Kuxdxq5F2NttWx+s4XynIog+wgfMKKRqATw3myd14KU1G91mrzMqGw58MHb6 YIkBTs1X6G/A9cwyPfPxe51dD0QYqTghXwRaRlAeZYeO0Q6/pI4nm/E08gvG z9eZkoeoIFifYVCVziLFsm/pvCYXLH1/ht4WXFamkNrPuYxMvexlxQnJQNOO oC9/wV5OODl1uMv6z1sgsX446Y6aw8mky8x38JUpH4ki5rT6CAAjkWkWSggv YAegj0YUu0DVxK6L8AFMBe5HINxoEx0mdnF7hWmzDcHNYHLP2ABQJgq9MANc xJSoJ7EHums/B0PM1KSA+AvCVQ/AHpIIfSVdQpMGQZxckre2EH/Wj4D7Yfcu a0aBMFPzAJMFeURpDHgcxhhjlPCUF8ncoDWaKw9/sw9wixWpbjA5YJWSJoRd BFpHGC7FQNXTqySn1KGESXQLg+HS4CJD2a5N89TuMoFdS0xMGAqgge2UzyTc UrCPF1M3DY5TPHA+sI85dtHIxEwzNXgSroDBm6TqNpPbnHo1OXk84AjMBfG7 j34IQ3ZqWtq1AZLlkz5+Aus46B1zvpYOUzpZsWd9/P7P13fX4km8hJ4dlAX4 /Tsx7ByziIh7zj5gxpGiSnIEPOUjNcGpPRKkA++PWQ13ON66KSKIx0i2gEVM 7lP8baKfA54+hlEk5qHkxDYgg0ytMAMUyAdNGe4cYPSC6VV2U6wp0caEANmR bTJzebBYIfNkiuc/l5gHxzQ4x4dM7VajxtCQQrERRwOsiY24U6jGHtsBirSs Y7ayjQfPdDDRg1NSIgdbAauDiJHq2e0BP8Mn5beLnPr0v8lzIjC2WysskRUO sB0Q/GIi6JCUgx7ALCvysU6FQNaAEysycyHrIUTLeYRZamSVNIZ1jo82WwJv jQuaj6oGEr5/kY0Eqv8EGjVsqOEMSOn6CeAds/qFuL15fe56XCpgFHSKPHyE TxlUAbnWS8tvymffvEb9LhJMmwndOGCsAm2tR55FCMV4Gkhrqt3CiRaLwuGY kcGHmIeJgjAFix15DVreZgc6VrYvHcdKflDduqPATuHI5Y33nqgl0Cwtu8Hb qe1wh6YAeQQa9WpjU1g6vL6P+AHYrTRASIyYDJhngEVrZ/H5+FthmWvCBaRH RaLmUxNXfOARR2ktdFUtFD+IKBQoDd4MOT1HaZfcIKOWvSNyVkDzTRLactDl GISU6XDYSPiXLqpUliEiRe/C9z9LTGHqjbEWgmSyhZChZfByIAg9poVAFaz/ gm9t0PrGnoZVoMNCn8BRf3mcSDV6CAWKgRSYzDRWYKbo8i/cnao0yyNPxLHI gwLzY70Q7JJJhfEhRpH3dd+tH93c9VlETiEIU3oITQi74Msl6EhMuOeIxdrB DhKJKVVor/JkdZ4mkyKD8Bga3gA5SeUODvZXcJp6n25F5mLfhvYEYC60onW+ leCiThL4LJ77nHuJtE5mdFfaZN0oWqp7LFovdWF73uH1Zp7gk33N9zqTUaWx jJAtic2T7fm5w6VOXajJVg6Wv8cmgg7j7sj8cJxCgWNhTUpKWOn5M1uzna7T 1Ffpq/VWb41P52sewMus1RyfMLu80zIzcmZARncbQO5VeqBt8xSXjCy0QRwu d4YHXxlCT+kY9zXIdGFbWpsWk3gziP19vZphdnAztGBDyf/9pcKkwnuQDcYI BnD1GHD1uOtimB1c/SuMlUN2aEZIl8B6MbEVilgpZCaLBIBgpRx+ohF7J7UK OYd+FgijH5J0eU/AsLBX6JBDFDsHgg5aoTC2EGzHuHkyiqgEAQJHJAUrvdfs L3hiP0f4b4PxR4SCH9RhjlmfISt2CqTI5gvFg4xy2L5EDsAZSRs52LglCldh LNMNLDTO7FkQhXNZGrhQaPiBF4ECaGkBUMs95D5ligzecNnbEDuwBPouoVGl xl2NYbIaECWEijTKJidhCeVZ0NPQlRudqTuCZsHgNYkEZke2TDBWW6AEgBSF 6At4PRaYra1/s97NUQNKvgokQTZJFzuuxMI68Q2fAXBXnULhDwpAh0cP5CyL HCI7JaRvGOkjTXtIVLyADN9IPFUeuEIWXakBYcxAhqC2bXrPa0VavEWmEnTF cDPPsDO4MMznnIjK8Ps2BeRzaXjJUNe2LTevoBx5FB6UBzurs23ReSBZVZir eFwZzjgPut3sEXVQGT3HIAJESttDw6OsTlu10LznraOlKxJ3pgeGs6TtH18V ii0Ce40tEoENqwcMt7dbrfTurGPjTngVf2I+0SNO8L8DmyPTC7x+mSaGKXys qNj5brb/98cUFR0/wWnMH8mdPz+oXFtNG9XBhk8qBXY4KPifABDPD0peuemg A/+jgo9fgS127x0+S0ix66jTHTVHnf7Apfpq9pILtebaOVQ0F0EqPWd0VmBJ WpmkO0nrVqjqzCYWqtq9A2BBuA7kD/hGZHvXhXLYcgnhQmiuTQAy/m6X/5re 3M5ubm+v73bbqP7svNgnfnJO0yNPLPyQyhowBwYAqVojqMo82YqDLKFPsATc 9Xu8gaTYJ+aKFwBRmPcALJRHoUxbWDmA6SUmhlYaerLtB2+3sHWfKeVYQAIf benjViKqzePpUhdj/y0Y8N0L0Wl30LTY5MNW+4vduEOcVPi+uXYiq8ZsrHHC DiNiKgmJYE/sqsjMFTho2w9IL9WGWi1QnqBUdofF5ddvLpW/uVD+skx+QiT/ oyQSrPOOtJGna73cNuS/Vnj/TbL7RYZ4OASRH/ULQyycGLznMI1y0ZS3MwhI Vipbap9CE/mB7w6SVLdSqlcraQWtGL2xpbaduyFEx2GECgJgWNMW4vGm6Vah BP0wBMRq4SMiRhn5B5Uuse4JbwAwqGK6RQUdJtOSBGVlUxfexukSWqWnLC2a 1Si1MkUAwtccT66amyIRvK1aULAIhPkC3kUBNI2lxvM0iypEdz8DTMNPKkOn wnMSZi7ey2MUaax63raeVniYBS9FV3z9tRMoKw3wkASyilJQslUYbQtwIY1M 8LRKCwwBGkHwymgEB8WN5/9vieDxlkpJOkpnzIOYmH2/IMTIGE5TxEqmeK2G FO1ZF3L1OSd+TteGmu4Bi5gzjB909IApWWOJLcHIwTS+SoAevhuh41KKhY0p VeNixl+Eixh/EBvIwlEpbcEpH9n4oGwBA5fpk7m3N3oSRobs0EjqKUzHG0r1 bxfQL7F03c64Oep2N5YOuWGWGPijTuNFiSDgTcE18LR+Rbl3K8zcqxK/XT8l abOgRCVu6Ou+MZz3wdSUZXARBrYbtj+hgdpWJhZvXmjrs0BlVNcKdPdEEkyk dir2BQuIWbiihdV50gV1nmzU+Q+w7d91118kIxiWdAfDioxgIZDEjS6i4h0h mJcyglQNZLVk35rRETg6ZIQyneMW278gBlVt2c+P8ypCxfwxljUILP8JAUUA /igKGdBwtojJLTKktLbKbT6CNDxqsyI4TLQ26DOEVdTVolllA+mlsKfWIKRS XEgj3kMEZ0kpjDfxzacsIwv7UNhLuknH3gWiVE/QA/p2N/beFkcwLTshyOoF DsNq27lCz0OT0LnYpGYCFhEh5XJtsB4TaNL24EyYklstGmAR4SmmeKGIbqh+ 4Uysu1d2Y4uF002SpeRQp640F3fogXqkJBqV4Z7juky+AhPLZQ9042QJ2T7u Os4uildiK3WBOBaHWCX7OVfpuikoJ+/6l7cnHokVlGK1+KZciNLgvnaEfaPL V7AVKzwgHPM15XrJtwOnLBfFcZBjgj2A09LpMYmQJcOOCp12qb4Gy5BsZYCr NOAkNwqsolf+sIvhugpLCUWoEIhdIeKUvYpNbvO35SWR13UHxEtWWF+CYk7b iNi78UqaBG4kzFi5Eai/V6VX6ywxvj1008AWQGgO6j9WuXU6ZZRjKz4ssUWq 8ApX2+Xg6ioLo2w/lvA8odhQJfkSi13o+pfAmFypgpZ+hFMrDDfvutghlklQ rSqsOQDJCb0PUSECp/hj2xQ9f4EMqXfbHfF82zvTviAiOmifWngjvgksL9/+ SIbnW4JreLMaAUc22yqEvlRlRZahVB7FlBQmYCkRrtH9SMsHep/TQk3KkMMY rMshD6VW9BVfO10p8UGBZNgwVVM5QMVpiYs3og5RAdW73BRuzGsw1lrBU47K 4HxbZAbZ2wJLwIF0JhVv+/s7kN/Ef/wnHNIXgYPBBM52eFYKlfeDI77npJd/ V2FEAQIVKMYWjVMIGa8ruZLp3dX1nXj1P2VOW7RtgTsWaX3L9jhWCzTgfE3l ir4sceBsquitIbTXETSusV46xTssU4oBpnctzjxVZhTiisrZ+IqNjkxuKqts FMDhsqVFZY/4Zl9sQirSljG/3EsvkjRttRm/lhFC2ENexKY02O8dWV/FtZMe Qg2qZmu3y+EG7o5z3ChX9a+3kt7lepwmvY7I72dU0twuRbMZ1nZXcc93WoBn MxIaGxdD6ADH3+uW4uL/a8dvo93PP+ODp2sJfe4Z/6FP94tswmgAQjHpFTYB o+Lqqr4TnQbdBpKppxyAUbB7u/OdPXRc8dxOFQ80bt3aHO112J/VaSf0Lt9I 4cu0XpLzq6PMJ17ec1G+UCrnjo8cfoQjcnkE8CUtGoZuBCBSnLGxt/+DA5f8 colJIb6WEJ0cyVG8CSObRWpHQpQJmJ7kvfyfN6DHIPNmyxlcMgZ78P8DkTk4 hYjKHq+Pzglc95PATTt1sZLHxblYDmOJYe2bTOEzxXINhFSsK5tsNCep6W5g AevIfcCp9QuqQsO5MNPbdBrk3gyzGAANw83plIwEuXrkwU7aipGcy0laUkCd emPNIygfYsS5IribUxJKC36BCrN27UYl8XUR/W97V9bctpGEn/UvoDxsyAiS eOAgw0ptyY7X66qNvCUr2UcVQAIySjTJEJAVP+S/p6+5cNiULB8bs/xikeAA mOmZ+br76294CvP6ggFRm6FAjgAMGVVvY5AIg22rzIAYpt+rvuYd+juK9X3n 1cbfOEffS0yPkDhFDnA44PkZX6jtBW523Fhij5n/ABPJV+ygLTlcKs2wSYoF e3WmqWWRZw7wQNigF6HOWWJPiiHiXXTS6mbSmAiSUQdbBUdvQzFQBuxspxad 4kf19FQjD6/bfCQrNe1REmJmygJlcxrFvA6pzekR16GdlqFdVqHPtQg9Ut93 d71ztwumBGEtxzuegFhbQZECuzVJNbV0ZpPUULvcBvZ1mkO9ZSe12CQ91C53 365JgzCX18O3NVZE80KdFKsn18ylrf7OTx2+inMHYyPuFGUiNpHf9zVD+5qh fc3QY9cMHe5rhpo1Q4efpGbo8JurGTr8tmqGDISre6Bp5Tqfz6/+9ev508sX L8+vzi6ev2JBvwgrk6PRcGBqldVHBga+t6QDB825oO/BrZ4/u4SbXP335Yvz y2cXvbBv0wY1ZdNFDj1VFNLWQsQt7MgjPfJcNupckWIPXhYLUlNaFgv6+6yq tudEIgBksAQYQJ/+BosW5q4BUFWkJvQ22WIJdSun02JuMotUfMSnDU4kPeET 9KQMJRJ2RFWTDw9AH6WwVx4cZL/jRf+GNWP2wLEdx1M/Gk9MrLFJNkIllXoC /dRBQ30T4QXzbAtrMMmMSMJttOCDjiKjhkvgex0lRQ3Cm99Ama0EtDujLGix zhQ4ogVGMmXoRm4l5mST1J/yjBhPYEYEI0Pp+/iOPDUhuTuksKnCMOVdmKoB zCDxtbRA/JK9eZVVvX+QSfveQMtoMeG6b0DuyQ4o+p5j6vFt9TKr3+Js51CN jjBKcIUjL9KMia78ryOkQc23xDVSO7Chwj9CK8jetVNoePfGRG9VUKxDpD7X 4ukt19ej3rkEOeidYFkoMXthCYKKQCC+0bldJ8DvIE8PfaFaqTv9lNwzbde4 RKKPR3iwEcCA4Zf2KeJCCRJs7dWZomFc6rgFJqS9JK84mCHGj/EXbBnBmhOs ARSVJ1tVSYUhEMznc0tYr+IRpQrut11lCwJdiMgp88KwfO2Ebmz7tSCFxe6h mIIqmlLeAeYMMTF4ajCDtbQq+g9e5VJ8YOLhh6OTQb/fHmfBpniONFzpo588 Z/2uXepEHvQ0s8MN9V//WZ8rz8gV4VDZXfa99L/mBn7Yyjn9q1IeGANjAwbM BRaUiNyWygdixZTKx5F5sDYgmy8BaGaaka4t2MwvmktW5Cybgxw5IYLJZKTg IEyf5VqqfskZ0PF8pAqAx5YlRAfTujuYYlYCv8wdKb3blWoELdTHpmESlZVO 6Di+D+veqiyoIXZwYhu2B+XNWhRhxPt6CpfknGCfkNasisCih4IFZ/BR2BbA 1f2mw5O3Qh65dIjL1Emc2UbGA42WrUW0Wd6WNOt6hR28lW7NFf3CIqysMQ95 Vkq816wntaluTTB3iuipYSkIHcGEgxuHnWFIvYPsMjsePjk+zY79MKwUxBPY 4pXGG9c6AehzEeqx+4klqWQWNSWTx6RFRjBtaLfW+A/e4CQORQmLKGi7/tQ8 BRJIr5KqQheyLJfrCrzEtwkgXQC9PvH0CS+wucJcW8n/GJnAQkVgJxyGfhSO xrZ416P1hGUsD+qOHX//iH3yQHOaoDlNx5ZbFY6wX8caRGL7FxkudpntbpQ9 8TUY0h61p/Dap+fMXG6He9tmqHVprZLEarlW6dZmi+0DMhNhMuidi2eXv16c X/328sXPPeOv1nv1dVK+3qVfQ/RNQ+WueuJxad/KoYOyTEGbMxnw6H49fu19 YTis3J/Yj2ofOTbkYAxjMDELxN9hDDojBrv6XI/mSdFcUBrVCQljy64pvlPC wWff+DeGyUS751p5U8U2I8qj5CQqxA4VOD3zG9xgyRkwaJtOZMBbU10yQxtD +EcfBKsokKuLVEWKXeLllhICF/eLhv+cUCA5CcVbIqmCi6AqEaBhRfj40XV4 FiIgi2cvtDPaDDgm2jnjv5X1girDTq/pE7imbKXUmFkZKEZq9MQtQ2dqMG5J RxIfiWClyaHgjUmqQotSsNOKwhESXOfH0G2ZKjbVw6x9vlmzpq1Df8EnTtD5 gleUUUPDUy+oy4Jk4GD8MRyK5rHVdPpkeZe8Y9BJx3443f2f4iZDkRrfGTG6 v3FItAeh+9wmbpMyxoFIY6g+Z8/hZpXdkbQQZTIqyV5s8c2fCOtUk+oUNpfG aMASyx4tF9kXYX5F+lDahse6sqXhsbOLCg9hezE8rOwu/H5bkD4P0jKWVLLz Oll1uewzGVru7ILKHFIycXww1j6mMzYoxYWhBLfXz+A210TILsvbTBPnUVR+ zkN5rN55uSyYL3nHDh7lEXSX34GjlC3o9lnJuTU+VyXZOCEUPguFOc/Zmw29 tCI2us6RcK2vtxiklOciDxOcJImXvEnepZk+eoO+8LKVyuyQhP7ZCnWh/xCH BkMTqqu1dWnWDiwcRDA7Vl2sEii+M/9m5o7wKrCwUULOWn4UGeVUFtT7oKbD 3VHT4f1Q0+H9UNP79t4Gw6wod4Ki4XCKeH6yh0xfEDJNR34UBeHfDTJ9XDqm K2HyuSGXpnnzC7hoq9T8W1pdsR4zV2rTUguBIWNng1ehCmJXYLTU4mRY4SBe o9uCUQp1IfcoU/xarEhZEQOpRA4ZnoeRrBRMsKNMSDOsCJco0tr6Gn7gFFr2 T97D3WNQyIbArCbR9TckXl7xObwPm6cGihhYh2dipSuuqhepKiLsNYNRxHPC etaiM0xsXU38s9MfPBHM/qcTHG4rJu1/MLAsc7wusg0tVX3Pji5zv0lwmUh8 km2xAhStTQ3a48AfkTNReRJjwASYsIvx4c77TI/G3VKSGJazkAKY5qCylB7R ECv+p8XZqO4INAF+5BikZfc7xCE/Q6D/a4zuK0gt7GUEuOy1UI/5WpwhW5iY eGL1bfn/Gcv9RkBXubneCXONY8BcQbTHXF8Oc0H/+1FsRPf3mGuPufaYa4+5 9phrj7n2mOsrxlyNk4dEifi0dhaWHOPT8a2cN5RleRTnYZCGgyCLx+lwsAiy YTrKh6MgHmVZOgkmwzxPTk4G2ThcxMliFKZRnk4nYT6J8nE+SSd5kiXBNFrE wzActpwx2PUE5qihrivq8DL7A7VvSLCVTp/i+ourDWp22IcsC3c38qPx0Gbu 4geat9tsrKiUjlUPEyCUEPC9J8v1/IY5sFQVm96A0fneLSzG0BhR6mhkpD0+ atg5GtU+/RnBWiXCV90/az9jHOGJXI602A8cMz1reUdz0qX7THJ3Pj2045nw nNHar6yeSZew++3wcmjjq0V7c3zVGr7xu62cj6FUU6Vh5vWvxc7x1Mx5NBpM p9PJMBrHgxBMI0imi8U4SadxHEyTZBSn05OTfBzk0SJMptPhfJ4mw1EM/6ZB nkcZoOV0shjHeRBGSbedNx6haeiNS+qW7ippezao5ZPmJ7EfTI2GkuZtk6ZY uUnmGckrmz+NCFyPqpfwi77UJcI4aMQMbYiyMh4AdrwsVjdc6sS1UqxZZotS U0UG1ruK/PLm+mq+RBkJbts2kk2r+vSiKG8UK2xlq15rKnnVLjvtiJG7P7VP yqRdYVtsCFfAO25Fc1Ak1ohgrsg4s9otLKUg3ToOJ/e/PuzwS/Y/78DoithD 0XPHAqt0EBIST7D/BYfmSPW4hRhmZqgsn4Hklo6HmCwVaP3ph/Yv29Pa0P6C AAA= ------- =_aaaaaaaaaa0 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 ------- =_aaaaaaaaaa0--