Received: from localhost (unknown [200.46.204.183]) by mail.postgresql.org (Postfix) with ESMTP id 144B36503C5 for ; Mon, 8 Dec 2008 16:21:56 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 11656-06 for ; Mon, 8 Dec 2008 16:21:52 -0400 (AST) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from outboundproxy8.bluehost.com (outboundproxy7.bluehost.com [66.147.243.8]) by mail.postgresql.org (Postfix) with SMTP id 468CD650292 for ; Mon, 8 Dec 2008 16:21:50 -0400 (AST) Received: (qmail 9893 invoked by uid 0); 8 Dec 2008 19:59:27 -0000 Received: from unknown (HELO fast22.fastdomain.com) (74.220.199.22) by outboundproxy7.bluehost.com.bluehost.com with SMTP; 8 Dec 2008 19:59:27 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=frogthinker.org; h=Received:Message-ID:Date:From:Organization:User-Agent:MIME-Version:To:CC:Subject:References:In-Reply-To:Content-Type:X-Identified-User; b=fCJR6VU+Y81DYz/g1j3r+/VPkqKdZ4RUQSRZVnBqYdCGt+vlR3hrJBJm4CpvyAQT8c2ANAtvIOLubw3V0jVsctUbtqZeG5zO7CtUIFUFI9SDQgsNabsfaTrfTEoHF25y; Received: from [74.85.100.73] (helo=[131.106.61.15]) by fast22.fastdomain.com with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.69) (envelope-from ) id 1L9m5L-0002s0-MH; Mon, 08 Dec 2008 12:48:04 -0700 Message-ID: <493D79C0.7080405@frogthinker.org> Date: Mon, 08 Dec 2008 14:47:12 -0500 From: Emmanuel Cecchet Organization: Frog Thinker User-Agent: Thunderbird 2.0.0.18 (Windows/20081105) MIME-Version: 1.0 To: Heikki Linnakangas CC: Tom Lane , pgsql-hackers@postgresql.org Subject: Re: Transactions and temp tables References: <48EA7B12.6050906@frogthinker.org> <48EB0551.50205@enterprisedb.com> <48EB95B7.10604@frogthinker.org> <48EC7EB5.5020001@enterprisedb.com> <48ECAA8F.3070306@frogthinker.org> <28137.1223472191@sss.pgh.pa.us> <48ECBBC2.6060003@frogthinker.org> <29132.1223475486@sss.pgh.pa.us> <48EFA13C.2060407@frogthinker.org> <490F804A.60108@enterprisedb.com> <490FB4B3.908@frogthinker.org> <49106B10.2090407@enterprisedb.com> <4910DFC0.3080301@frogthinker.org> <4914CD14.2060608@frogthinker.org> <4921C42A.3030600@enterprisedb.com> <492221A3.1060608@frogthinker.org> <4922A798.7050709@enterprisedb.com> <49232993.1050801@enterprisedb.com> <49243376.2000404@frogthinker.org> <492543D5.9050904@enterprisedb.com> <492B377F.4080602@frogthinker.org> <49344E22.2000008@frogthinker.org> <4934A4E0.8080208@frogthinker.org> <49364AFB.5060404@enterprisedb.com> In-Reply-To: <49364AFB.5060404@enterprisedb.com> Content-Type: multipart/mixed; boundary="------------040207090700010502030501" X-Identified-User: {2846:fast22.fastdomain.com:frogthin:frogthinker.org} {sentby:smtp auth 74.85.100.73 authed with manu+frogthinker.org} X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests=none X-Spam-Level: X-Archive-Number: 200812/481 X-Sequence-Number: 129110 This is a multi-part message in MIME format. --------------040207090700010502030501 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi all, Here is a new version of the patch still based on the last proposal by Heikki. This patch only support temp tables that are created AND dropped in the same transaction. This works with any kind of temp table (with on commit options or not). This simplifies the problem since the temp tables we consider here cannot be accessed by another backend anyway since their scope is the one of the transaction. We do NOT allow: - access to temp tables that were not created AND dropped in the transaction - created temp tables that are not dropped at prepare time - dropped temp tables that were not created in the transaction The attached patch has a number of tests for all these cases including sequences and index on temp tables. Let me know what you think Emmanuel -- Emmanuel Cecchet FTO @ Frog Thinker Open Source Development & Consulting -- Web: http://www.frogthinker.org email: manu@frogthinker.org Skype: emmanuel_cecchet --------------040207090700010502030501 Content-Type: application/octet-stream; name="patch-2pc-temp-table-8.4v6-create_drop_only-withtests.zip" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="patch-2pc-temp-table-8.4v6-create_drop_only-withtests.zip" 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 --------------040207090700010502030501--