aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/commands/tablecmds.c8
-rw-r--r--src/test/regress/expected/temp.out20
-rw-r--r--src/test/regress/sql/temp.sql16
3 files changed, 44 insertions, 0 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index a798643c4f4..ae830127f01 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -15374,12 +15374,20 @@ PreCommit_on_commit_actions(void)
}
/*
+ * Object deletion might involve toast table access (to clean up
+ * toasted catalog entries), so ensure we have a valid snapshot.
+ */
+ PushActiveSnapshot(GetTransactionSnapshot());
+
+ /*
* Since this is an automatic drop, rather than one directly initiated
* by the user, we pass the PERFORM_DELETION_INTERNAL flag.
*/
performMultipleDeletions(targetObjects, DROP_CASCADE,
PERFORM_DELETION_INTERNAL | PERFORM_DELETION_QUIETLY);
+ PopActiveSnapshot();
+
#ifdef USE_ASSERT_CHECKING
/*
diff --git a/src/test/regress/expected/temp.out b/src/test/regress/expected/temp.out
index a5b3ed34a36..2a246a7e123 100644
--- a/src/test/regress/expected/temp.out
+++ b/src/test/regress/expected/temp.out
@@ -113,6 +113,26 @@ SELECT * FROM temptest;
ERROR: relation "temptest" does not exist
LINE 1: SELECT * FROM temptest;
^
+-- Test it with a CHECK condition that produces a toasted pg_constraint entry
+BEGIN;
+do $$
+begin
+ execute format($cmd$
+ CREATE TEMP TABLE temptest (col text CHECK (col < %L)) ON COMMIT DROP
+ $cmd$,
+ (SELECT string_agg(g.i::text || ':' || random()::text, '|')
+ FROM generate_series(1, 100) g(i)));
+end$$;
+SELECT * FROM temptest;
+ col
+-----
+(0 rows)
+
+COMMIT;
+SELECT * FROM temptest;
+ERROR: relation "temptest" does not exist
+LINE 1: SELECT * FROM temptest;
+ ^
-- ON COMMIT is only allowed for TEMP
CREATE TABLE temptest(col int) ON COMMIT DELETE ROWS;
ERROR: ON COMMIT can only be used on temporary tables
diff --git a/src/test/regress/sql/temp.sql b/src/test/regress/sql/temp.sql
index 424d12b2833..2a487a1ef7f 100644
--- a/src/test/regress/sql/temp.sql
+++ b/src/test/regress/sql/temp.sql
@@ -101,6 +101,22 @@ COMMIT;
SELECT * FROM temptest;
+-- Test it with a CHECK condition that produces a toasted pg_constraint entry
+BEGIN;
+do $$
+begin
+ execute format($cmd$
+ CREATE TEMP TABLE temptest (col text CHECK (col < %L)) ON COMMIT DROP
+ $cmd$,
+ (SELECT string_agg(g.i::text || ':' || random()::text, '|')
+ FROM generate_series(1, 100) g(i)));
+end$$;
+
+SELECT * FROM temptest;
+COMMIT;
+
+SELECT * FROM temptest;
+
-- ON COMMIT is only allowed for TEMP
CREATE TABLE temptest(col int) ON COMMIT DELETE ROWS;