Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bIm4z-0007VY-81 for pgsql-hackers@arkaria.postgresql.org; Fri, 01 Jul 2016 00:13:09 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1bIm4y-0005Bu-JH for pgsql-hackers@arkaria.postgresql.org; Fri, 01 Jul 2016 00:13:08 +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 1bIm4x-0005Bn-Ml for pgsql-hackers@postgresql.org; Fri, 01 Jul 2016 00:13:08 +0000 Received: from mail-lf0-x230.google.com ([2a00:1450:4010:c07::230]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1bIm4t-00083R-IC for pgsql-hackers@postgresql.org; Fri, 01 Jul 2016 00:13:06 +0000 Received: by mail-lf0-x230.google.com with SMTP id f6so66566994lfg.0 for ; Thu, 30 Jun 2016 17:13:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joh-to.20150623.gappssmtp.com; s=20150623; h=to:from:subject:message-id:date:user-agent:mime-version; bh=tdOX028UQkVoMTTyp+nem7wbB7RU7RKrYTLosYtFfhI=; b=CzqFthXzafckn30IUtJeuQ+8OKHsQDTqkiYD1biaLyINfVYpGPMkRKJBGz/LRytBe9 5qM6HwaJ1iZBJ6LbSc8vbAxFagKF8rW/nwHw39IuoY7W1t/dWuqqL5T7aAjXSWxa2lwQ WmQcOHoQZLIz7PtuJveNbZMJhtW+12imJUi53AmvQBxurToOizdWXpJgOt6B50mGfXre X+ktRSwQJf8vHXCrkPH3vEbBbvVnGGpsu2q5TdEZpi67qxniOHutTovezP4pKdh/m2yp Z/W/pl4r2V7TQq9X9f7vtTEDYHCZODvE4+l8qzXpZ5HQO9R/BuO98JNpFFZZmxu9GCnW b4nQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version; bh=tdOX028UQkVoMTTyp+nem7wbB7RU7RKrYTLosYtFfhI=; b=V1b3oyswzbWR9/rIUVrjdwqBbCwH34rAiWKMyQFiYh3pJfioo+mgS40FCIFDW6QQxo XTL+U4Uy+d8qjjntEZhgZcnA0hhcfpGhHyfD+e661EAKIHeCfQ+Y0Y9hAFHbvQip/u4M Leo/fQAz802sPfppmPwmUGFti431Tb+arTk7O5CVdojzQPymwFW2/EJycq10l/NXq1my jRdrEtMJEjXCDrO04FvqDOcOIWlyrvph7qFXOFJA3vTB+RmUQhJ+IS5c1V5wjqnmcneO Wa+Hp3pgXTE3FLXhVNusG6ylYJrkHQQD/0k5X1gy9KdgF5re37Lwhx/ADfA7cxyzknlx PGWQ== X-Gm-Message-State: ALyK8tIwk60C7FgQQ2o8VITqnZGgV1912LMI4Y+1eo1nO3tn3PSpOIrnUWrgfPLiNw3vlw== X-Received: by 10.25.31.77 with SMTP id f74mr6080986lff.215.1467331980278; Thu, 30 Jun 2016 17:13:00 -0700 (PDT) Received: from [172.20.10.2] (c-5eea273d-74736162.cust.telenor.se. [94.234.39.61]) by smtp.googlemail.com with ESMTPSA id 195sm1912259ljf.40.2016.06.30.17.12.58 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Jun 2016 17:12:59 -0700 (PDT) To: PostgreSQL-development From: Marko Tiikkaja Subject: Allow INSTEAD OF DELETE triggers to modify the tuple for RETURNING Message-ID: Date: Fri, 1 Jul 2016 02:12:56 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------7900A92A7F273B75766D1ED0" X-Pg-Spam-Score: -2.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. --------------7900A92A7F273B75766D1ED0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Hi, Currently the tuple returned by INSTEAD OF triggers on DELETEs is only used to determine whether to pretend that the DELETE happened or not, which is often not helpful enough; for example, the actual tuple might have been concurrently UPDATEd by another transaction and one or more of the columns now hold values different from those in the planSlot tuple. Attached is an example case which is impossible to properly implement under the current behavior. For what it's worth, the current behavior seems to be an accident; before INSTEAD OF triggers either the tuple was already locked (in case of BEFORE triggers) or the actual pre-DELETE version of the tuple was fetched from the heap. So I'm suggesting to change this behavior and allow INSTEAD OF DELETE triggers to modify the OLD tuple and use that for RETURNING instead of returning the tuple in planSlot. Attached is a WIP patch implementing that. Is there any reason why we wouldn't want to change the current behavior? .m --------------7900A92A7F273B75766D1ED0 Content-Type: text/plain; charset=UTF-8; name="instead_delete.sql" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="instead_delete.sql" QkVHSU47CgpDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmb29mKCkgUkVU VVJOUyBUUklHR0VSIEFTICQkCkJFR0lOCi0tIGltYWdpbmUgc29tZW9uZSBj b25jdXJyZW50bHkgaW5jcmVtZW50ZWQgY291bnRlciBoZXJlCk9MRC5jb3Vu dGVyIDo9IE9MRC5jb3VudGVyICsgMTsKUkVUVVJOIE9MRDsKRU5ECiQkIExB TkdVQUdFIHBscGdzcWw7CgpDUkVBVEUgVEFCTEUgZm9vKGNvdW50ZXIgaW50 IE5PVCBOVUxMKTsKCkNSRUFURSBWSUVXIGZvb3YgQVMgU0VMRUNUICogRlJP TSBmb287CgpDUkVBVEUgVFJJR0dFUiBmb292X2luc3RlYWQKSU5TVEVBRCBP RiBERUxFVEUgT04gZm9vdgpGT1IgRUFDSCBST1cKRVhFQ1VURSBQUk9DRURV UkUgZm9vZigpOwoKSU5TRVJUIElOVE8gZm9vIFZBTFVFUyAoMCk7CgpERUxF VEUgRlJPTSBmb292IFJFVFVSTklORyBjb3VudGVyOwoKUk9MTEJBQ0s7Cg== --------------7900A92A7F273B75766D1ED0 Content-Type: text/plain; charset=UTF-8; name="instead_delete_returning_v0.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="instead_delete_returning_v0.patch" KioqIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jCi0tLSBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3RyaWdnZXIuYwoqKioqKioqKioqKioqKioK KioqIDIyOTUsMjMwNyAqKioqIEV4ZWNBUkRlbGV0ZVRyaWdnZXJzKEVTdGF0 ZSAqZXN0YXRlLCBSZXN1bHRSZWxJbmZvICpyZWxpbmZvLAogIAl9CiAgfQog IAohIGJvb2wKICBFeGVjSVJEZWxldGVUcmlnZ2VycyhFU3RhdGUgKmVzdGF0 ZSwgUmVzdWx0UmVsSW5mbyAqcmVsaW5mbywKISAJCQkJCSBIZWFwVHVwbGUg dHJpZ3R1cGxlKQogIHsKICAJVHJpZ2dlckRlc2MgKnRyaWdkZXNjID0gcmVs aW5mby0+cmlfVHJpZ0Rlc2M7CiAgCVRyaWdnZXJEYXRhIExvY1RyaWdnZXJE YXRhOwohIAlIZWFwVHVwbGUJcmV0dHVwbGU7CiAgCWludAkJCWk7CiAgCiAg CUxvY1RyaWdnZXJEYXRhLnR5cGUgPSBUX1RyaWdnZXJEYXRhOwotLS0gMjI5 NSwyMzA3IC0tLS0KICAJfQogIH0KICAKISBUdXBsZVRhYmxlU2xvdCAqCiAg RXhlY0lSRGVsZXRlVHJpZ2dlcnMoRVN0YXRlICplc3RhdGUsIFJlc3VsdFJl bEluZm8gKnJlbGluZm8sCiEgCQkJCQkgSGVhcFR1cGxlIHRyaWd0dXBsZSwg VHVwbGVUYWJsZVNsb3QgKnNsb3QpCiAgewogIAlUcmlnZ2VyRGVzYyAqdHJp Z2Rlc2MgPSByZWxpbmZvLT5yaV9UcmlnRGVzYzsKICAJVHJpZ2dlckRhdGEg TG9jVHJpZ2dlckRhdGE7CiEgCUhlYXBUdXBsZQlyZXR0dXBsZSA9IHRyaWd0 dXBsZTsKICAJaW50CQkJaTsKICAKICAJTG9jVHJpZ2dlckRhdGEudHlwZSA9 IFRfVHJpZ2dlckRhdGE7CioqKioqKioqKioqKioqKgoqKiogMjMzMywyMzQz ICoqKiogRXhlY0lSRGVsZXRlVHJpZ2dlcnMoRVN0YXRlICplc3RhdGUsIFJl c3VsdFJlbEluZm8gKnJlbGluZm8sCiAgCQkJCQkJCQkJICAgcmVsaW5mby0+ cmlfVHJpZ0luc3RydW1lbnQsCiAgCQkJCQkJCQkJICAgR2V0UGVyVHVwbGVN ZW1vcnlDb250ZXh0KGVzdGF0ZSkpOwogIAkJaWYgKHJldHR1cGxlID09IE5V TEwpCiEgCQkJcmV0dXJuIGZhbHNlOwkJLyogRGVsZXRlIHdhcyBzdXBwcmVz c2VkICovCiEgCQlpZiAocmV0dHVwbGUgIT0gdHJpZ3R1cGxlKQohIAkJCWhl YXBfZnJlZXR1cGxlKHJldHR1cGxlKTsKICAJfQohIAlyZXR1cm4gdHJ1ZTsK ICB9CiAgCiAgdm9pZAotLS0gMjMzMywyMzU5IC0tLS0KICAJCQkJCQkJCQkg ICByZWxpbmZvLT5yaV9UcmlnSW5zdHJ1bWVudCwKICAJCQkJCQkJCQkgICBH ZXRQZXJUdXBsZU1lbW9yeUNvbnRleHQoZXN0YXRlKSk7CiAgCQlpZiAocmV0 dHVwbGUgPT0gTlVMTCkKISAJCQlyZXR1cm4gTlVMTDsJCS8qIERlbGV0ZSB3 YXMgc3VwcHJlc3NlZCAqLwogIAl9CiEgCiEgCWlmIChyZXR0dXBsZSAhPSB0 cmlndHVwbGUpCiEgCXsKISAJCS8qCiEgCQkgKiBSZXR1cm4gdGhlIG1vZGlm aWVkIHR1cGxlIHVzaW5nIHRoZSBlc190cmlnX3R1cGxlX3Nsb3QuICBXZSBh c3N1bWUKISAJCSAqIHRoZSB0dXBsZSB3YXMgYWxsb2NhdGVkIGluIHBlci10 dXBsZSBtZW1vcnkgY29udGV4dCwgYW5kIHRoZXJlZm9yZQohIAkJICogd2ls bCBnbyBhd2F5IGJ5IGl0c2VsZi4gVGhlIHR1cGxlIHRhYmxlIHNsb3Qgc2hv dWxkIG5vdCB0cnkgdG8KISAJCSAqIGNsZWFyIGl0LgohIAkJICovCiEgCQlU dXBsZVRhYmxlU2xvdCAqbmV3c2xvdCA9IGVzdGF0ZS0+ZXNfdHJpZ190dXBs ZV9zbG90OwohIAkJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERl c2NyKHJlbGluZm8tPnJpX1JlbGF0aW9uRGVzYyk7CiEgCiEgCQlpZiAobmV3 c2xvdC0+dHRzX3R1cGxlRGVzY3JpcHRvciAhPSB0dXBkZXNjKQohIAkJCUV4 ZWNTZXRTbG90RGVzY3JpcHRvcihuZXdzbG90LCB0dXBkZXNjKTsKISAJCUV4 ZWNTdG9yZVR1cGxlKHJldHR1cGxlLCBuZXdzbG90LCBJbnZhbGlkQnVmZmVy LCBmYWxzZSk7CiEgCQlzbG90ID0gbmV3c2xvdDsKISAJfQohIAohIAlyZXR1 cm4gc2xvdDsKICB9CiAgCiAgdm9pZAoqKiogYS9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlTW9kaWZ5VGFibGUuYwotLS0gYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlTW9kaWZ5VGFibGUuYwoqKioqKioqKioqKioqKioKKioqIDU3 Myw1ODUgKioqKiBFeGVjRGVsZXRlKEl0ZW1Qb2ludGVyIHR1cGxlaWQsCiAg CWlmIChyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYyAmJgogIAkJcmVzdWx0 UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfZGVsZXRlX2luc3RlYWRfcm93 KQogIAl7CiEgCQlib29sCQlkb2RlbGV0ZTsKICAKISAJCUFzc2VydChvbGR0 dXBsZSAhPSBOVUxMKTsKISAJCWRvZGVsZXRlID0gRXhlY0lSRGVsZXRlVHJp Z2dlcnMoZXN0YXRlLCByZXN1bHRSZWxJbmZvLCBvbGR0dXBsZSk7CiAgCiEg CQlpZiAoIWRvZGVsZXRlKQkJCS8qICJkbyBub3RoaW5nIiAqLwogIAkJCXJl dHVybiBOVUxMOwogIAl9CiAgCWVsc2UgaWYgKHJlc3VsdFJlbEluZm8tPnJp X0Zkd1JvdXRpbmUpCiAgCXsKLS0tIDU3Myw1OTUgLS0tLQogIAlpZiAocmVz dWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MgJiYKICAJCXJlc3VsdFJlbEluZm8t PnJpX1RyaWdEZXNjLT50cmlnX2RlbGV0ZV9pbnN0ZWFkX3JvdykKICAJewoh IAkJLyoKISAJCSAqIFN0b3JlIHRoZSBoZWFwIHR1cGxlIGludG8gdGhlIHR1 cGxlIHRhYmxlIHNsb3QsIG1ha2luZyBzdXJlIHdlIGhhdmUgYQohIAkJICog d3JpdGFibGUgY29weS4gIFdlIGNhbiB1c2UgdGhlIHRyaWdnZXIgdHVwbGUg c2xvdC4KISAJCSAqLwohIAkJc2xvdCA9IGVzdGF0ZS0+ZXNfdHJpZ190dXBs ZV9zbG90OwohIAkJaWYgKHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3IgIT0g UmVsYXRpb25HZXREZXNjcihyZXN1bHRSZWxhdGlvbkRlc2MpKQohIAkJCUV4 ZWNTZXRTbG90RGVzY3JpcHRvcihzbG90LCBSZWxhdGlvbkdldERlc2NyKHJl c3VsdFJlbGF0aW9uRGVzYykpOwohIAkJRXhlY1N0b3JlVHVwbGUob2xkdHVw bGUsIHNsb3QsIEludmFsaWRCdWZmZXIsIGZhbHNlKTsKISAJCW9sZHR1cGxl ID0gRXhlY01hdGVyaWFsaXplU2xvdChzbG90KTsKICAKISAJCXNsb3QgPSBF eGVjSVJEZWxldGVUcmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbEluZm8sIG9s ZHR1cGxlLCBzbG90KTsKICAKISAJCWlmIChzbG90ID09IE5VTEwpCQkJLyog ImRvIG5vdGhpbmciICovCiAgCQkJcmV0dXJuIE5VTEw7CisgCisgCQkvKiB0 cmlnZ2VyIG1pZ2h0IGhhdmUgY2hhbmdlZCB0dXBsZSAqLworIAkJb2xkdHVw bGUgPSBFeGVjTWF0ZXJpYWxpemVTbG90KHNsb3QpOwogIAl9CiAgCWVsc2Ug aWYgKHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUpCiAgCXsKKioqKioq KioqKioqKioqCioqKiA3MTksNzMyICoqKiogbGRlbGV0ZTo7CiAgCS8qIFBy b2Nlc3MgUkVUVVJOSU5HIGlmIHByZXNlbnQgKi8KICAJaWYgKHJlc3VsdFJl bEluZm8tPnJpX3Byb2plY3RSZXR1cm5pbmcpCiAgCXsKLSAJCS8qCi0gCQkg KiBXZSBoYXZlIHRvIHB1dCB0aGUgdGFyZ2V0IHR1cGxlIGludG8gYSBzbG90 LCB3aGljaCBtZWFucyBmaXJzdCB3ZQotIAkJICogZ290dGEgZmV0Y2ggaXQu ICBXZSBjYW4gdXNlIHRoZSB0cmlnZ2VyIHR1cGxlIHNsb3QuCi0gCQkgKi8K ICAJCVR1cGxlVGFibGVTbG90ICpyc2xvdDsKICAJCUhlYXBUdXBsZURhdGEg ZGVsdHVwbGU7CiAgCQlCdWZmZXIJCWRlbGJ1ZmZlcjsKICAKICAJCWlmIChy ZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lKQogIAkJewogIAkJCS8qIEZE VyBtdXN0IGhhdmUgcHJvdmlkZWQgYSBzbG90IGNvbnRhaW5pbmcgdGhlIGRl bGV0ZWQgcm93ICovCi0tLSA3MjksNzUwIC0tLS0KICAJLyogUHJvY2VzcyBS RVRVUk5JTkcgaWYgcHJlc2VudCAqLwogIAlpZiAocmVzdWx0UmVsSW5mby0+ cmlfcHJvamVjdFJldHVybmluZykKICAJewogIAkJVHVwbGVUYWJsZVNsb3Qg KnJzbG90OwogIAkJSGVhcFR1cGxlRGF0YSBkZWx0dXBsZTsKICAJCUJ1ZmZl cgkJZGVsYnVmZmVyOwogIAorIAkJLyoKKyAJCSAqIElmIHdlIGZpcmVkIGFu IElOU1RFQUQgT0YgdHJpZ2dlciwgd2Ugc2hvdWxkIHVzZSB0aGUgdHVwbGUg cmV0dXJuZWQKKyAJCSAqIGZyb20gc2FpZCB0cmlnZ2VyIGZvciB0aGUgUkVU VVJOSU5HIHByb2plY3Rpb25zLgorIAkJICovCisgCQlpZiAocmVzdWx0UmVs SW5mby0+cmlfVHJpZ0Rlc2MgJiYKKyAJCQlyZXN1bHRSZWxJbmZvLT5yaV9U cmlnRGVzYy0+dHJpZ19kZWxldGVfaW5zdGVhZF9yb3cpCisgCQkJcmV0dXJu IEV4ZWNQcm9jZXNzUmV0dXJuaW5nKHJlc3VsdFJlbEluZm8sIHNsb3QsIHBs YW5TbG90KTsKKyAKKyAJCS8qCisgCQkgKiBPdGhlcndpc2Ugd2UgaGF2ZSB0 byB0byBmZXRjaCB0aGUgdGFyZ2V0IHR1cGxlIGludG8gYSBzbG90LiAgV2Ug Y2FuCisgCQkgKiB1c2UgdGhlIHRyaWdnZXIgdHVwbGUgc2xvdCBoZXJlIGFz IHdlbGwuCisgCQkgKi8KICAJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9GZHdS b3V0aW5lKQogIAkJewogIAkJCS8qIEZEVyBtdXN0IGhhdmUgcHJvdmlkZWQg YSBzbG90IGNvbnRhaW5pbmcgdGhlIGRlbGV0ZWQgcm93ICovCioqKiBhL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL3RyaWdnZXIuaAotLS0gYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy90cmlnZ2VyLmgKKioqKioqKioqKioqKioqCioqKiAxNTQs MTYyICoqKiogZXh0ZXJuIHZvaWQgRXhlY0FSRGVsZXRlVHJpZ2dlcnMoRVN0 YXRlICplc3RhdGUsCiAgCQkJCQkgUmVzdWx0UmVsSW5mbyAqcmVsaW5mbywK ICAJCQkJCSBJdGVtUG9pbnRlciB0dXBsZWlkLAogIAkJCQkJIEhlYXBUdXBs ZSBmZHdfdHJpZ3R1cGxlKTsKISBleHRlcm4gYm9vbCBFeGVjSVJEZWxldGVU cmlnZ2VycyhFU3RhdGUgKmVzdGF0ZSwKICAJCQkJCSBSZXN1bHRSZWxJbmZv ICpyZWxpbmZvLAohIAkJCQkJIEhlYXBUdXBsZSB0cmlndHVwbGUpOwogIGV4 dGVybiB2b2lkIEV4ZWNCU1VwZGF0ZVRyaWdnZXJzKEVTdGF0ZSAqZXN0YXRl LAogIAkJCQkJIFJlc3VsdFJlbEluZm8gKnJlbGluZm8pOwogIGV4dGVybiB2 b2lkIEV4ZWNBU1VwZGF0ZVRyaWdnZXJzKEVTdGF0ZSAqZXN0YXRlLAotLS0g MTU0LDE2MyAtLS0tCiAgCQkJCQkgUmVzdWx0UmVsSW5mbyAqcmVsaW5mbywK ICAJCQkJCSBJdGVtUG9pbnRlciB0dXBsZWlkLAogIAkJCQkJIEhlYXBUdXBs ZSBmZHdfdHJpZ3R1cGxlKTsKISBleHRlcm4gVHVwbGVUYWJsZVNsb3QgKkV4 ZWNJUkRlbGV0ZVRyaWdnZXJzKEVTdGF0ZSAqZXN0YXRlLAogIAkJCQkJIFJl c3VsdFJlbEluZm8gKnJlbGluZm8sCiEgCQkJCQkgSGVhcFR1cGxlIHRyaWd0 dXBsZSwKISAJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CiAgZXh0ZXJu IHZvaWQgRXhlY0JTVXBkYXRlVHJpZ2dlcnMoRVN0YXRlICplc3RhdGUsCiAg CQkJCQkgUmVzdWx0UmVsSW5mbyAqcmVsaW5mbyk7CiAgZXh0ZXJuIHZvaWQg RXhlY0FTVXBkYXRlVHJpZ2dlcnMoRVN0YXRlICplc3RhdGUsCg== --------------7900A92A7F273B75766D1ED0 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 --------------7900A92A7F273B75766D1ED0--