Thread: [Fwd: Re: Transactions and temp tables]
Hi all,
I just saw that this new patch was not considered because the previous version ended being rejected.
Note that this version of the patch aims at supporting ONLY temp tables that are created AND dropped in the same transaction. We need to be able to use temp tables in transactions that are doing 2PC, but the temp table lifespan does not need to cross transaction boundaries.
Please let me know if this patch could be integrated in 8.4.
Thanks,
Emmanuel
-------- Original Message --------
I just saw that this new patch was not considered because the previous version ended being rejected.
Note that this version of the patch aims at supporting ONLY temp tables that are created AND dropped in the same transaction. We need to be able to use temp tables in transactions that are doing 2PC, but the temp table lifespan does not need to cross transaction boundaries.
Please let me know if this patch could be integrated in 8.4.
Thanks,
Emmanuel
-------- Original Message --------
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
-- Emmanuel Cecchet Aster Data Systems - Frontline data warehousing Web: http://www.asterdata.com