diff options
author | Simon Riggs <simon@2ndQuadrant.com> | 2012-12-07 13:26:52 +0000 |
---|---|---|
committer | Simon Riggs <simon@2ndQuadrant.com> | 2012-12-07 13:26:52 +0000 |
commit | 1f023f929702efc9fd4230267b0f0e8d72ba5067 (patch) | |
tree | 04b1cfc1ad223ed4d6e334cde0a0c9ad14f40e84 /src | |
parent | 1eb6cee499d19fc9204e059ba37fc2dac32e2f25 (diff) | |
download | postgresql-1f023f929702efc9fd4230267b0f0e8d72ba5067.tar.gz postgresql-1f023f929702efc9fd4230267b0f0e8d72ba5067.zip |
Optimize COPY FREEZE with CREATE TABLE also.
Jeff Davis, additional test by me
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/commands/copy.c | 3 | ||||
-rw-r--r-- | src/test/regress/expected/copy2.out | 12 | ||||
-rw-r--r-- | src/test/regress/sql/copy2.sql | 8 |
3 files changed, 19 insertions, 4 deletions
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index c4104e4d9d5..8200d981399 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -2002,7 +2002,8 @@ CopyFrom(CopyState cstate) if (cstate->freeze && ThereAreNoPriorRegisteredSnapshots() && ThereAreNoReadyPortals() && - cstate->rel->rd_newRelfilenodeSubid == GetCurrentSubTransactionId()) + (cstate->rel->rd_newRelfilenodeSubid == GetCurrentSubTransactionId() || + cstate->rel->rd_createSubid == GetCurrentSubTransactionId())) hi_options |= HEAP_INSERT_FROZEN; } diff --git a/src/test/regress/expected/copy2.out b/src/test/regress/expected/copy2.out index 7a9e546aad6..604c27a2f2f 100644 --- a/src/test/regress/expected/copy2.out +++ b/src/test/regress/expected/copy2.out @@ -254,7 +254,17 @@ SELECT * FROM testnull; | (4 rows) +BEGIN; CREATE TABLE vistest (LIKE testeoc); +COPY vistest FROM stdin CSV; +COMMIT; +SELECT xmax, * FROM vistest; + xmax | a +------+---- + 0 | a0 + 0 | b +(2 rows) + BEGIN; TRUNCATE vistest; COPY vistest FROM stdin CSV; @@ -324,14 +334,12 @@ SELECT * FROM vistest; COMMIT; TRUNCATE vistest; COPY vistest FROM stdin CSV FREEZE; -NOTICE: FREEZE option specified but pre-conditions not met BEGIN; INSERT INTO vistest VALUES ('z'); SAVEPOINT s1; TRUNCATE vistest; ROLLBACK TO SAVEPOINT s1; COPY vistest FROM stdin CSV FREEZE; -NOTICE: FREEZE option specified but pre-conditions not met SELECT * FROM vistest; a ---- diff --git a/src/test/regress/sql/copy2.sql b/src/test/regress/sql/copy2.sql index fbaa433be4e..55568e68e40 100644 --- a/src/test/regress/sql/copy2.sql +++ b/src/test/regress/sql/copy2.sql @@ -178,8 +178,14 @@ COPY testnull FROM stdin WITH NULL AS E'\\0'; SELECT * FROM testnull; - +BEGIN; CREATE TABLE vistest (LIKE testeoc); +COPY vistest FROM stdin CSV; +a0 +b +\. +COMMIT; +SELECT * FROM vistest; BEGIN; TRUNCATE vistest; COPY vistest FROM stdin CSV; |