diff options
author | Noah Misch <noah@leadboat.com> | 2014-06-13 19:57:59 -0400 |
---|---|---|
committer | Noah Misch <noah@leadboat.com> | 2014-06-13 19:58:58 -0400 |
commit | cc3e1553fa6786b3a8c673fc9d8ce0a258ba8809 (patch) | |
tree | ddbf28d42a648f74b56a1d17ccbc913a507e9c48 /src | |
parent | b31218798a6a9119e88f08c4c646fe7236c01a5d (diff) | |
download | postgresql-cc3e1553fa6786b3a8c673fc9d8ce0a258ba8809.tar.gz postgresql-cc3e1553fa6786b3a8c673fc9d8ce0a258ba8809.zip |
Harden pg_filenode_relation test against concurrent DROP TABLE.
Per buildfarm member prairiedog. Back-patch to 9.4, where the test was
introduced.
Reviewed by Tom Lane.
Diffstat (limited to 'src')
-rw-r--r-- | src/test/regress/expected/alter_table.out | 11 | ||||
-rw-r--r-- | src/test/regress/sql/alter_table.sql | 12 |
2 files changed, 17 insertions, 6 deletions
diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out index a182176ba60..9b89e588841 100644 --- a/src/test/regress/expected/alter_table.out +++ b/src/test/regress/expected/alter_table.out @@ -2375,14 +2375,19 @@ Check constraints: DROP TABLE alter2.tt8; DROP SCHEMA alter2; --- Check that we map relation oids to filenodes and back correctly. --- Only display bad mappings so the test output doesn't change all the --- time. +-- Check that we map relation oids to filenodes and back correctly. Only +-- display bad mappings so the test output doesn't change all the time. A +-- filenode function call can return NULL for a relation dropped concurrently +-- with the call's surrounding query, so ignore a NULL mapped_oid for +-- relations that no longer exist after all calls finish. +CREATE TEMP TABLE filenode_mapping AS SELECT oid, mapped_oid, reltablespace, relfilenode, relname FROM pg_class, pg_filenode_relation(reltablespace, pg_relation_filenode(oid)) AS mapped_oid WHERE relkind IN ('r', 'i', 'S', 't', 'm') AND mapped_oid IS DISTINCT FROM oid; +SELECT m.* FROM filenode_mapping m LEFT JOIN pg_class c ON c.oid = m.oid +WHERE c.oid IS NOT NULL OR m.mapped_oid IS NOT NULL; oid | mapped_oid | reltablespace | relfilenode | relname -----+------------+---------------+-------------+--------- (0 rows) diff --git a/src/test/regress/sql/alter_table.sql b/src/test/regress/sql/alter_table.sql index 3f641f9596c..22a2dd0a5dc 100644 --- a/src/test/regress/sql/alter_table.sql +++ b/src/test/regress/sql/alter_table.sql @@ -1582,15 +1582,21 @@ ALTER TABLE IF EXISTS tt8 SET SCHEMA alter2; DROP TABLE alter2.tt8; DROP SCHEMA alter2; --- Check that we map relation oids to filenodes and back correctly. --- Only display bad mappings so the test output doesn't change all the --- time. +-- Check that we map relation oids to filenodes and back correctly. Only +-- display bad mappings so the test output doesn't change all the time. A +-- filenode function call can return NULL for a relation dropped concurrently +-- with the call's surrounding query, so ignore a NULL mapped_oid for +-- relations that no longer exist after all calls finish. +CREATE TEMP TABLE filenode_mapping AS SELECT oid, mapped_oid, reltablespace, relfilenode, relname FROM pg_class, pg_filenode_relation(reltablespace, pg_relation_filenode(oid)) AS mapped_oid WHERE relkind IN ('r', 'i', 'S', 't', 'm') AND mapped_oid IS DISTINCT FROM oid; +SELECT m.* FROM filenode_mapping m LEFT JOIN pg_class c ON c.oid = m.oid +WHERE c.oid IS NOT NULL OR m.mapped_oid IS NOT NULL; + -- Checks on creating and manipulation of user defined relations in -- pg_catalog. -- |