Received: from localhost (unknown [200.46.204.183]) by mail.postgresql.org (Postfix) with ESMTP id 4BCF464FDFF for ; Mon, 1 Dec 2008 23:00: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 12545-08 for ; Mon, 1 Dec 2008 23:00:52 -0400 (AST) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from outbound-mail-301.bluehost.com (outbound-mail-301.bluehost.com [67.222.53.8]) by mail.postgresql.org (Postfix) with SMTP id 7A7E064FD49 for ; Mon, 1 Dec 2008 23:00:52 -0400 (AST) Received: (qmail 31327 invoked by uid 0); 2 Dec 2008 02:59:34 -0000 Received: from unknown (HELO fast22.fastdomain.com) (74.220.199.22) by outboundproxy6.bluehost.com with SMTP; 2 Dec 2008 02:59:34 -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=MN1nLpV4MCPW3n6olB446CReuMcI/yQDXHnomB0aOPdV7VWTOAvLwbNBZlmItJr6UquhdKjVvzF0r95sDeaqemb6fG0flwFhnE6+HWWN42CdfeWxMlmo7EqUGzrFuj9k; Received: from c-71-192-35-139.hsd1.ma.comcast.net ([71.192.35.139] helo=[192.168.0.12]) by fast22.fastdomain.com with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.69) (envelope-from ) id 1L7LVH-00058V-HM; Mon, 01 Dec 2008 20:00:47 -0700 Message-ID: <4934A4E0.8080208@frogthinker.org> Date: Mon, 01 Dec 2008 22:00:48 -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> In-Reply-To: <49344E22.2000008@frogthinker.org> Content-Type: multipart/mixed; boundary="------------000007040701020806090501" X-Identified-User: {2846:fast22.fastdomain.com:frogthin:frogthinker.org} {sentby:smtp auth 71.192.35.139 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/52 X-Sequence-Number: 128681 This is a multi-part message in MIME format. --------------000007040701020806090501 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Heikki, I have extended the patch to allow temp tables that have been created/dropped within the same transaction (and also on commit drop). There is a problem with temp tables with on delete rows that are created inside a transaction. Take the 2pc_on_delete_rows_transaction.sql test case and change the creation statement, instead of create temp table foo(x int) on commit delete rows; try create temp table foo(x serial primary key) on commit delete rows; The test will fail. It looks like the onCommit field is not properly updated when serial or primary key is used in that context. I did not figure out why. Waiting for your feedback Emmanuel Emmanuel Cecchet wrote: > I think that the Assert in is_temp_rel(Oid) in tablecmds.c should be > replaced by if (on_commits == NULL) return false; > As the use case below shows, a regular table can be created and hold a > LOCKTAG_RELATION lock that will trigger the call to is_temp_rel in > is_preparable_locktag. The assert will break if no temp table was > accessed. > > As we were also trying to list potential issues, if the temp table > uses a SERIAL type, will there be potentially a problem with the > sequence at prepare time? > > Emmanuel > > >> The following test fails with your patch on my system. Could you >> check if you can reproduce? >> >> psql (8.4devel) >> Type "help" for help. >> >> test=# begin; >> BEGIN >> test=# create table paul(x int); >> CREATE TABLE >> test=# insert into paul values(1); >> INSERT 0 1 >> test=# prepare transaction 'persistentTableShouldSucceed'; >> server closed the connection unexpectedly >> This probably means the server terminated abnormally >> before or while processing the request. >> The connection to the server was lost. Attempting reset: Failed. >> >> --- >> >> LOG: database system is ready to accept connections >> TRAP: FailedAssertion("!(on_commits != ((void *)0))", File: >> "tablecmds.c", Line: 7823) >> LOG: server process (PID 15969) was terminated by signal 6: Aborted >> LOG: terminating any other active server processes >> FATAL: the database system is in recovery mode >> >> >> Thanks, >> manu >> > > -- Emmanuel Cecchet FTO @ Frog Thinker Open Source Development & Consulting -- Web: http://www.frogthinker.org email: manu@frogthinker.org Skype: emmanuel_cecchet --------------000007040701020806090501 Content-Type: application/octet-stream; name="patch-2pc-temp-table-8.4v5-withtests.zip" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="patch-2pc-temp-table-8.4v5-withtests.zip" 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 --------------000007040701020806090501--