diff --git a/contrib/test_decoding/expected/stream.out b/contrib/test_decoding/expected/stream.out index 6a8a00a65b..a76f77601e 100644 --- a/contrib/test_decoding/expected/stream.out +++ b/contrib/test_decoding/expected/stream.out @@ -128,28 +128,6 @@ SELECT count(*) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 5 (1 row) --- Test that accessing a TOAST table in streaming mode is allowed. --- Create a table with a column that uses a TOASTed default value. --- (temporarily hide query, to avoid the long CREATE TABLE stmt) -\set ECHO none -SET debug_logical_replication_streaming = immediate; -BEGIN; -INSERT INTO test_tab VALUES(1); --- Force WAL flush, so that the above changes will be streamed. -SELECT 'force flush' FROM pg_switch_wal(); - ?column? -------------- - force flush -(1 row) - -SELECT count(*) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'stream-changes', '1'); - count -------- - 3 -(1 row) - -COMMIT; -RESET debug_logical_replication_streaming; DROP TABLE stream_test; SELECT pg_drop_replication_slot('regression_slot'); pg_drop_replication_slot diff --git a/contrib/test_decoding/expected/twophase.out b/contrib/test_decoding/expected/twophase.out index 517f20bc37..08a7c56b5d 100644 --- a/contrib/test_decoding/expected/twophase.out +++ b/contrib/test_decoding/expected/twophase.out @@ -205,11 +205,34 @@ SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'inc COMMIT (3 rows) +-- Test that accessing a TOAST table is permitted during the decoding of a +-- prepared transaction. +-- Create a table with a column that uses a TOASTed default value. +-- (temporarily hide query, to avoid the long CREATE TABLE stmt) +\set ECHO none +BEGIN; +INSERT INTO test_tab VALUES('test'); +PREPARE TRANSACTION 'test_toast_table_access'; +SELECT count(*) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'stream-changes', '1'); + count +------- + 3 +(1 row) + +COMMIT PREPARED 'test_toast_table_access'; +-- consume commit prepared +SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'stream-changes', '1'); + data +------------------------------------------- + COMMIT PREPARED 'test_toast_table_access' +(1 row) + -- Test 8: -- cleanup and make sure results are also empty DROP TABLE test_prepared1; DROP TABLE test_prepared2; DROP TABLE test_prepared_savepoint; +DROP TABLE test_tab; -- show results. There should be nothing to show SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); data diff --git a/contrib/test_decoding/sql/stream.sql b/contrib/test_decoding/sql/stream.sql index d7a696586e..7f43f0c2ab 100644 --- a/contrib/test_decoding/sql/stream.sql +++ b/contrib/test_decoding/sql/stream.sql @@ -59,27 +59,5 @@ ROLLBACK TO s1; COMMIT; SELECT count(*) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'stream-changes', '1'); --- Test that accessing a TOAST table in streaming mode is allowed. - --- Create a table with a column that uses a TOASTed default value. --- (temporarily hide query, to avoid the long CREATE TABLE stmt) -\set ECHO none -SELECT 'CREATE TABLE test_tab (a text DEFAULT ''' || string_agg('toast value', '') || ''');' FROM generate_series(1, 4000) -\gexec -\set ECHO all - -SET debug_logical_replication_streaming = immediate; - -BEGIN; -INSERT INTO test_tab VALUES(1); - --- Force WAL flush, so that the above changes will be streamed. -SELECT 'force flush' FROM pg_switch_wal(); - -SELECT count(*) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'stream-changes', '1'); -COMMIT; - -RESET debug_logical_replication_streaming; - DROP TABLE stream_test; SELECT pg_drop_replication_slot('regression_slot'); diff --git a/contrib/test_decoding/sql/twophase.sql b/contrib/test_decoding/sql/twophase.sql index 0244795f3d..4b9ef0c0c4 100644 --- a/contrib/test_decoding/sql/twophase.sql +++ b/contrib/test_decoding/sql/twophase.sql @@ -104,11 +104,33 @@ COMMIT PREPARED 'test_prepared_nodecode'; -- should be decoded now SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); +-- Test that accessing a TOAST table is permitted during the decoding of a +-- prepared transaction. + +-- Create a table with a column that uses a TOASTed default value. +-- (temporarily hide query, to avoid the long CREATE TABLE stmt) +\set ECHO none +SELECT 'CREATE TABLE test_tab (a text DEFAULT ''' || string_agg('toast value', '') || ''');' FROM generate_series(1, 4000) +\gexec +\set ECHO all + +BEGIN; +INSERT INTO test_tab VALUES('test'); +PREPARE TRANSACTION 'test_toast_table_access'; + +SELECT count(*) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'stream-changes', '1'); + +COMMIT PREPARED 'test_toast_table_access'; + +-- consume commit prepared +SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'stream-changes', '1'); + -- Test 8: -- cleanup and make sure results are also empty DROP TABLE test_prepared1; DROP TABLE test_prepared2; DROP TABLE test_prepared_savepoint; +DROP TABLE test_tab; -- show results. There should be nothing to show SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');