Re: COPY with hints, rebirth
Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>
From: Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>
To: Simon Riggs <simon@2ndQuadrant.com>
Cc: PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2012-03-01T20:49:23Z
Lists: pgsql-hackers
On 01.03.2012 18:40, Simon Riggs wrote: > On Sun, Feb 26, 2012 at 7:16 PM, Heikki Linnakangas > <heikki.linnakangas@enterprisedb.com> wrote: >> On 24.02.2012 22:55, Simon Riggs wrote: >>> >>> What exactly does it do? Previously, we optimised COPY when it was >>> loading data into a newly created table or a freshly truncated table. >>> This patch extends that and actually sets the tuple header flag as >>> HEAP_XMIN_COMMITTED during the load. Doing so is simple 2 lines of >>> code. The patch also adds some tests for corner cases that would make >>> that action break MVCC - though those cases are minor and typical data >>> loads will benefit fully from this. >> >> This doesn't work with subtransactions: > ... >> The query should return the row copied in the same subtransaction. > > Thanks for pointing that out. > > New patch with corrected logic and test case attached. It's still broken: -- create test table and file create table a as select 1 as id; copy a to '/tmp/a'; -- start test postgres=# begin; BEGIN postgres=# truncate a; TRUNCATE TABLE postgres=# savepoint sp1; SAVEPOINT postgres=# copy a from '/tmp/a'; COPY 1 postgres=# select * from a; id ---- 1 (1 row) postgres=# rollback to savepoint sp1; ROLLBACK postgres=# select * from a; id ---- 1 (1 row) That last select should not have seen the tuple. -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com