Revert "Logical decoding of sequences"
authorTomas Vondra <tomas.vondra@postgresql.org>
Thu, 7 Apr 2022 16:13:13 +0000 (18:13 +0200)
committerTomas Vondra <tomas.vondra@postgresql.org>
Thu, 7 Apr 2022 18:06:36 +0000 (20:06 +0200)
This reverts a sequence of commits, implementing features related to
logical decoding and replication of sequences:

 - 0da92dc530c9251735fc70b20cd004d9630a1266
 - 80901b32913ffa59bf157a4d88284b2b3a7511d9
 - b779d7d8fdae088d70da5ed9fcd8205035676df3
 - d5ed9da41d96988d905b49bebb273a9b2d6e2915
 - a180c2b34de0989269fdb819bff241a249bf5380
 - 75b1521dae1ff1fde17fda2e30e591f2e5d64b6a
 - 2d2232933b02d9396113662e44dca5f120d6830e
 - 002c9dd97a0c874fd1693a570383e2dd38cd40d5
 - 05843b1aa49df2ecc9b97c693b755bd1b6f856a9

The implementation has issues, mostly due to combining transactional and
non-transactional behavior of sequences. It's not clear how this could
be fixed, but it'll require reworking significant part of the patch.

Discussion: https://postgr.es/m/95345a19-d508-63d1-860a-f5c2f41e8d40@enterprisedb.com

73 files changed:
contrib/test_decoding/Makefile
contrib/test_decoding/expected/ddl.out
contrib/test_decoding/expected/decoding_in_xact.out
contrib/test_decoding/expected/decoding_into_rel.out
contrib/test_decoding/expected/mxact.out
contrib/test_decoding/expected/ondisk_startup.out
contrib/test_decoding/expected/replorigin.out
contrib/test_decoding/expected/rewrite.out
contrib/test_decoding/expected/sequence.out [deleted file]
contrib/test_decoding/expected/slot.out
contrib/test_decoding/expected/toast.out
contrib/test_decoding/expected/truncate.out
contrib/test_decoding/specs/mxact.spec
contrib/test_decoding/specs/ondisk_startup.spec
contrib/test_decoding/sql/ddl.sql
contrib/test_decoding/sql/decoding_in_xact.sql
contrib/test_decoding/sql/decoding_into_rel.sql
contrib/test_decoding/sql/replorigin.sql
contrib/test_decoding/sql/rewrite.sql
contrib/test_decoding/sql/sequence.sql [deleted file]
contrib/test_decoding/sql/slot.sql
contrib/test_decoding/sql/toast.sql
contrib/test_decoding/sql/truncate.sql
contrib/test_decoding/test_decoding.c
doc/src/sgml/catalogs.sgml
doc/src/sgml/logicaldecoding.sgml
doc/src/sgml/protocol.sgml
doc/src/sgml/ref/alter_publication.sgml
doc/src/sgml/ref/alter_subscription.sgml
doc/src/sgml/ref/create_publication.sgml
src/backend/catalog/objectaddress.c
src/backend/catalog/pg_publication.c
src/backend/catalog/system_views.sql
src/backend/commands/publicationcmds.c
src/backend/commands/sequence.c
src/backend/commands/subscriptioncmds.c
src/backend/commands/tablecmds.c
src/backend/executor/execReplication.c
src/backend/nodes/copyfuncs.c
src/backend/nodes/equalfuncs.c
src/backend/parser/gram.y
src/backend/replication/logical/decode.c
src/backend/replication/logical/logical.c
src/backend/replication/logical/proto.c
src/backend/replication/logical/reorderbuffer.c
src/backend/replication/logical/tablesync.c
src/backend/replication/logical/worker.c
src/backend/replication/pgoutput/pgoutput.c
src/backend/utils/cache/relcache.c
src/backend/utils/cache/syscache.c
src/bin/pg_dump/pg_dump.c
src/bin/pg_dump/pg_dump.h
src/bin/pg_dump/t/002_pg_dump.pl
src/bin/psql/describe.c
src/bin/psql/tab-complete.c
src/include/access/rmgrlist.h
src/include/catalog/catversion.h
src/include/catalog/pg_proc.dat
src/include/catalog/pg_publication.h
src/include/catalog/pg_publication_namespace.h
src/include/commands/sequence.h
src/include/nodes/parsenodes.h
src/include/replication/decode.h
src/include/replication/logicalproto.h
src/include/replication/output_plugin.h
src/include/replication/pgoutput.h
src/include/replication/reorderbuffer.h
src/test/regress/expected/object_address.out
src/test/regress/expected/publication.out
src/test/regress/expected/rules.out
src/test/regress/sql/object_address.sql
src/test/regress/sql/publication.sql
src/test/subscription/t/030_sequences.pl [deleted file]

index 36929dd97d3894268dce7a8dd1b03274110cb8ed..b2209064790b8a0ddb7187c3f6933c76bb6243b8 100644 (file)
@@ -5,8 +5,7 @@ PGFILEDESC = "test_decoding - example of a logical decoding output plugin"
 
 REGRESS = ddl xact rewrite toast permissions decoding_in_xact \
        decoding_into_rel binary prepared replorigin time messages \
-       spill slot truncate stream stats twophase twophase_stream \
-       sequence
+       spill slot truncate stream stats twophase twophase_stream
 ISOLATION = mxact delayed_startup ondisk_startup concurrent_ddl_dml \
        oldest_xmin snapshot_transfer subxact_without_top concurrent_stream \
        twophase_snapshot slot_creation_error
index 1e37c8c8979b39b40af144cd28724639e7672ae0..9a28b5ddc5aa7fcdb3ca1c2bb68ba1c03e222a75 100644 (file)
@@ -40,7 +40,7 @@ SELECT 'init' FROM pg_create_physical_replication_slot('repl');
  init
 (1 row)
 
-SELECT data FROM pg_logical_slot_get_changes('repl', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('repl', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 ERROR:  cannot use physical replication slot for logical decoding
 SELECT pg_drop_replication_slot('repl');
  pg_drop_replication_slot 
@@ -89,7 +89,7 @@ COMMIT;
 ALTER TABLE replication_example RENAME COLUMN text TO somenum;
 INSERT INTO replication_example(somedata, somenum) VALUES (4, 1);
 -- collect all changes
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                            data                                                            
 ---------------------------------------------------------------------------------------------------------------------------
  BEGIN
@@ -118,7 +118,7 @@ SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'inc
 
 ALTER TABLE replication_example ALTER COLUMN somenum TYPE int4 USING (somenum::int4);
 -- check that this doesn't produce any changes from the heap rewrite
-SELECT count(data) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT count(data) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
  count 
 -------
      0
@@ -134,7 +134,7 @@ INSERT INTO replication_example(somedata, somenum, zaphod2) VALUES (6, 3, 1);
 INSERT INTO replication_example(somedata, somenum, zaphod1) VALUES (6, 4, 2);
 COMMIT;
 -- show changes
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                                    data                                                                   
 ------------------------------------------------------------------------------------------------------------------------------------------
  BEGIN
@@ -154,7 +154,7 @@ INSERT INTO replication_example(id, somedata, somenum) SELECT i, i, i FROM gener
   ON CONFLICT (id) DO UPDATE SET somenum = excluded.somenum + 1;
 COMMIT;
 /* display results */
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                                        data                                                                       
 --------------------------------------------------------------------------------------------------------------------------------------------------
  BEGIN
@@ -242,7 +242,7 @@ CREATE TABLE tr_unique(id2 serial unique NOT NULL, data int);
 INSERT INTO tr_unique(data) VALUES(10);
 ALTER TABLE tr_unique RENAME TO tr_pkey;
 ALTER TABLE tr_pkey ADD COLUMN id serial primary key;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-rewrites', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-rewrites', '1');
                                     data                                     
 -----------------------------------------------------------------------------
  BEGIN
@@ -257,7 +257,7 @@ INSERT INTO tr_pkey(data) VALUES(1);
 --show deletion with primary key
 DELETE FROM tr_pkey;
 /* display results */
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                     data                                    
 ----------------------------------------------------------------------------
  BEGIN
@@ -288,7 +288,7 @@ INSERT INTO tr_oddlength VALUES('ab', 'foo');
 COMMIT;
 /* display results, but hide most of the output */
 SELECT count(*), min(data), max(data)
-FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0')
+FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1')
 GROUP BY substring(data, 1, 24)
 ORDER BY 1,2;
  count |                                  min                                  |                                  max                                   
@@ -310,7 +310,7 @@ DELETE FROM spoolme;
 DROP TABLE spoolme;
 COMMIT;
 SELECT data
-FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0')
+FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1')
 WHERE data ~ 'UPDATE';
                                                     data                                                     
 -------------------------------------------------------------------------------------------------------------
@@ -324,7 +324,7 @@ INSERT INTO tr_etoomuch (id, data)
 SELECT g.i, -g.i FROM generate_series(8000, 12000) g(i)
 ON CONFLICT(id) DO UPDATE SET data = EXCLUDED.data;
 SELECT substring(data, 1, 29), count(*)
-FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0') WITH ORDINALITY
+FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1') WITH ORDINALITY
 GROUP BY 1
 ORDER BY min(ordinality);
            substring           | count 
@@ -355,7 +355,7 @@ RELEASE SAVEPOINT c;
 INSERT INTO tr_sub(path) VALUES ('1-top-2-#1');
 RELEASE SAVEPOINT b;
 COMMIT;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                  data                                 
 ----------------------------------------------------------------------
  BEGIN
@@ -394,7 +394,7 @@ INSERT INTO tr_sub(path) VALUES ('2-top-1...--#3');
 RELEASE SAVEPOINT subtop;
 INSERT INTO tr_sub(path) VALUES ('2-top-#1');
 COMMIT;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                   data                                  
 ------------------------------------------------------------------------
  BEGIN
@@ -415,7 +415,7 @@ INSERT INTO tr_sub(path) VALUES ('3-top-2-2-#1');
 ROLLBACK TO SAVEPOINT b;
 INSERT INTO tr_sub(path) VALUES ('3-top-2-#2');
 COMMIT;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                  data                                  
 -----------------------------------------------------------------------
  BEGIN
@@ -444,7 +444,7 @@ BEGIN;
 SAVEPOINT a;
 INSERT INTO tr_sub(path) VALUES ('5-top-1-#1');
 COMMIT;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                 data                                 
 ---------------------------------------------------------------------
  BEGIN
@@ -465,7 +465,7 @@ ROLLBACK TO SAVEPOINT a;
 ALTER TABLE tr_sub_ddl ALTER COLUMN data TYPE bigint;
 INSERT INTO tr_sub_ddl VALUES(43);
 COMMIT;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                        data                       
 --------------------------------------------------
  BEGIN
@@ -542,7 +542,7 @@ Options: user_catalog_table=false
 
 INSERT INTO replication_metadata(relation, options)
 VALUES ('zaphod', NULL);
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                                 data                                                                
 ------------------------------------------------------------------------------------------------------------------------------------
  BEGIN
@@ -659,7 +659,7 @@ INSERT INTO toasttable(toasted_col2) SELECT repeat(string_agg(to_char(g.i, 'FM00
 UPDATE toasttable
     SET toasted_col1 = (SELECT string_agg(g.i::text, '') FROM generate_series(1, 2000) g(i))
 WHERE id = 1;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           data                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  BEGIN
@@ -814,7 +814,7 @@ UPDATE toasttable
 WHERE id = 1;
 -- make sure we decode correctly even if the toast table is gone
 DROP TABLE toasttable;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         data                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  BEGIN
@@ -826,7 +826,7 @@ SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'inc
 (6 rows)
 
 -- done, free logical replication slot
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
  data 
 ------
 (0 rows)
index 0816c780fe1a269dc79a198e28b1d99fa1e817f9..b65253f4630916521aad5a572a221ba41a2df265 100644 (file)
@@ -58,7 +58,7 @@ SELECT pg_current_xact_id() = '0';
 
 -- don't show yet, haven't committed
 INSERT INTO nobarf(data) VALUES('2');
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                            data                            
 -----------------------------------------------------------
  BEGIN
@@ -68,7 +68,7 @@ SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'inc
 
 COMMIT;
 INSERT INTO nobarf(data) VALUES('3');
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                            data                            
 -----------------------------------------------------------
  BEGIN
index 03966b8b1cacb73c240305a4507904c6850f5c11..8fd3390066d9331549f775c9a8233f4f6d0e92ff 100644 (file)
@@ -19,7 +19,7 @@ SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'inc
 CREATE TABLE somechange(id serial primary key);
 INSERT INTO somechange DEFAULT VALUES;
 CREATE TABLE changeresult AS
-    SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+    SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 SELECT * FROM changeresult;
                       data                      
 ------------------------------------------------
@@ -29,9 +29,9 @@ SELECT * FROM changeresult;
 (3 rows)
 
 INSERT INTO changeresult
-    SELECT data FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+    SELECT data FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 INSERT INTO changeresult
-    SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+    SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 SELECT * FROM changeresult;
                                                                        data                                                                       
 --------------------------------------------------------------------------------------------------------------------------------------------------
@@ -63,7 +63,7 @@ DROP TABLE somechange;
 CREATE FUNCTION slot_changes_wrapper(slot_name name) RETURNS SETOF TEXT AS $$
 BEGIN
   RETURN QUERY
-    SELECT data FROM pg_logical_slot_peek_changes(slot_name, NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+    SELECT data FROM pg_logical_slot_peek_changes(slot_name, NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 END$$ LANGUAGE plpgsql;
 SELECT * FROM slot_changes_wrapper('regression_slot');
                                                                                           slot_changes_wrapper                                                                                          
@@ -84,7 +84,7 @@ SELECT * FROM slot_changes_wrapper('regression_slot');
  COMMIT
 (14 rows)
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                                                                   data                                                                                                  
 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  BEGIN
index c5bc26c8044b4cd5c9735e582fa0b48b607cb386..03ad3df09996838408069b2aec53b66a8630b854 100644 (file)
@@ -7,7 +7,7 @@ step s0init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_sl
 init    
 (1 row)
 
-step s0start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false', 'include-sequences', 'false');
+step s0start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false');
 data
 ----
 (0 rows)
@@ -27,7 +27,7 @@ t
 (1 row)
 
 step s0w: INSERT INTO do_write DEFAULT VALUES;
-step s0start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false', 'include-sequences', 'false');
+step s0start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false');
 data                                        
 --------------------------------------------
 BEGIN                                       
@@ -50,7 +50,7 @@ step s0init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_sl
 init    
 (1 row)
 
-step s0start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false', 'include-sequences', 'false');
+step s0start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false');
 data
 ----
 (0 rows)
@@ -71,7 +71,7 @@ t
 
 step s0alter: ALTER TABLE do_write ADD column ts timestamptz;
 step s0w: INSERT INTO do_write DEFAULT VALUES;
-step s0start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false', 'include-sequences', 'false');
+step s0start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false');
 data                                                                          
 ------------------------------------------------------------------------------
 BEGIN                                                                         
index 3d2fa4a92e03aab9b534a559dcbfa68067599e86..bc7ff071648795c890b987d333c7af2e7f2d0dbc 100644 (file)
@@ -35,7 +35,7 @@ init
 step s2c: COMMIT;
 step s1insert: INSERT INTO do_write DEFAULT VALUES;
 step s1checkpoint: CHECKPOINT;
-step s1start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false', 'include-sequences', 'false');
+step s1start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false');
 data                                                                
 --------------------------------------------------------------------
 BEGIN                                                               
@@ -46,7 +46,7 @@ COMMIT
 step s1insert: INSERT INTO do_write DEFAULT VALUES;
 step s1alter: ALTER TABLE do_write ADD COLUMN addedbys1 int;
 step s1insert: INSERT INTO do_write DEFAULT VALUES;
-step s1start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false', 'include-sequences', 'false');
+step s1start: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false');
 data                                                                                        
 --------------------------------------------------------------------------------------------
 BEGIN                                                                                       
index 7468c24f2b4c5fb40c7fe2f880e59ef3703d97e1..2e9ef7c823b4ed9e4fb777d05bb2e7c355a7fa2f 100644 (file)
@@ -72,9 +72,9 @@ SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_d
 -- origin tx
 INSERT INTO origin_tbl(data) VALUES ('will be replicated and decoded and decoded again');
 INSERT INTO target_tbl(data)
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 -- as is normal, the insert into target_tbl shows up
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                                                     data                                                                                    
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  BEGIN
@@ -110,7 +110,7 @@ SELECT pg_replication_origin_xact_setup('0/aabbccdd', '2013-01-01 00:00');
 (1 row)
 
 INSERT INTO target_tbl(data)
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'only-local', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'only-local', '1');
 COMMIT;
 -- check replication progress for the session is correct
 SELECT pg_replication_origin_session_progress(false);
@@ -154,14 +154,14 @@ SELECT pg_replication_origin_progress('regress_test_decoding: regression_slot',
 SELECT pg_replication_origin_session_reset();
 ERROR:  no replication origin is configured
 -- and magically the replayed xact will be filtered!
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'only-local', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'only-local', '1');
  data 
 ------
 (0 rows)
 
 --but new original changes still show up
 INSERT INTO origin_tbl(data) VALUES ('will be replicated');
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1',  'only-local', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1',  'only-local', '1');
                                       data                                      
 --------------------------------------------------------------------------------
  BEGIN
@@ -227,7 +227,7 @@ SELECT local_id, external_id,
         1 | regress_test_decoding: regression_slot_no_lsn | f                | t
 (1 row)
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot_no_lsn', NULL, NULL, 'skip-empty-xacts', '1', 'include-xids', '0', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot_no_lsn', NULL, NULL, 'skip-empty-xacts', '1', 'include-xids', '0');
                                         data                                         
 -------------------------------------------------------------------------------------
  BEGIN
index 5d15b192edca35a7e53c5c5fd24a23bdd2b85169..b30999c436b814b42e2fb4b64deb2bd9e52526ae 100644 (file)
@@ -64,7 +64,7 @@ SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_d
 
 CREATE TABLE replication_example(id SERIAL PRIMARY KEY, somedata int, text varchar(120));
 INSERT INTO replication_example(somedata) VALUES (1);
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                    data                                                   
 ----------------------------------------------------------------------------------------------------------
  BEGIN
@@ -115,7 +115,7 @@ INSERT INTO replication_example(somedata, testcolumn1, testcolumn3) VALUES (7, 5
 COMMIT;
 -- make old files go away
 CHECKPOINT;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                                                        data                                                                                       
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  BEGIN
@@ -141,7 +141,7 @@ VACUUM FULL pg_proc; VACUUM FULL pg_description; VACUUM FULL pg_shdescription; V
 INSERT INTO replication_example(somedata, testcolumn1, testcolumn3) VALUES (8, 6, 1);
 VACUUM FULL pg_proc; VACUUM FULL pg_description; VACUUM FULL pg_shdescription; VACUUM FULL iamalargetable;
 INSERT INTO replication_example(somedata, testcolumn1, testcolumn3) VALUES (9, 7, 1);
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                                                        data                                                                                        
 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  BEGIN
diff --git a/contrib/test_decoding/expected/sequence.out b/contrib/test_decoding/expected/sequence.out
deleted file mode 100644 (file)
index dc1bf67..0000000
+++ /dev/null
@@ -1,325 +0,0 @@
--- predictability
-SET synchronous_commit = on;
-SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
- ?column? 
-----------
- init
-(1 row)
-
-CREATE SEQUENCE test_sequence;
--- test the sequence changes by several nextval() calls
-SELECT nextval('test_sequence');
- nextval 
----------
-       1
-(1 row)
-
-SELECT nextval('test_sequence');
- nextval 
----------
-       2
-(1 row)
-
-SELECT nextval('test_sequence');
- nextval 
----------
-       3
-(1 row)
-
-SELECT nextval('test_sequence');
- nextval 
----------
-       4
-(1 row)
-
--- test the sequence changes by several ALTER commands
-ALTER SEQUENCE test_sequence INCREMENT BY 10;
-SELECT nextval('test_sequence');
- nextval 
----------
-      14
-(1 row)
-
-ALTER SEQUENCE test_sequence START WITH 3000;
-ALTER SEQUENCE test_sequence MAXVALUE 10000;
-ALTER SEQUENCE test_sequence RESTART WITH 4000;
-SELECT nextval('test_sequence');
- nextval 
----------
-    4000
-(1 row)
-
--- test the sequence changes by several setval() calls
-SELECT setval('test_sequence', 3500);
- setval 
---------
-   3500
-(1 row)
-
-SELECT nextval('test_sequence');
- nextval 
----------
-    3510
-(1 row)
-
-SELECT setval('test_sequence', 3500, true);
- setval 
---------
-   3500
-(1 row)
-
-SELECT nextval('test_sequence');
- nextval 
----------
-    3510
-(1 row)
-
-SELECT setval('test_sequence', 3500, false);
- setval 
---------
-   3500
-(1 row)
-
-SELECT nextval('test_sequence');
- nextval 
----------
-    3500
-(1 row)
-
--- show results and drop sequence
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
-                                          data                                          
-----------------------------------------------------------------------------------------
- BEGIN
- sequence public.test_sequence: transactional:1 last_value: 1 log_cnt: 0 is_called:0
- COMMIT
- sequence public.test_sequence: transactional:0 last_value: 33 log_cnt: 0 is_called:1
- BEGIN
- sequence public.test_sequence: transactional:1 last_value: 4 log_cnt: 0 is_called:1
- COMMIT
- sequence public.test_sequence: transactional:0 last_value: 334 log_cnt: 0 is_called:1
- BEGIN
- sequence public.test_sequence: transactional:1 last_value: 14 log_cnt: 32 is_called:1
- COMMIT
- BEGIN
- sequence public.test_sequence: transactional:1 last_value: 14 log_cnt: 0 is_called:1
- COMMIT
- BEGIN
- sequence public.test_sequence: transactional:1 last_value: 4000 log_cnt: 0 is_called:0
- COMMIT
- sequence public.test_sequence: transactional:0 last_value: 4320 log_cnt: 0 is_called:1
- sequence public.test_sequence: transactional:0 last_value: 3500 log_cnt: 0 is_called:1
- sequence public.test_sequence: transactional:0 last_value: 3830 log_cnt: 0 is_called:1
- sequence public.test_sequence: transactional:0 last_value: 3500 log_cnt: 0 is_called:1
- sequence public.test_sequence: transactional:0 last_value: 3830 log_cnt: 0 is_called:1
- sequence public.test_sequence: transactional:0 last_value: 3500 log_cnt: 0 is_called:0
- sequence public.test_sequence: transactional:0 last_value: 3820 log_cnt: 0 is_called:1
-(24 rows)
-
-DROP SEQUENCE test_sequence;
--- rollback on sequence creation and update
-BEGIN;
-CREATE SEQUENCE test_sequence;
-CREATE TABLE test_table (a INT);
-SELECT nextval('test_sequence');
- nextval 
----------
-       1
-(1 row)
-
-SELECT nextval('test_sequence');
- nextval 
----------
-       2
-(1 row)
-
-SELECT nextval('test_sequence');
- nextval 
----------
-       3
-(1 row)
-
-SELECT setval('test_sequence', 3000);
- setval 
---------
-   3000
-(1 row)
-
-SELECT nextval('test_sequence');
- nextval 
----------
-    3001
-(1 row)
-
-SELECT nextval('test_sequence');
- nextval 
----------
-    3002
-(1 row)
-
-SELECT nextval('test_sequence');
- nextval 
----------
-    3003
-(1 row)
-
-ALTER SEQUENCE test_sequence RESTART WITH 6000;
-INSERT INTO test_table VALUES( (SELECT nextval('test_sequence')) );
-SELECT nextval('test_sequence');
- nextval 
----------
-    6001
-(1 row)
-
-ROLLBACK;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
- data 
-------
-(0 rows)
-
--- rollback on table creation with serial column
-BEGIN;
-CREATE TABLE test_table (a SERIAL, b INT);
-INSERT INTO test_table (b) VALUES (100);
-INSERT INTO test_table (b) VALUES (200);
-INSERT INTO test_table (b) VALUES (300);
-SELECT setval('test_table_a_seq', 3000);
- setval 
---------
-   3000
-(1 row)
-
-INSERT INTO test_table (b) VALUES (400);
-INSERT INTO test_table (b) VALUES (500);
-INSERT INTO test_table (b) VALUES (600);
-ALTER SEQUENCE test_table_a_seq RESTART WITH 6000;
-INSERT INTO test_table (b) VALUES (700);
-INSERT INTO test_table (b) VALUES (800);
-INSERT INTO test_table (b) VALUES (900);
-ROLLBACK;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
- data 
-------
-(0 rows)
-
--- rollback on table with serial column
-CREATE TABLE test_table (a SERIAL, b INT);
-BEGIN;
-INSERT INTO test_table (b) VALUES (100);
-INSERT INTO test_table (b) VALUES (200);
-INSERT INTO test_table (b) VALUES (300);
-SELECT setval('test_table_a_seq', 3000);
- setval 
---------
-   3000
-(1 row)
-
-INSERT INTO test_table (b) VALUES (400);
-INSERT INTO test_table (b) VALUES (500);
-INSERT INTO test_table (b) VALUES (600);
-ALTER SEQUENCE test_table_a_seq RESTART WITH 6000;
-INSERT INTO test_table (b) VALUES (700);
-INSERT INTO test_table (b) VALUES (800);
-INSERT INTO test_table (b) VALUES (900);
-ROLLBACK;
--- check table and sequence values after rollback
-SELECT * from test_table_a_seq;
- last_value | log_cnt | is_called 
-------------+---------+-----------
-       3003 |      30 | t
-(1 row)
-
-SELECT nextval('test_table_a_seq');
- nextval 
----------
-    3004
-(1 row)
-
-DROP TABLE test_table;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
-                                           data                                            
--------------------------------------------------------------------------------------------
- BEGIN
- sequence public.test_table_a_seq: transactional:1 last_value: 1 log_cnt: 0 is_called:0
- COMMIT
- sequence public.test_table_a_seq: transactional:0 last_value: 33 log_cnt: 0 is_called:1
- sequence public.test_table_a_seq: transactional:0 last_value: 3000 log_cnt: 0 is_called:1
- sequence public.test_table_a_seq: transactional:0 last_value: 3033 log_cnt: 0 is_called:1
-(6 rows)
-
--- savepoint test on table with serial column
-BEGIN;
-CREATE TABLE test_table (a SERIAL, b INT);
-INSERT INTO test_table (b) VALUES (100);
-INSERT INTO test_table (b) VALUES (200);
-SAVEPOINT a;
-INSERT INTO test_table (b) VALUES (300);
-ROLLBACK TO SAVEPOINT a;
-DROP TABLE test_table;
-COMMIT;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
-                                          data                                           
------------------------------------------------------------------------------------------
- BEGIN
- sequence public.test_table_a_seq: transactional:1 last_value: 1 log_cnt: 0 is_called:0
- sequence public.test_table_a_seq: transactional:1 last_value: 33 log_cnt: 0 is_called:1
- table public.test_table: INSERT: a[integer]:1 b[integer]:100
- table public.test_table: INSERT: a[integer]:2 b[integer]:200
- COMMIT
-(6 rows)
-
--- savepoint test on table with serial column
-BEGIN;
-CREATE SEQUENCE test_sequence;
-SELECT nextval('test_sequence');
- nextval 
----------
-       1
-(1 row)
-
-SELECT setval('test_sequence', 3000);
- setval 
---------
-   3000
-(1 row)
-
-SELECT nextval('test_sequence');
- nextval 
----------
-    3001
-(1 row)
-
-SAVEPOINT a;
-ALTER SEQUENCE test_sequence START WITH 7000;
-SELECT setval('test_sequence', 5000);
- setval 
---------
-   5000
-(1 row)
-
-ROLLBACK TO SAVEPOINT a;
-SELECT * FROM test_sequence;
- last_value | log_cnt | is_called 
-------------+---------+-----------
-       3001 |      32 | t
-(1 row)
-
-DROP SEQUENCE test_sequence;
-COMMIT;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
-                                          data                                          
-----------------------------------------------------------------------------------------
- BEGIN
- sequence public.test_sequence: transactional:1 last_value: 1 log_cnt: 0 is_called:0
- sequence public.test_sequence: transactional:1 last_value: 33 log_cnt: 0 is_called:1
- sequence public.test_sequence: transactional:1 last_value: 3000 log_cnt: 0 is_called:1
- sequence public.test_sequence: transactional:1 last_value: 3033 log_cnt: 0 is_called:1
- COMMIT
-(6 rows)
-
-SELECT pg_drop_replication_slot('regression_slot');
- pg_drop_replication_slot 
---------------------------
-(1 row)
-
index de59d544ae893e1b131fec4a8e255795032aa84b..63a9940f73abe4935ac333ff16746e4d0ab536d4 100644 (file)
@@ -95,7 +95,7 @@ SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot2', 'test_
 (1 row)
 
 INSERT INTO replication_example(somedata, text) VALUES (1, 3);
-SELECT data FROM pg_logical_slot_get_changes('regression_slot1', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot1', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                   data                                                   
 ---------------------------------------------------------------------------------------------------------
  BEGIN
@@ -107,7 +107,7 @@ SELECT data FROM pg_logical_slot_get_changes('regression_slot1', NULL, NULL, 'in
  COMMIT
 (7 rows)
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot2', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot2', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                   data                                                   
 ---------------------------------------------------------------------------------------------------------
  BEGIN
@@ -132,7 +132,7 @@ SELECT :'wal_lsn' = :'end_lsn';
  t
 (1 row)
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot1', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot1', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                   data                                                   
 ---------------------------------------------------------------------------------------------------------
  BEGIN
@@ -140,7 +140,7 @@ SELECT data FROM pg_logical_slot_get_changes('regression_slot1', NULL, NULL, 'in
  COMMIT
 (3 rows)
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot2', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot2', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
  data 
 ------
 (0 rows)
index d0ab0e06394cb0e3ccb3dedea50fbdda7d37b8c5..a757e7dc8d5491a36282db2dbea7c0fab90da8f2 100644 (file)
@@ -52,7 +52,7 @@ CREATE TABLE toasted_copy (
 );
 ALTER TABLE toasted_copy ALTER COLUMN data SET STORAGE EXTERNAL;
 \copy toasted_copy FROM STDIN
-SELECT substr(data, 1, 200) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT substr(data, 1, 200) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                                                                   substr                                                                                                  
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  BEGIN
@@ -316,7 +316,7 @@ SELECT pg_column_size(toasted_key) > 2^16 FROM toasted_several;
  t
 (1 row)
 
-SELECT regexp_replace(data, '^(.{100}).*(.{100})$', '\1..\2') FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT regexp_replace(data, '^(.{100}).*(.{100})$', '\1..\2') FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                                                                regexp_replace                                                                                               
 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  BEGIN
@@ -327,7 +327,7 @@ SELECT regexp_replace(data, '^(.{100}).*(.{100})$', '\1..\2') FROM pg_logical_sl
 -- test update of a toasted key without changing it
 UPDATE toasted_several SET toasted_col1 = toasted_key;
 UPDATE toasted_several SET toasted_col2 = toasted_col1;
-SELECT regexp_replace(data, '^(.{100}).*(.{100})$', '\1..\2') FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT regexp_replace(data, '^(.{100}).*(.{100})$', '\1..\2') FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                                                                regexp_replace                                                                                               
 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  BEGIN
@@ -350,7 +350,7 @@ UPDATE toasted_several SET toasted_col1 = toasted_col2 WHERE id = 1;
 DELETE FROM toasted_several WHERE id = 1;
 COMMIT;
 DROP TABLE toasted_several;
-SELECT regexp_replace(data, '^(.{100}).*(.{100})$', '\1..\2') FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0')
+SELECT regexp_replace(data, '^(.{100}).*(.{100})$', '\1..\2') FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1')
 WHERE data NOT LIKE '%INSERT: %';
                                                                                                regexp_replace                                                                                               
 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -373,7 +373,7 @@ INSERT INTO tbl1 VALUES(1, repeat('a', 4000)) ;
 ALTER TABLE tbl1 ADD COLUMN id serial primary key;
 INSERT INTO tbl2 VALUES(1);
 commit;
-SELECT substr(data, 1, 200) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT substr(data, 1, 200) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                                                                                                   substr                                                                                                  
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  BEGIN
index 961b0ebdc899a4d3ce17bc738ff25d373c99f813..e64d377214ab902d9f706b07bcbf65b6531ce94f 100644 (file)
@@ -11,7 +11,7 @@ CREATE TABLE tab2 (a int primary key, b int);
 TRUNCATE tab1;
 TRUNCATE tab1, tab1 RESTART IDENTITY CASCADE;
 TRUNCATE tab1, tab2;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
                          data                         
 ------------------------------------------------------
  BEGIN
index 19f3af14b3013377e41def7443c1aad6a3778ff0..ea5b1aa2d67044fae5d8784beb023e2e410b2046 100644 (file)
@@ -13,7 +13,7 @@ teardown
 session "s0"
 setup { SET synchronous_commit=on; }
 step "s0init" {SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding');}
-step "s0start" {SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false', 'include-sequences', 'false');}
+step "s0start" {SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false');}
 step "s0alter" {ALTER TABLE do_write ADD column ts timestamptz; }
 step "s0w" { INSERT INTO do_write DEFAULT VALUES; }
 
index fb43cbc5e1580c80f7e3f5416a7f0ebb7fa0dece..96ce87f1a45baf69a18cac3c0bfd78c429a72c9d 100644 (file)
@@ -16,7 +16,7 @@ session "s1"
 setup { SET synchronous_commit=on; }
 
 step "s1init" {SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding');}
-step "s1start" {SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false', 'include-sequences', 'false');}
+step "s1start" {SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', 'false');}
 step "s1insert" { INSERT INTO do_write DEFAULT VALUES; }
 step "s1checkpoint" { CHECKPOINT; }
 step "s1alter" { ALTER TABLE do_write ADD COLUMN addedbys1 int; }
index 807bc56a4512c4dd815c3f1aff41cea7f0b4476c..4f76bed72c1b26aa59538822624311d7f9e9a702 100644 (file)
@@ -19,7 +19,7 @@ SELECT pg_drop_replication_slot('regression_slot');
 
 -- check that we're detecting a streaming rep slot used for logical decoding
 SELECT 'init' FROM pg_create_physical_replication_slot('repl');
-SELECT data FROM pg_logical_slot_get_changes('repl', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('repl', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 SELECT pg_drop_replication_slot('repl');
 
 
@@ -64,11 +64,11 @@ ALTER TABLE replication_example RENAME COLUMN text TO somenum;
 INSERT INTO replication_example(somedata, somenum) VALUES (4, 1);
 
 -- collect all changes
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 ALTER TABLE replication_example ALTER COLUMN somenum TYPE int4 USING (somenum::int4);
 -- check that this doesn't produce any changes from the heap rewrite
-SELECT count(data) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT count(data) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 INSERT INTO replication_example(somedata, somenum) VALUES (5, 1);
 
@@ -82,7 +82,7 @@ INSERT INTO replication_example(somedata, somenum, zaphod1) VALUES (6, 4, 2);
 COMMIT;
 
 -- show changes
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 -- ON CONFLICT DO UPDATE support
 BEGIN;
@@ -91,7 +91,7 @@ INSERT INTO replication_example(id, somedata, somenum) SELECT i, i, i FROM gener
 COMMIT;
 
 /* display results */
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 -- MERGE support
 BEGIN;
@@ -113,14 +113,14 @@ CREATE TABLE tr_unique(id2 serial unique NOT NULL, data int);
 INSERT INTO tr_unique(data) VALUES(10);
 ALTER TABLE tr_unique RENAME TO tr_pkey;
 ALTER TABLE tr_pkey ADD COLUMN id serial primary key;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-rewrites', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-rewrites', '1');
 
 INSERT INTO tr_pkey(data) VALUES(1);
 --show deletion with primary key
 DELETE FROM tr_pkey;
 
 /* display results */
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 /*
  * check that disk spooling works (also for logical messages)
@@ -137,7 +137,7 @@ COMMIT;
 
 /* display results, but hide most of the output */
 SELECT count(*), min(data), max(data)
-FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0')
+FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1')
 GROUP BY substring(data, 1, 24)
 ORDER BY 1,2;
 
@@ -152,7 +152,7 @@ DROP TABLE spoolme;
 COMMIT;
 
 SELECT data
-FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0')
+FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1')
 WHERE data ~ 'UPDATE';
 
 -- check that a large, spooled, upsert works
@@ -161,7 +161,7 @@ SELECT g.i, -g.i FROM generate_series(8000, 12000) g(i)
 ON CONFLICT(id) DO UPDATE SET data = EXCLUDED.data;
 
 SELECT substring(data, 1, 29), count(*)
-FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0') WITH ORDINALITY
+FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1') WITH ORDINALITY
 GROUP BY 1
 ORDER BY min(ordinality);
 
@@ -189,7 +189,7 @@ INSERT INTO tr_sub(path) VALUES ('1-top-2-#1');
 RELEASE SAVEPOINT b;
 COMMIT;
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 -- check that we handle xlog assignments correctly
 BEGIN;
@@ -218,7 +218,7 @@ RELEASE SAVEPOINT subtop;
 INSERT INTO tr_sub(path) VALUES ('2-top-#1');
 COMMIT;
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 -- make sure rollbacked subtransactions aren't decoded
 BEGIN;
@@ -231,7 +231,7 @@ ROLLBACK TO SAVEPOINT b;
 INSERT INTO tr_sub(path) VALUES ('3-top-2-#2');
 COMMIT;
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 -- test whether a known, but not yet logged toplevel xact, followed by a
 -- subxact commit is handled correctly
@@ -250,7 +250,7 @@ INSERT INTO tr_sub(path) VALUES ('5-top-1-#1');
 COMMIT;
 
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 -- check that DDL in aborted subtransactions handled correctly
 CREATE TABLE tr_sub_ddl(data int);
@@ -263,7 +263,7 @@ ALTER TABLE tr_sub_ddl ALTER COLUMN data TYPE bigint;
 INSERT INTO tr_sub_ddl VALUES(43);
 COMMIT;
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 
 /*
@@ -303,7 +303,7 @@ ALTER TABLE replication_metadata SET (user_catalog_table = false);
 INSERT INTO replication_metadata(relation, options)
 VALUES ('zaphod', NULL);
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 /*
  * check whether we handle updates/deletes correct with & without a pkey
@@ -414,7 +414,7 @@ UPDATE toasttable
     SET toasted_col1 = (SELECT string_agg(g.i::text, '') FROM generate_series(1, 2000) g(i))
 WHERE id = 1;
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 INSERT INTO toasttable(toasted_col1) SELECT string_agg(g.i::text, '') FROM generate_series(1, 2000) g(i);
 
@@ -426,10 +426,10 @@ WHERE id = 1;
 -- make sure we decode correctly even if the toast table is gone
 DROP TABLE toasttable;
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 -- done, free logical replication slot
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 SELECT pg_drop_replication_slot('regression_slot');
 
index b343b7456611a0dcc7a8bb5db0e80b21c7be21aa..108782dc2e98d55944aec5982d8f109606289100 100644 (file)
@@ -32,10 +32,10 @@ BEGIN;
 SELECT pg_current_xact_id() = '0';
 -- don't show yet, haven't committed
 INSERT INTO nobarf(data) VALUES('2');
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 COMMIT;
 
 INSERT INTO nobarf(data) VALUES('3');
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 SELECT 'stop' FROM pg_drop_replication_slot('regression_slot');
index 27d5d08879e9e60cb9007cbc72bd69f3d0580df1..1068cec58882c71b7dd43851340bf3e159c842c5 100644 (file)
@@ -15,14 +15,14 @@ CREATE TABLE somechange(id serial primary key);
 INSERT INTO somechange DEFAULT VALUES;
 
 CREATE TABLE changeresult AS
-    SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+    SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 SELECT * FROM changeresult;
 
 INSERT INTO changeresult
-    SELECT data FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+    SELECT data FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 INSERT INTO changeresult
-    SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+    SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 SELECT * FROM changeresult;
 DROP TABLE changeresult;
@@ -32,11 +32,11 @@ DROP TABLE somechange;
 CREATE FUNCTION slot_changes_wrapper(slot_name name) RETURNS SETOF TEXT AS $$
 BEGIN
   RETURN QUERY
-    SELECT data FROM pg_logical_slot_peek_changes(slot_name, NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+    SELECT data FROM pg_logical_slot_peek_changes(slot_name, NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 END$$ LANGUAGE plpgsql;
 
 SELECT * FROM slot_changes_wrapper('regression_slot');
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 SELECT 'stop' FROM pg_drop_replication_slot('regression_slot');
index cd0a370208ef747f72591f8588cbe585bbee7108..2e28a48777313aa4e35d0aff9490288f044d1d55 100644 (file)
@@ -41,10 +41,10 @@ SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_d
 -- origin tx
 INSERT INTO origin_tbl(data) VALUES ('will be replicated and decoded and decoded again');
 INSERT INTO target_tbl(data)
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 -- as is normal, the insert into target_tbl shows up
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 INSERT INTO origin_tbl(data) VALUES ('will be replicated, but not decoded again');
 
@@ -60,7 +60,7 @@ BEGIN;
 -- setup transaction origin
 SELECT pg_replication_origin_xact_setup('0/aabbccdd', '2013-01-01 00:00');
 INSERT INTO target_tbl(data)
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'only-local', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'only-local', '1');
 COMMIT;
 
 -- check replication progress for the session is correct
@@ -79,11 +79,11 @@ SELECT pg_replication_origin_progress('regress_test_decoding: regression_slot',
 SELECT pg_replication_origin_session_reset();
 
 -- and magically the replayed xact will be filtered!
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'only-local', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'only-local', '1');
 
 --but new original changes still show up
 INSERT INTO origin_tbl(data) VALUES ('will be replicated');
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1',  'only-local', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1',  'only-local', '1');
 
 SELECT pg_drop_replication_slot('regression_slot');
 SELECT pg_replication_origin_drop('regress_test_decoding: regression_slot');
@@ -114,7 +114,7 @@ SELECT local_id, external_id,
        remote_lsn <> '0/0' AS valid_remote_lsn,
        local_lsn <> '0/0' AS valid_local_lsn
        FROM pg_replication_origin_status;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot_no_lsn', NULL, NULL, 'skip-empty-xacts', '1', 'include-xids', '0', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot_no_lsn', NULL, NULL, 'skip-empty-xacts', '1', 'include-xids', '0');
 -- Clean up
 SELECT pg_replication_origin_session_reset();
 SELECT pg_drop_replication_slot('regression_slot_no_lsn');
index 1715bd289dde5228dfe4391e53ec800fdf941b4c..62dead3a9b1da432fa3da197611a5372034e658d 100644 (file)
@@ -35,7 +35,7 @@ SELECT pg_relation_size((SELECT reltoastrelid FROM pg_class WHERE oid = 'pg_shde
 SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
 CREATE TABLE replication_example(id SERIAL PRIMARY KEY, somedata int, text varchar(120));
 INSERT INTO replication_example(somedata) VALUES (1);
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 BEGIN;
 INSERT INTO replication_example(somedata) VALUES (2);
@@ -90,7 +90,7 @@ COMMIT;
 -- make old files go away
 CHECKPOINT;
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 -- trigger repeated rewrites of a system catalog with a toast table,
 -- that previously was buggy: 20180914021046.oi7dm4ra3ot2g2kt@alap3.anarazel.de
@@ -98,7 +98,7 @@ VACUUM FULL pg_proc; VACUUM FULL pg_description; VACUUM FULL pg_shdescription; V
 INSERT INTO replication_example(somedata, testcolumn1, testcolumn3) VALUES (8, 6, 1);
 VACUUM FULL pg_proc; VACUUM FULL pg_description; VACUUM FULL pg_shdescription; VACUUM FULL iamalargetable;
 INSERT INTO replication_example(somedata, testcolumn1, testcolumn3) VALUES (9, 7, 1);
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 SELECT pg_drop_replication_slot('regression_slot');
 DROP TABLE IF EXISTS replication_example;
diff --git a/contrib/test_decoding/sql/sequence.sql b/contrib/test_decoding/sql/sequence.sql
deleted file mode 100644 (file)
index 978ee80..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
--- predictability
-SET synchronous_commit = on;
-SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
-
-CREATE SEQUENCE test_sequence;
-
--- test the sequence changes by several nextval() calls
-SELECT nextval('test_sequence');
-SELECT nextval('test_sequence');
-SELECT nextval('test_sequence');
-SELECT nextval('test_sequence');
-
--- test the sequence changes by several ALTER commands
-ALTER SEQUENCE test_sequence INCREMENT BY 10;
-SELECT nextval('test_sequence');
-
-ALTER SEQUENCE test_sequence START WITH 3000;
-ALTER SEQUENCE test_sequence MAXVALUE 10000;
-ALTER SEQUENCE test_sequence RESTART WITH 4000;
-SELECT nextval('test_sequence');
-
--- test the sequence changes by several setval() calls
-SELECT setval('test_sequence', 3500);
-SELECT nextval('test_sequence');
-SELECT setval('test_sequence', 3500, true);
-SELECT nextval('test_sequence');
-SELECT setval('test_sequence', 3500, false);
-SELECT nextval('test_sequence');
-
--- show results and drop sequence
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
-DROP SEQUENCE test_sequence;
-
--- rollback on sequence creation and update
-BEGIN;
-CREATE SEQUENCE test_sequence;
-CREATE TABLE test_table (a INT);
-SELECT nextval('test_sequence');
-SELECT nextval('test_sequence');
-SELECT nextval('test_sequence');
-SELECT setval('test_sequence', 3000);
-SELECT nextval('test_sequence');
-SELECT nextval('test_sequence');
-SELECT nextval('test_sequence');
-ALTER SEQUENCE test_sequence RESTART WITH 6000;
-INSERT INTO test_table VALUES( (SELECT nextval('test_sequence')) );
-SELECT nextval('test_sequence');
-ROLLBACK;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
-
--- rollback on table creation with serial column
-BEGIN;
-CREATE TABLE test_table (a SERIAL, b INT);
-INSERT INTO test_table (b) VALUES (100);
-INSERT INTO test_table (b) VALUES (200);
-INSERT INTO test_table (b) VALUES (300);
-SELECT setval('test_table_a_seq', 3000);
-INSERT INTO test_table (b) VALUES (400);
-INSERT INTO test_table (b) VALUES (500);
-INSERT INTO test_table (b) VALUES (600);
-ALTER SEQUENCE test_table_a_seq RESTART WITH 6000;
-INSERT INTO test_table (b) VALUES (700);
-INSERT INTO test_table (b) VALUES (800);
-INSERT INTO test_table (b) VALUES (900);
-ROLLBACK;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
-
--- rollback on table with serial column
-CREATE TABLE test_table (a SERIAL, b INT);
-
-BEGIN;
-INSERT INTO test_table (b) VALUES (100);
-INSERT INTO test_table (b) VALUES (200);
-INSERT INTO test_table (b) VALUES (300);
-SELECT setval('test_table_a_seq', 3000);
-INSERT INTO test_table (b) VALUES (400);
-INSERT INTO test_table (b) VALUES (500);
-INSERT INTO test_table (b) VALUES (600);
-ALTER SEQUENCE test_table_a_seq RESTART WITH 6000;
-INSERT INTO test_table (b) VALUES (700);
-INSERT INTO test_table (b) VALUES (800);
-INSERT INTO test_table (b) VALUES (900);
-ROLLBACK;
-
--- check table and sequence values after rollback
-SELECT * from test_table_a_seq;
-SELECT nextval('test_table_a_seq');
-
-DROP TABLE test_table;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
-
--- savepoint test on table with serial column
-BEGIN;
-CREATE TABLE test_table (a SERIAL, b INT);
-INSERT INTO test_table (b) VALUES (100);
-INSERT INTO test_table (b) VALUES (200);
-SAVEPOINT a;
-INSERT INTO test_table (b) VALUES (300);
-ROLLBACK TO SAVEPOINT a;
-DROP TABLE test_table;
-COMMIT;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
-
--- savepoint test on table with serial column
-BEGIN;
-CREATE SEQUENCE test_sequence;
-SELECT nextval('test_sequence');
-SELECT setval('test_sequence', 3000);
-SELECT nextval('test_sequence');
-SAVEPOINT a;
-ALTER SEQUENCE test_sequence START WITH 7000;
-SELECT setval('test_sequence', 5000);
-ROLLBACK TO SAVEPOINT a;
-SELECT * FROM test_sequence;
-DROP SEQUENCE test_sequence;
-COMMIT;
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
-
-SELECT pg_drop_replication_slot('regression_slot');
index 52a740c43deff6d67f0ac37ef57e3c40875c3334..1aa27c56674b78dfcb456e89519febf340bb94b1 100644 (file)
@@ -50,8 +50,8 @@ SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot2', 'test_
 
 INSERT INTO replication_example(somedata, text) VALUES (1, 3);
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot1', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
-SELECT data FROM pg_logical_slot_get_changes('regression_slot2', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot1', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot2', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 INSERT INTO replication_example(somedata, text) VALUES (1, 4);
 INSERT INTO replication_example(somedata, text) VALUES (1, 5);
@@ -65,8 +65,8 @@ SELECT slot_name FROM pg_replication_slot_advance('regression_slot2', pg_current
 
 SELECT :'wal_lsn' = :'end_lsn';
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot1', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
-SELECT data FROM pg_logical_slot_get_changes('regression_slot2', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot1', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot2', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 DROP TABLE replication_example;
 
index f5d4fc082ede1255c0d1edde92ff4e33ce2c439c..d1c560a174d63bc2463257980519326ebfe73f46 100644 (file)
@@ -264,7 +264,7 @@ ALTER TABLE toasted_copy ALTER COLUMN data SET STORAGE EXTERNAL;
 202    untoasted199
 203    untoasted200
 \.
-SELECT substr(data, 1, 200) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT substr(data, 1, 200) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 -- test we can decode "old" tuples bigger than the max heap tuple size correctly
 DROP TABLE IF EXISTS toasted_several;
@@ -287,13 +287,13 @@ UPDATE pg_attribute SET attstorage = 'x' WHERE attrelid = 'toasted_several_pkey'
 INSERT INTO toasted_several(toasted_key) VALUES(repeat('9876543210', 10000));
 SELECT pg_column_size(toasted_key) > 2^16 FROM toasted_several;
 
-SELECT regexp_replace(data, '^(.{100}).*(.{100})$', '\1..\2') FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT regexp_replace(data, '^(.{100}).*(.{100})$', '\1..\2') FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 -- test update of a toasted key without changing it
 UPDATE toasted_several SET toasted_col1 = toasted_key;
 UPDATE toasted_several SET toasted_col2 = toasted_col1;
 
-SELECT regexp_replace(data, '^(.{100}).*(.{100})$', '\1..\2') FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT regexp_replace(data, '^(.{100}).*(.{100})$', '\1..\2') FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 /*
  * update with large tuplebuf, in a transaction large enough to force to spool to disk
@@ -306,7 +306,7 @@ COMMIT;
 
 DROP TABLE toasted_several;
 
-SELECT regexp_replace(data, '^(.{100}).*(.{100})$', '\1..\2') FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0')
+SELECT regexp_replace(data, '^(.{100}).*(.{100})$', '\1..\2') FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1')
 WHERE data NOT LIKE '%INSERT: %';
 
 /*
@@ -322,6 +322,6 @@ INSERT INTO tbl1 VALUES(1, repeat('a', 4000)) ;
 ALTER TABLE tbl1 ADD COLUMN id serial primary key;
 INSERT INTO tbl2 VALUES(1);
 commit;
-SELECT substr(data, 1, 200) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT substr(data, 1, 200) FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 
 SELECT pg_drop_replication_slot('regression_slot');
index b0f36fd681b7d54444a68bca446dc3c144f8402e..5633854e0dfc504e01525d0b69267fdffd6a4c86 100644 (file)
@@ -10,5 +10,5 @@ TRUNCATE tab1;
 TRUNCATE tab1, tab1 RESTART IDENTITY CASCADE;
 TRUNCATE tab1, tab2;
 
-SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-sequences', '0');
+SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
 SELECT pg_drop_replication_slot('regression_slot');
index c7a87f5fe5b2ef2529ba122b98ee31a06439acc0..08d366a594e196625b7f1c7706d8518b94115d44 100644 (file)
@@ -35,7 +35,6 @@ typedef struct
        bool            include_timestamp;
        bool            skip_empty_xacts;
        bool            only_local;
-       bool            include_sequences;
 } TestDecodingData;
 
 /*
@@ -77,10 +76,6 @@ static void pg_decode_message(LogicalDecodingContext *ctx,
                                                          ReorderBufferTXN *txn, XLogRecPtr message_lsn,
                                                          bool transactional, const char *prefix,
                                                          Size sz, const char *message);
-static void pg_decode_sequence(LogicalDecodingContext *ctx,
-                                                         ReorderBufferTXN *txn, XLogRecPtr sequence_lsn,
-                                                         Relation rel, bool transactional,
-                                                         int64 last_value, int64 log_cnt, bool is_called);
 static bool pg_decode_filter_prepare(LogicalDecodingContext *ctx,
                                                                         TransactionId xid,
                                                                         const char *gid);
@@ -121,10 +116,6 @@ static void pg_decode_stream_message(LogicalDecodingContext *ctx,
                                                                         ReorderBufferTXN *txn, XLogRecPtr message_lsn,
                                                                         bool transactional, const char *prefix,
                                                                         Size sz, const char *message);
-static void pg_decode_stream_sequence(LogicalDecodingContext *ctx,
-                                                                         ReorderBufferTXN *txn, XLogRecPtr sequence_lsn,
-                                                                         Relation rel, bool transactional,
-                                                                         int64 last_value, int64 log_cnt, bool is_called);
 static void pg_decode_stream_truncate(LogicalDecodingContext *ctx,
                                                                          ReorderBufferTXN *txn,
                                                                          int nrelations, Relation relations[],
@@ -150,7 +141,6 @@ _PG_output_plugin_init(OutputPluginCallbacks *cb)
        cb->filter_by_origin_cb = pg_decode_filter;
        cb->shutdown_cb = pg_decode_shutdown;
        cb->message_cb = pg_decode_message;
-       cb->sequence_cb = pg_decode_sequence;
        cb->filter_prepare_cb = pg_decode_filter_prepare;
        cb->begin_prepare_cb = pg_decode_begin_prepare_txn;
        cb->prepare_cb = pg_decode_prepare_txn;
@@ -163,7 +153,6 @@ _PG_output_plugin_init(OutputPluginCallbacks *cb)
        cb->stream_commit_cb = pg_decode_stream_commit;
        cb->stream_change_cb = pg_decode_stream_change;
        cb->stream_message_cb = pg_decode_stream_message;
-       cb->stream_sequence_cb = pg_decode_stream_sequence;
        cb->stream_truncate_cb = pg_decode_stream_truncate;
 }
 
@@ -184,7 +173,6 @@ pg_decode_startup(LogicalDecodingContext *ctx, OutputPluginOptions *opt,
        data->include_xids = true;
        data->include_timestamp = false;
        data->skip_empty_xacts = false;
-       data->include_sequences = true;
        data->only_local = false;
 
        ctx->output_plugin_private = data;
@@ -277,17 +265,6 @@ pg_decode_startup(LogicalDecodingContext *ctx, OutputPluginOptions *opt,
                                                 errmsg("could not parse value \"%s\" for parameter \"%s\"",
                                                                strVal(elem->arg), elem->defname)));
                }
-               else if (strcmp(elem->defname, "include-sequences") == 0)
-               {
-
-                       if (elem->arg == NULL)
-                               data->include_sequences = false;
-                       else if (!parse_bool(strVal(elem->arg), &data->include_sequences))
-                               ereport(ERROR,
-                                               (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                                                errmsg("could not parse value \"%s\" for parameter \"%s\"",
-                                                               strVal(elem->arg), elem->defname)));
-               }
                else
                {
                        ereport(ERROR,
@@ -779,38 +756,6 @@ pg_decode_message(LogicalDecodingContext *ctx,
        OutputPluginWrite(ctx, true);
 }
 
-static void
-pg_decode_sequence(LogicalDecodingContext *ctx, ReorderBufferTXN *txn,
-                                  XLogRecPtr sequence_lsn, Relation rel,
-                                  bool transactional,
-                                  int64 last_value, int64 log_cnt, bool is_called)
-{
-       TestDecodingData *data = ctx->output_plugin_private;
-       TestDecodingTxnData *txndata = txn->output_plugin_private;
-
-       if (!data->include_sequences)
-               return;
-
-       /* output BEGIN if we haven't yet, but only for the transactional case */
-       if (transactional)
-       {
-               if (data->skip_empty_xacts && !txndata->xact_wrote_changes)
-               {
-                       pg_output_begin(ctx, data, txn, false);
-               }
-               txndata->xact_wrote_changes = true;
-       }
-
-       OutputPluginPrepareWrite(ctx, true);
-       appendStringInfoString(ctx->out, "sequence ");
-       appendStringInfoString(ctx->out,
-                                                  quote_qualified_identifier(get_namespace_name(get_rel_namespace(RelationGetRelid(rel))),
-                                                                                                         RelationGetRelationName(rel)));
-       appendStringInfo(ctx->out,      ": transactional:%d last_value: " INT64_FORMAT " log_cnt: " INT64_FORMAT " is_called:%d",
-                                        transactional, last_value, log_cnt, is_called);
-       OutputPluginWrite(ctx, true);
-}
-
 static void
 pg_decode_stream_start(LogicalDecodingContext *ctx,
                                           ReorderBufferTXN *txn)
@@ -1010,38 +955,6 @@ pg_decode_stream_message(LogicalDecodingContext *ctx,
        OutputPluginWrite(ctx, true);
 }
 
-static void
-pg_decode_stream_sequence(LogicalDecodingContext *ctx, ReorderBufferTXN *txn,
-                                                 XLogRecPtr sequence_lsn, Relation rel,
-                                                 bool transactional,
-                                                 int64 last_value, int64 log_cnt, bool is_called)
-{
-       TestDecodingData *data = ctx->output_plugin_private;
-       TestDecodingTxnData *txndata = txn->output_plugin_private;
-
-       if (!data->include_sequences)
-               return;
-
-       /* output BEGIN if we haven't yet, but only for the transactional case */
-       if (transactional)
-       {
-               if (data->skip_empty_xacts && !txndata->xact_wrote_changes)
-               {
-                       pg_output_begin(ctx, data, txn, false);
-               }
-               txndata->xact_wrote_changes = true;
-       }
-
-       OutputPluginPrepareWrite(ctx, true);
-       appendStringInfoString(ctx->out, "streaming sequence ");
-       appendStringInfoString(ctx->out,
-                                                  quote_qualified_identifier(get_namespace_name(get_rel_namespace(RelationGetRelid(rel))),
-                                                                                                         RelationGetRelationName(rel)));
-       appendStringInfo(ctx->out,      ": transactional:%d last_value: " INT64_FORMAT " log_cnt: " INT64_FORMAT " is_called:%d",
-                                        transactional, last_value, log_cnt, is_called);
-       OutputPluginWrite(ctx, true);
-}
-
 /*
  * In streaming mode, we don't display the detailed information of Truncate.
  * See pg_decode_stream_change.
index 646ab74d04943d45201dd47bb4285fff95814ea6..e8f850a9c07eb35a44b60fd6de474a1fa31fb625 100644 (file)
@@ -6354,16 +6354,6 @@ SCRAM-SHA-256$<replaceable>&lt;iteration count&gt;</replaceable>:<replaceable>&l
        Reference to schema
       </para></entry>
      </row>
-
-     <row>
-      <entry role="catalog_table_entry"><para role="column_definition">
-       <structfield>pntype</structfield> <type>char</type>
-       Determines which object type is included from this schema.
-      </para>
-      <para>
-       Reference to schema
-      </para></entry>
-     </row>
     </tbody>
    </tgroup>
   </table>
@@ -9699,11 +9689,6 @@ SCRAM-SHA-256$<replaceable>&lt;iteration count&gt;</replaceable>:<replaceable>&l
       <entry>prepared transactions</entry>
      </row>
 
-     <row>
-      <entry><link linkend="view-pg-publication-sequences"><structname>pg_publication_sequences</structname></link></entry>
-      <entry>publications and their associated sequences</entry>
-     </row>
-
      <row>
       <entry><link linkend="view-pg-publication-tables"><structname>pg_publication_tables</structname></link></entry>
       <entry>publications and their associated tables</entry>
@@ -11641,72 +11626,6 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx
 
  </sect1>
 
- <sect1 id="view-pg-publication-sequences">
-  <title><structname>pg_publication_sequences</structname></title>
-
-  <indexterm zone="view-pg-publication-sequences">
-   <primary>pg_publication_sequences</primary>
-  </indexterm>
-
-  <para>
-   The view <structname>pg_publication_sequences</structname> provides
-   information about the mapping between publications and the sequences they
-   contain.  Unlike the underlying catalog
-   <link linkend="catalog-pg-publication-rel"><structname>pg_publication_rel</structname></link>,
-   this view expands
-   publications defined as <literal>FOR ALL SEQUENCES</literal>, so for such
-   publications there will be a row for each eligible sequence.
-  </para>
-
-  <table>
-   <title><structname>pg_publication_sequences</structname> Columns</title>
-   <tgroup cols="1">
-    <thead>
-     <row>
-      <entry role="catalog_table_entry"><para role="column_definition">
-       Column Type
-      </para>
-      <para>
-       Description
-      </para></entry>
-     </row>
-    </thead>
-
-    <tbody>
-     <row>
-      <entry role="catalog_table_entry"><para role="column_definition">
-       <structfield>pubname</structfield> <type>name</type>
-       (references <link linkend="catalog-pg-publication"><structname>pg_publication</structname></link>.<structfield>pubname</structfield>)
-      </para>
-      <para>
-       Name of publication
-      </para></entry>
-     </row>
-
-     <row>
-      <entry role="catalog_table_entry"><para role="column_definition">
-       <structfield>schemaname</structfield> <type>name</type>
-       (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>nspname</structfield>)
-      </para>
-      <para>
-       Name of schema containing sequence
-      </para></entry>
-     </row>
-
-     <row>
-      <entry role="catalog_table_entry"><para role="column_definition">
-       <structfield>sequencename</structfield> <type>name</type>
-       (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>relname</structfield>)
-      </para>
-      <para>
-       Name of sequence
-      </para></entry>
-     </row>
-    </tbody>
-   </tgroup>
-  </table>
- </sect1>
-
  <sect1 id="view-pg-publication-tables">
   <title><structname>pg_publication_tables</structname></title>
 
index a6ea6ff3fcff3d4092adb8c6302d83552585eb84..8b2c31a87faf7e6f656022286becb144fd3ca485 100644 (file)
@@ -458,7 +458,6 @@ typedef struct OutputPluginCallbacks
     LogicalDecodeTruncateCB truncate_cb;
     LogicalDecodeCommitCB commit_cb;
     LogicalDecodeMessageCB message_cb;
-    LogicalDecodeSequenceCB sequence_cb;
     LogicalDecodeFilterByOriginCB filter_by_origin_cb;
     LogicalDecodeShutdownCB shutdown_cb;
     LogicalDecodeFilterPrepareCB filter_prepare_cb;
@@ -473,7 +472,6 @@ typedef struct OutputPluginCallbacks
     LogicalDecodeStreamCommitCB stream_commit_cb;
     LogicalDecodeStreamChangeCB stream_change_cb;
     LogicalDecodeStreamMessageCB stream_message_cb;
-    LogicalDecodeStreamSequenceCB stream_sequence_cb;
     LogicalDecodeStreamTruncateCB stream_truncate_cb;
 } OutputPluginCallbacks;
 
@@ -483,11 +481,9 @@ typedef void (*LogicalOutputPluginInit) (struct OutputPluginCallbacks *cb);
      and <function>commit_cb</function> callbacks are required,
      while <function>startup_cb</function>,
      <function>filter_by_origin_cb</function>, <function>truncate_cb</function>,
-     <function>sequence_cb</function>, and <function>shutdown_cb</function> are
-     optional. If <function>truncate_cb</function> is not set but a
+     and <function>shutdown_cb</function> are optional.
+     If <function>truncate_cb</function> is not set but a
      <command>TRUNCATE</command> is to be decoded, the action will be ignored.
-     Similarly, if <function>sequence_cb</function> is not set and a sequence
-     change is to be decoded, the action will be ignored.
     </para>
 
     <para>
@@ -496,8 +492,7 @@ typedef void (*LogicalOutputPluginInit) (struct OutputPluginCallbacks *cb);
      <function>stream_stop_cb</function>, <function>stream_abort_cb</function>,
      <function>stream_commit_cb</function>, <function>stream_change_cb</function>,
      and <function>stream_prepare_cb</function>
-     are required, while <function>stream_message_cb</function>,
-     <function>stream_sequence_cb</function>, and
+     are required, while <function>stream_message_cb</function> and
      <function>stream_truncate_cb</function> are optional.
     </para>
 
@@ -813,35 +808,6 @@ typedef void (*LogicalDecodeMessageCB) (struct LogicalDecodingContext *ctx,
      </para>
     </sect3>
 
-    <sect3 id="logicaldecoding-output-plugin-sequence">
-     <title>Sequence Callback</title>
-
-     <para>
-      The optional <function>sequence_cb</function> callback is called for
-      actions that update a sequence value.
-<programlisting>
-typedef void (*LogicalDecodeSequenceCB) (struct LogicalDecodingContext *ctx,
-                                         ReorderBufferTXN *txn,
-                                         XLogRecPtr sequence_lsn,
-                                         Relation rel,
-                                         bool transactional,
-                                         int64 last_value,
-                                         int64 log_cnt,
-                                         bool is_called);
-</programlisting>
-      The <parameter>txn</parameter> parameter contains meta information about
-      the transaction the sequence change is part of. Note however that for
-      non-transactional increments, the transaction may be either NULL or not
-      NULL, depending on if the transaction already has an XID assigned.
-      The <parameter>sequence_lsn</parameter> has the WAL location of the
-      sequence update. <parameter>transactional</parameter> says if the
-      sequence has to be replayed as part of the transaction or directly.
-
-      The <parameter>last_value</parameter>, <parameter>log_cnt</parameter> and
-      <parameter>is_called</parameter> parameters describe the sequence change.
-     </para>
-    </sect3>
-
     <sect3 id="logicaldecoding-output-plugin-filter-prepare">
      <title>Prepare Filter Callback</title>
 
@@ -1051,26 +1017,6 @@ typedef void (*LogicalDecodeStreamMessageCB) (struct LogicalDecodingContext *ctx
      </para>
     </sect3>
 
-    <sect3 id="logicaldecoding-output-plugin-stream-sequence">
-     <title>Stream Sequence Callback</title>
-     <para>
-      The optional <function>stream_sequence_cb</function> callback is called
-      for actions that change a sequence in a block of streamed changes
-      (demarcated by <function>stream_start_cb</function> and
-      <function>stream_stop_cb</function> calls).
-<programlisting>
-typedef void (*LogicalDecodeStreamSequenceCB) (struct LogicalDecodingContext *ctx,
-                                               ReorderBufferTXN *txn,
-                                               XLogRecPtr sequence_lsn,
-                                               Relation rel,
-                                               bool transactional,
-                                               int64 last_value,
-                                               int64 log_cnt,
-                                               bool is_called);
-</programlisting>
-     </para>
-    </sect3>
-
     <sect3 id="logicaldecoding-output-plugin-stream-truncate">
      <title>Stream Truncate Callback</title>
      <para>
@@ -1251,9 +1197,8 @@ OutputPluginWrite(ctx, true);
     in-progress transactions. There are multiple required streaming callbacks
     (<function>stream_start_cb</function>, <function>stream_stop_cb</function>,
     <function>stream_abort_cb</function>, <function>stream_commit_cb</function>
-    and <function>stream_change_cb</function>) and multiple optional callbacks
-    (<function>stream_message_cb</function>, <function>stream_sequence_cb</function>,
-    and <function>stream_truncate_cb</function>).
+    and <function>stream_change_cb</function>) and two optional callbacks
+    (<function>stream_message_cb</function> and <function>stream_truncate_cb</function>).
     Also, if streaming of two-phase commands is to be supported, then additional
     callbacks must be provided. (See <xref linkend="logicaldecoding-two-phase-commits"/>
     for details).
index 98f0bc3cc34ff9e914b37cadf6b77b2f90bd90c9..75a7a76a55876345bb8c18ae52b8538ac8ac727d 100644 (file)
@@ -7072,125 +7072,6 @@ Relation
 </listitem>
 </varlistentry>
 
-<varlistentry id="protocol-logicalrep-message-formats-Sequence">
-<term>
-Sequence
-</term>
-<listitem>
-<para>
-
-<variablelist>
-<varlistentry>
-<term>
-        Byte1('X')
-</term>
-<listitem>
-<para>
-                Identifies the message as a sequence message.
-</para>
-</listitem>
-</varlistentry>
-<varlistentry>
-<term>
-        Int32 (TransactionId)
-</term>
-<listitem>
-<para>
-               Xid of the transaction (only present for streamed transactions).
-               This field is available since protocol version 2.
-</para>
-</listitem>
-</varlistentry>
-<varlistentry>
-<term>
-        Int8(0)
-</term>
-<listitem>
-<para>
-                Flags; currently unused.
-</para>
-</listitem>
-</varlistentry>
-<varlistentry>
-<term>
-        Int64 (XLogRecPtr)
-</term>
-<listitem>
-<para>
-                The LSN of the sequence increment.
-</para>
-</listitem>
-</varlistentry>
-<varlistentry>
-<term>
-        String
-</term>
-<listitem>
-<para>
-                Namespace (empty string for <literal>pg_catalog</literal>).
-</para>
-</listitem>
-</varlistentry>
-<varlistentry>
-<term>
-        String
-</term>
-<listitem>
-<para>
-                Relation name.
-</para>
-</listitem>
-</varlistentry>
-
-<varlistentry>
-<term>
-        Int8
-</term>
-<listitem>
-<para>
-                1 if the sequence update is transactional, 0 otherwise.
-</para>
-</listitem>
-</varlistentry>
-
-<varlistentry>
-<term>
-        Int64
-</term>
-<listitem>
-<para>
-                <structfield>last_value</structfield> value of the sequence.
-</para>
-</listitem>
-</varlistentry>
-
-<varlistentry>
-<term>
-        Int64
-</term>
-<listitem>
-<para>
-                <structfield>log_cnt</structfield> value of the sequence.
-</para>
-</listitem>
-</varlistentry>
-
-<varlistentry>
-<term>
-        Int8
-</term>
-<listitem>
-<para>
-                <structfield>is_called</structfield> value of the sequence.
-</para>
-</listitem>
-</varlistentry>
-
-</variablelist>
-</para>
-</listitem>
-</varlistentry>
-
 <varlistentry id="protocol-logicalrep-message-formats-Type">
 <term>
 Type
index db14d7a772c4892a99b60ad308a3da721d7c0641..e2cce49471b1e39ddc54b8bf92cb71494ebbe860 100644 (file)
@@ -31,9 +31,7 @@ ALTER PUBLICATION <replaceable class="parameter">name</replaceable> RENAME TO <r
 <phrase>where <replaceable class="parameter">publication_object</replaceable> is one of:</phrase>
 
     TABLE [ ONLY ] <replaceable class="parameter">table_name</replaceable> [ * ] [ ( <replaceable class="parameter">column_name</replaceable> [, ... ] ) ] [ WHERE ( <replaceable class="parameter">expression</replaceable> ) ] [, ... ]
-    SEQUENCE <replaceable class="parameter">sequence_name</replaceable> [, ... ]
     ALL TABLES IN SCHEMA { <replaceable class="parameter">schema_name</replaceable> | CURRENT_SCHEMA } [, ... ]
-    ALL SEQUENCES IN SCHEMA { <replaceable class="parameter">schema_name</replaceable> | CURRENT_SCHEMA } [, ... ]
 </synopsis>
  </refsynopsisdiv>
 
@@ -46,13 +44,13 @@ ALTER PUBLICATION <replaceable class="parameter">name</replaceable> RENAME TO <r
   </para>
 
   <para>
-   The first three variants change which objects (tables, sequences or schemas)
-   are part of the publication.  The <literal>SET</literal> clause will replace
-   the list of objects in the publication with the specified list; the existing
-   objects that were present in the publication will be removed.
-   The <literal>ADD</literal> and <literal>DROP</literal> clauses will add and
-   remove one or more objects from the publication.  Note that adding objects
-   to a publication that is already subscribed to will require an
+   The first three variants change which tables/schemas are part of the
+   publication.  The <literal>SET</literal> clause will replace the list of
+   tables/schemas in the publication with the specified list; the existing
+   tables/schemas that were present in the publication will be removed.  The
+   <literal>ADD</literal> and <literal>DROP</literal> clauses will add and
+   remove one or more tables/schemas from the publication.  Note that adding
+   tables/schemas to a publication that is already subscribed to will require an
    <literal>ALTER SUBSCRIPTION ... REFRESH PUBLICATION</literal> action on the
    subscribing side in order to become effective. Note also that the combination
    of <literal>DROP</literal> with a <literal>WHERE</literal> clause is not
@@ -132,15 +130,6 @@ ALTER PUBLICATION <replaceable class="parameter">name</replaceable> RENAME TO <r
     </listitem>
    </varlistentry>
 
-   <varlistentry>
-    <term><replaceable class="parameter">sequence_name</replaceable></term>
-    <listitem>
-     <para>
-      Name of an existing sequence.
-     </para>
-    </listitem>
-   </varlistentry>
-
    <varlistentry>
     <term><replaceable class="parameter">schema_name</replaceable></term>
     <listitem>
index c1994e3a94a14ff5a67e6844e835ab9b888857b1..7c5203b6d3bae05d0d231191e4e1c8f6f2c4f2cf 100644 (file)
@@ -150,8 +150,8 @@ ALTER SUBSCRIPTION <replaceable class="parameter">name</replaceable> RENAME TO <
     <listitem>
      <para>
       Fetch missing table information from publisher.  This will start
-      replication of tables and sequences that were added to the subscribed-to
-       publications since <command>CREATE SUBSCRIPTION</command> or
+      replication of tables that were added to the subscribed-to publications
+      since <command>CREATE SUBSCRIPTION</command> or
       the last invocation of <command>REFRESH PUBLICATION</command>.
      </para>
 
@@ -169,8 +169,8 @@ ALTER SUBSCRIPTION <replaceable class="parameter">name</replaceable> RENAME TO <
           The default is <literal>true</literal>.
          </para>
          <para>
-          Previously subscribed tables and sequences are not copied, even if a
-          table's row filter <literal>WHERE</literal> clause has since been modified.
+          Previously subscribed tables are not copied, even if a table's row
+          filter <literal>WHERE</literal> clause has since been modified.
          </para>
         </listitem>
        </varlistentry>
index d2739968d9c3ff3dd901ed1dc6e13fb6faf27cd1..fb2d013393b82ff469139643077ec44646a73958 100644 (file)
@@ -22,21 +22,14 @@ PostgreSQL documentation
  <refsynopsisdiv>
 <synopsis>
 CREATE PUBLICATION <replaceable class="parameter">name</replaceable>
-    [ FOR ALL <replaceable class="parameter">object_type</replaceable> [, ...]
+    [ FOR ALL TABLES
       | FOR <replaceable class="parameter">publication_object</replaceable> [, ... ] ]
     [ WITH ( <replaceable class="parameter">publication_parameter</replaceable> [= <replaceable class="parameter">value</replaceable>] [, ... ] ) ]
 
-<phrase>where <replaceable class="parameter">object type</replaceable> is one of:</phrase>
-
-    TABLES
-    SEQUENCES
-
 <phrase>where <replaceable class="parameter">publication_object</replaceable> is one of:</phrase>
 
     TABLE [ ONLY ] <replaceable class="parameter">table_name</replaceable> [ * ] [ ( <replaceable class="parameter">column_name</replaceable> [, ... ] ) ] [ WHERE ( <replaceable class="parameter">expression</replaceable> ) ] [, ... ]
-    SEQUENCE <replaceable class="parameter">sequence_name</replaceable> [ * ] [, ... ]
     ALL TABLES IN SCHEMA { <replaceable class="parameter">schema_name</replaceable> | CURRENT_SCHEMA } [, ... ]
-    ALL SEQUENCES IN SCHEMA { <replaceable class="parameter">schema_name</replaceable> | CURRENT_SCHEMA } [, ... ]
 </synopsis>
  </refsynopsisdiv>
 
@@ -121,43 +114,27 @@ CREATE PUBLICATION <replaceable class="parameter">name</replaceable>
     </listitem>
    </varlistentry>
 
-   <varlistentry>
-    <term><literal>FOR SEQUENCE</literal></term>
-    <listitem>
-     <para>
-      Specifies a list of sequences to add to the publication.
-     </para>
-
-     <para>
-      Specifying a sequence that is part of a schema specified by <literal>FOR
-      ALL SEQUENCES IN SCHEMA</literal> is not supported.
-     </para>
-    </listitem>
-   </varlistentry>
-
    <varlistentry>
     <term><literal>FOR ALL TABLES</literal></term>
-    <term><literal>FOR ALL SEQUENCES</literal></term>
     <listitem>
      <para>
-      Marks the publication as one that replicates changes for all tables/sequences in
-      the database, including tables/sequences created in the future.
+      Marks the publication as one that replicates changes for all tables in
+      the database, including tables created in the future.
      </para>
     </listitem>
    </varlistentry>
 
    <varlistentry>
     <term><literal>FOR ALL TABLES IN SCHEMA</literal></term>
-    <term><literal>FOR ALL SEQUENCES IN SCHEMA</literal></term>
     <listitem>
      <para>
-      Marks the publication as one that replicates changes for all sequences/tables in
-      the specified list of schemas, including sequences/tables created in the future.
+      Marks the publication as one that replicates changes for all tables in
+      the specified list of schemas, including tables created in the future.
      </para>
 
      <para>
-      Specifying a schema along with a sequence/table which belongs to the specified
-      schema using <literal>FOR SEQUENCE</literal>/<literal>FOR TABLE</literal> is not supported.
+      Specifying a schema along with a table which belongs to the specified
+      schema using <literal>FOR TABLE</literal> is not supported.
      </para>
 
      <para>
@@ -232,9 +209,10 @@ CREATE PUBLICATION <replaceable class="parameter">name</replaceable>
   <title>Notes</title>
 
   <para>
-   If <literal>FOR TABLE</literal>, <literal>FOR SEQUENCE</literal>, etc. is
-   not specified, then the publication starts out with an empty set of tables
-   and sequences.  That is useful if objects are to be added later.
+   If <literal>FOR TABLE</literal>, <literal>FOR ALL TABLES</literal> or
+   <literal>FOR ALL TABLES IN SCHEMA</literal> are not specified, then the
+   publication starts out with an empty set of tables.  That is useful if
+   tables or schemas are to be added later.
   </para>
 
   <para>
@@ -249,9 +227,10 @@ CREATE PUBLICATION <replaceable class="parameter">name</replaceable>
   </para>
 
   <para>
-   To add a table or a sequence to a publication, the invoking user must
-   have ownership rights on the object.  The <command>FOR ALL ...</command>
-   clauses require the invoking user to be a superuser.
+   To add a table to a publication, the invoking user must have ownership
+   rights on the table.  The <command>FOR ALL TABLES</command> and
+   <command>FOR ALL TABLES IN SCHEMA</command> clauses require the invoking
+   user to be a superuser.
   </para>
 
   <para>
index 31c80f7209f9127d40d2206178aab1d07b02a73d..ac6043514f1abd3b00a9a65ab74dd5df62cf471e 100644 (file)
@@ -1941,14 +1941,12 @@ get_object_address_publication_schema(List *object, bool missing_ok)
        char       *pubname;
        char       *schemaname;
        Oid                     schemaid;
-       char       *objtype;
 
        ObjectAddressSet(address, PublicationNamespaceRelationId, InvalidOid);
 
        /* Fetch schema name and publication name from input list */
        schemaname = strVal(linitial(object));
        pubname = strVal(lsecond(object));
-       objtype = strVal(lthird(object));
 
        schemaid = get_namespace_oid(schemaname, missing_ok);
        if (!OidIsValid(schemaid))
@@ -1961,12 +1959,10 @@ get_object_address_publication_schema(List *object, bool missing_ok)
 
        /* Find the publication schema mapping in syscache */
        address.objectId =
-               GetSysCacheOid3(PUBLICATIONNAMESPACEMAP,
+               GetSysCacheOid2(PUBLICATIONNAMESPACEMAP,
                                                Anum_pg_publication_namespace_oid,
                                                ObjectIdGetDatum(schemaid),
-                                               ObjectIdGetDatum(pub->oid),
-                                               CharGetDatum(objtype[0]));
-
+                                               ObjectIdGetDatum(pub->oid));
        if (!OidIsValid(address.objectId) && !missing_ok)
                ereport(ERROR,
                                (errcode(ERRCODE_UNDEFINED_OBJECT),
@@ -2247,6 +2243,7 @@ pg_get_object_address(PG_FUNCTION_ARGS)
                case OBJECT_DOMCONSTRAINT:
                case OBJECT_CAST:
                case OBJECT_USER_MAPPING:
+               case OBJECT_PUBLICATION_NAMESPACE:
                case OBJECT_PUBLICATION_REL:
                case OBJECT_DEFACL:
                case OBJECT_TRANSFORM:
@@ -2271,7 +2268,6 @@ pg_get_object_address(PG_FUNCTION_ARGS)
                        /* fall through to check args length */
                        /* FALLTHROUGH */
                case OBJECT_OPERATOR:
-               case OBJECT_PUBLICATION_NAMESPACE:
                        if (list_length(args) != 2)
                                ereport(ERROR,
                                                (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -2343,8 +2339,6 @@ pg_get_object_address(PG_FUNCTION_ARGS)
                        objnode = (Node *) list_make2(name, linitial(args));
                        break;
                case OBJECT_PUBLICATION_NAMESPACE:
-                       objnode = (Node *) list_make3(linitial(name), linitial(args), lsecond(args));
-                       break;
                case OBJECT_USER_MAPPING:
                        objnode = (Node *) list_make2(linitial(name), linitial(args));
                        break;
@@ -2900,12 +2894,11 @@ get_catalog_object_by_oid(Relation catalog, AttrNumber oidcol, Oid objectId)
  *
  * Get publication name and schema name from the object address into pubname and
  * nspname. Both pubname and nspname are palloc'd strings which will be freed by
- * the caller. The last parameter specifies which object type is included from
- * the schema.
+ * the caller.
  */
 static bool
 getPublicationSchemaInfo(const ObjectAddress *object, bool missing_ok,
-                                                char **pubname, char **nspname, char **objtype)
+                                                char **pubname, char **nspname)
 {
        HeapTuple       tup;
        Form_pg_publication_namespace pnform;
@@ -2941,13 +2934,6 @@ getPublicationSchemaInfo(const ObjectAddress *object, bool missing_ok,
                return false;
        }
 
-       /*
-        * The type is always a single character, but we need to pass it as a string,
-        * so allocate two charaters and set the first one. The second one is \0.
-        */
-       *objtype = palloc0(2);
-       *objtype[0] = pnform->pntype;
-
        ReleaseSysCache(tup);
        return true;
 }
@@ -3979,17 +3965,15 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
                        {
                                char       *pubname;
                                char       *nspname;
-                               char       *objtype;
 
                                if (!getPublicationSchemaInfo(object, missing_ok,
-                                                                                         &pubname, &nspname, &objtype))
+                                                                                         &pubname, &nspname))
                                        break;
 
-                               appendStringInfo(&buffer, _("publication of schema %s in publication %s type %s"),
-                                                                nspname, pubname, objtype);
+                               appendStringInfo(&buffer, _("publication of schema %s in publication %s"),
+                                                                nspname, pubname);
                                pfree(pubname);
                                pfree(nspname);
-                               pfree(objtype);
                                break;
                        }
 
@@ -5816,24 +5800,18 @@ getObjectIdentityParts(const ObjectAddress *object,
                        {
                                char       *pubname;
                                char       *nspname;
-                               char       *objtype;
 
                                if (!getPublicationSchemaInfo(object, missing_ok, &pubname,
-                                                                                         &nspname, &objtype))
+                                                                                         &nspname))
                                        break;
-                               appendStringInfo(&buffer, "%s in publication %s type %s",
-                                                                nspname, pubname, objtype);
+                               appendStringInfo(&buffer, "%s in publication %s",
+                                                                nspname, pubname);
 
                                if (objargs)
                                        *objargs = list_make1(pubname);
                                else
                                        pfree(pubname);
 
-                               if (objargs)
-                                       *objargs = lappend(*objargs, objtype);
-                               else
-                                       pfree(objtype);
-
                                if (objname)
                                        *objname = list_make1(nspname);
                                else
index 9fe3b189269e5723e055921b721c2f4e72be5dfc..2631558ff11ab48b03bc9b2d0c4d440e2ece497b 100644 (file)
@@ -55,10 +55,9 @@ static void publication_translate_columns(Relation targetrel, List *columns,
 static void
 check_publication_add_relation(Relation targetrel)
 {
-       /* Must be a regular or partitioned table, or a sequence */
+       /* Must be a regular or partitioned table */
        if (RelationGetForm(targetrel)->relkind != RELKIND_RELATION &&
-               RelationGetForm(targetrel)->relkind != RELKIND_PARTITIONED_TABLE &&
-               RelationGetForm(targetrel)->relkind != RELKIND_SEQUENCE)
+               RelationGetForm(targetrel)->relkind != RELKIND_PARTITIONED_TABLE)
                ereport(ERROR,
                                (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
                                 errmsg("cannot add relation \"%s\" to publication",
@@ -135,8 +134,7 @@ static bool
 is_publishable_class(Oid relid, Form_pg_class reltuple)
 {
        return (reltuple->relkind == RELKIND_RELATION ||
-                       reltuple->relkind == RELKIND_PARTITIONED_TABLE ||
-                       reltuple->relkind == RELKIND_SEQUENCE) &&
+                       reltuple->relkind == RELKIND_PARTITIONED_TABLE) &&
                !IsCatalogRelationOid(relid) &&
                reltuple->relpersistence == RELPERSISTENCE_PERMANENT &&
                relid >= FirstNormalObjectId;
@@ -181,52 +179,6 @@ filter_partitions(List *relids)
        return result;
 }
 
-/*
- * Check the character is a valid object type for schema publication.
- *
- * This recognizes either 't' for tables or 's' for sequences. Places that
- * need to handle 'u' for unsupported relkinds need to do that explicitlyl
- */
-static void
-AssertObjectTypeValid(char objectType)
-{
-#ifdef USE_ASSERT_CHECKING
-       Assert(objectType == PUB_OBJTYPE_SEQUENCE || objectType == PUB_OBJTYPE_TABLE);
-#endif
-}
-
-/*
- * Determine object type matching a given a relkind value.
- */
-char
-pub_get_object_type_for_relkind(char relkind)
-{
-       /* sequence maps directly to sequence relkind */
-       if (relkind == RELKIND_SEQUENCE)
-               return PUB_OBJTYPE_SEQUENCE;
-
-       /* for table, we match either regular or partitioned table */
-       if (relkind == RELKIND_RELATION ||
-               relkind == RELKIND_PARTITIONED_TABLE)
-               return PUB_OBJTYPE_TABLE;
-
-       return PUB_OBJTYPE_UNSUPPORTED;
-}
-
-/*
- * Determine if publication object type matches the relkind.
- *
- * Returns true if the relation matches object type replicated by this schema,
- * false otherwise.
- */
-static bool
-pub_object_type_matches_relkind(char objectType, char relkind)
-{
-       AssertObjectTypeValid(objectType);
-
-       return (pub_get_object_type_for_relkind(relkind) == objectType);
-}
-
 /*
  * Another variant of this, taking a Relation.
  */
@@ -256,7 +208,7 @@ is_schema_publication(Oid pubid)
                                ObjectIdGetDatum(pubid));
 
        scan = systable_beginscan(pubschsrel,
-                                                         PublicationNamespacePnnspidPnpubidPntypeIndexId,
+                                                         PublicationNamespacePnnspidPnpubidIndexId,
                                                          true, NULL, 1, &scankey);
        tup = systable_getnext(scan);
        result = HeapTupleIsValid(tup);
@@ -364,9 +316,7 @@ GetTopMostAncestorInPublication(Oid puboid, List *ancestors, int *ancestor_level
                }
                else
                {
-                       /* we only search for ancestors of tables, so PUB_OBJTYPE_TABLE */
-                       aschemaPubids = GetSchemaPublications(get_rel_namespace(ancestor),
-                                                                                                 PUB_OBJTYPE_TABLE);
+                       aschemaPubids = GetSchemaPublications(get_rel_namespace(ancestor));
                        if (list_member_oid(aschemaPubids, puboid))
                        {
                                topmost_relid = ancestor;
@@ -635,7 +585,7 @@ pub_collist_to_bitmapset(Bitmapset *columns, Datum pubcols, MemoryContext mcxt)
  * Insert new publication / schema mapping.
  */
 ObjectAddress
-publication_add_schema(Oid pubid, Oid schemaid, char objectType, bool if_not_exists)
+publication_add_schema(Oid pubid, Oid schemaid, bool if_not_exists)
 {
        Relation        rel;
        HeapTuple       tup;
@@ -647,8 +597,6 @@ publication_add_schema(Oid pubid, Oid schemaid, char objectType, bool if_not_exi
        ObjectAddress myself,
                                referenced;
 
-       AssertObjectTypeValid(objectType);
-
        rel = table_open(PublicationNamespaceRelationId, RowExclusiveLock);
 
        /*
@@ -656,10 +604,9 @@ publication_add_schema(Oid pubid, Oid schemaid, char objectType, bool if_not_exi
         * duplicates, it's here just to provide nicer error message in common
         * case. The real protection is the unique key on the catalog.
         */
-       if (SearchSysCacheExists3(PUBLICATIONNAMESPACEMAP,
+       if (SearchSysCacheExists2(PUBLICATIONNAMESPACEMAP,
                                                          ObjectIdGetDatum(schemaid),
-                                                         ObjectIdGetDatum(pubid),
-                                                         CharGetDatum(objectType)))
+                                                         ObjectIdGetDatum(pubid)))
        {
                table_close(rel, RowExclusiveLock);
 
@@ -685,8 +632,6 @@ publication_add_schema(Oid pubid, Oid schemaid, char objectType, bool if_not_exi
                ObjectIdGetDatum(pubid);
        values[Anum_pg_publication_namespace_pnnspid - 1] =
                ObjectIdGetDatum(schemaid);
-       values[Anum_pg_publication_namespace_pntype - 1] =
-               CharGetDatum(objectType);
 
        tup = heap_form_tuple(RelationGetDescr(rel), values, nulls);
 
@@ -712,7 +657,7 @@ publication_add_schema(Oid pubid, Oid schemaid, char objectType, bool if_not_exi
         * publication_add_relation for why we need to consider all the
         * partitions.
         */
-       schemaRels = GetSchemaPublicationRelations(schemaid, objectType,
+       schemaRels = GetSchemaPublicationRelations(schemaid,
                                                                                           PUBLICATION_PART_ALL);
        InvalidatePublicationRels(schemaRels);
 
@@ -746,14 +691,11 @@ GetRelationPublications(Oid relid)
 /*
  * Gets list of relation oids for a publication.
  *
- * This should only be used FOR TABLE / FOR SEQUENCE publications, the FOR
- * ALL TABLES / SEQUENCES should use GetAllTablesPublicationRelations()
- * and GetAllSequencesPublicationRelations().
- *
- * XXX pub_partopt only matters for tables, not sequences.
+ * This should only be used FOR TABLE publications, the FOR ALL TABLES
+ * should use GetAllTablesPublicationRelations().
  */
 List *
-GetPublicationRelations(Oid pubid, char objectType, PublicationPartOpt pub_partopt)
+GetPublicationRelations(Oid pubid, PublicationPartOpt pub_partopt)
 {
        List       *result;
        Relation        pubrelsrel;
@@ -761,8 +703,6 @@ GetPublicationRelations(Oid pubid, char objectType, PublicationPartOpt pub_parto
        SysScanDesc scan;
        HeapTuple       tup;
 
-       AssertObjectTypeValid(objectType);
-
        /* Find all publications associated with the relation. */
        pubrelsrel = table_open(PublicationRelRelationId, AccessShareLock);
 
@@ -777,29 +717,11 @@ GetPublicationRelations(Oid pubid, char objectType, PublicationPartOpt pub_parto
        result = NIL;
        while (HeapTupleIsValid(tup = systable_getnext(scan)))
        {
-               char    relkind;
                Form_pg_publication_rel pubrel;
 
                pubrel = (Form_pg_publication_rel) GETSTRUCT(tup);
-               relkind = get_rel_relkind(pubrel->prrelid);
-
-               /*
-                * If the relkind does not match the requested object type, ignore the
-                * relation. For example we might be interested only in sequences, so
-                * we ignore tables.
-                */
-               if (!pub_object_type_matches_relkind(objectType, relkind))
-                       continue;
-
-               /*
-                * We don't have partitioned sequences, so just add them to the list.
-                * Otherwise consider adding all child relations, if requested.
-                */
-               if (relkind == RELKIND_SEQUENCE)
-                       result = lappend_oid(result, pubrel->prrelid);
-               else
-                       result = GetPubPartitionOptionRelations(result, pub_partopt,
-                                                                                                       pubrel->prrelid);
+               result = GetPubPartitionOptionRelations(result, pub_partopt,
+                                                                                               pubrel->prrelid);
        }
 
        systable_endscan(scan);
@@ -849,43 +771,6 @@ GetAllTablesPublications(void)
        return result;
 }
 
-/*
- * Gets list of publication oids for publications marked as FOR ALL SEQUENCES.
- */
-List *
-GetAllSequencesPublications(void)
-{
-       List       *result;
-       Relation        rel;
-       ScanKeyData scankey;
-       SysScanDesc scan;
-       HeapTuple       tup;
-
-       /* Find all publications that are marked as for all sequences. */
-       rel = table_open(PublicationRelationId, AccessShareLock);
-
-       ScanKeyInit(&scankey,
-                               Anum_pg_publication_puballsequences,
-                               BTEqualStrategyNumber, F_BOOLEQ,
-                               BoolGetDatum(true));
-
-       scan = systable_beginscan(rel, InvalidOid, false,
-                                                         NULL, 1, &scankey);
-
-       result = NIL;
-       while (HeapTupleIsValid(tup = systable_getnext(scan)))
-       {
-               Oid                     oid = ((Form_pg_publication) GETSTRUCT(tup))->oid;
-
-               result = lappend_oid(result, oid);
-       }
-
-       systable_endscan(scan);
-       table_close(rel, AccessShareLock);
-
-       return result;
-}
-
 /*
  * Gets list of all relation published by FOR ALL TABLES publication(s).
  *
@@ -952,38 +837,28 @@ GetAllTablesPublicationRelations(bool pubviaroot)
 /*
  * Gets the list of schema oids for a publication.
  *
- * This should only be used FOR ALL TABLES IN SCHEMA and FOR ALL SEQUENCES
- * publications.
- *
- * 'objectType' determines whether to get FOR TABLE or FOR SEQUENCES schemas
+ * This should only be used FOR ALL TABLES IN SCHEMA publications.
  */
 List *
-GetPublicationSchemas(Oid pubid, char objectType)
+GetPublicationSchemas(Oid pubid)
 {
        List       *result = NIL;
        Relation        pubschsrel;
-       ScanKeyData scankey[2];
+       ScanKeyData scankey;
        SysScanDesc scan;
        HeapTuple       tup;
 
-       AssertObjectTypeValid(objectType);
-
        /* Find all schemas associated with the publication */
        pubschsrel = table_open(PublicationNamespaceRelationId, AccessShareLock);
 
-       ScanKeyInit(&scankey[0],
+       ScanKeyInit(&scankey,
                                Anum_pg_publication_namespace_pnpubid,
                                BTEqualStrategyNumber, F_OIDEQ,
                                ObjectIdGetDatum(pubid));
 
-       ScanKeyInit(&scankey[1],
-                               Anum_pg_publication_namespace_pntype,
-                               BTEqualStrategyNumber, F_CHAREQ,
-                               CharGetDatum(objectType));
-
        scan = systable_beginscan(pubschsrel,
-                                                         PublicationNamespacePnnspidPnpubidPntypeIndexId,
-                                                         true, NULL, 2, scankey);
+                                                         PublicationNamespacePnnspidPnpubidIndexId,
+                                                         true, NULL, 1, &scankey);
        while (HeapTupleIsValid(tup = systable_getnext(scan)))
        {
                Form_pg_publication_namespace pubsch;
@@ -1001,26 +876,14 @@ GetPublicationSchemas(Oid pubid, char objectType)
 
 /*
  * Gets the list of publication oids associated with a specified schema.
- *
- * objectType specifies whether we're looking for schemas including tables or
- * sequences.
- *
- * Note: relcache calls this for all object types, not just tables and sequences.
- * Which is why we handle the PUB_OBJTYPE_UNSUPPORTED object type too.
  */
 List *
-GetSchemaPublications(Oid schemaid, char objectType)
+GetSchemaPublications(Oid schemaid)
 {
        List       *result = NIL;
        CatCList   *pubschlist;
        int                     i;
 
-       /* unsupported object type */
-       if (objectType == PUB_OBJTYPE_UNSUPPORTED)
-               return result;
-
-       AssertObjectTypeValid(objectType);
-
        /* Find all publications associated with the schema */
        pubschlist = SearchSysCacheList1(PUBLICATIONNAMESPACEMAP,
                                                                         ObjectIdGetDatum(schemaid));
@@ -1028,11 +891,6 @@ GetSchemaPublications(Oid schemaid, char objectType)
        {
                HeapTuple       tup = &pubschlist->members[i]->tuple;
                Oid                     pubid = ((Form_pg_publication_namespace) GETSTRUCT(tup))->pnpubid;
-               char            pntype = ((Form_pg_publication_namespace) GETSTRUCT(tup))->pntype;
-
-               /* Skip schemas publishing a different object type. */
-               if (pntype != objectType)
-                       continue;
 
                result = lappend_oid(result, pubid);
        }
@@ -1044,13 +902,9 @@ GetSchemaPublications(Oid schemaid, char objectType)
 
 /*
  * Get the list of publishable relation oids for a specified schema.
- *
- * objectType specifies whether this is FOR ALL TABLES IN SCHEMA or FOR ALL
- * SEQUENCES IN SCHEMA
  */
 List *
-GetSchemaPublicationRelations(Oid schemaid, char objectType,
-                                                         PublicationPartOpt pub_partopt)
+GetSchemaPublicationRelations(Oid schemaid, PublicationPartOpt pub_partopt)
 {
        Relation        classRel;
        ScanKeyData key[1];
@@ -1059,7 +913,6 @@ GetSchemaPublicationRelations(Oid schemaid, char objectType,
        List       *result = NIL;
 
        Assert(OidIsValid(schemaid));
-       AssertObjectTypeValid(objectType);
 
        classRel = table_open(RelationRelationId, AccessShareLock);
 
@@ -1080,16 +933,9 @@ GetSchemaPublicationRelations(Oid schemaid, char objectType,
                        continue;
 
                relkind = get_rel_relkind(relid);
-
-               /* Skip if the relkind does not match FOR ALL TABLES / SEQUENCES. */
-               if (!pub_object_type_matches_relkind(objectType, relkind))
-                       continue;
-
-               /*
-                * If the object is a partitioned table, lookup all the child relations
-                * (if requested). Otherwise just add the object to the list.
-                */
-               if (relkind == RELKIND_PARTITIONED_TABLE)
+               if (relkind == RELKIND_RELATION)
+                       result = lappend_oid(result, relid);
+               else if (relkind == RELKIND_PARTITIONED_TABLE)
                {
                        List       *partitionrels = NIL;
 
@@ -1102,11 +948,7 @@ GetSchemaPublicationRelations(Oid schemaid, char objectType,
                                                                                                                   pub_partopt,
                                                                                                                   relForm->oid);
                        result = list_concat_unique_oid(result, partitionrels);
-                       continue;
                }
-
-               /* non-partitioned tables and sequences */
-               result = lappend_oid(result, relid);
        }
 
        table_endscan(scan);
@@ -1116,67 +958,27 @@ GetSchemaPublicationRelations(Oid schemaid, char objectType,
 
 /*
  * Gets the list of all relations published by FOR ALL TABLES IN SCHEMA
- * or FOR ALL SEQUENCES IN SCHEMA publication.
+ * publication.
  */
 List *
-GetAllSchemaPublicationRelations(Oid pubid, char objectType,
-                                                                PublicationPartOpt pub_partopt)
+GetAllSchemaPublicationRelations(Oid pubid, PublicationPartOpt pub_partopt)
 {
        List       *result = NIL;
-       List       *pubschemalist = GetPublicationSchemas(pubid, objectType);
+       List       *pubschemalist = GetPublicationSchemas(pubid);
        ListCell   *cell;
 
-       AssertObjectTypeValid(objectType);
-
        foreach(cell, pubschemalist)
        {
                Oid                     schemaid = lfirst_oid(cell);
                List       *schemaRels = NIL;
 
-               schemaRels = GetSchemaPublicationRelations(schemaid, objectType,
-                                                                                                  pub_partopt);
+               schemaRels = GetSchemaPublicationRelations(schemaid, pub_partopt);
                result = list_concat(result, schemaRels);
        }
 
        return result;
 }
 
-/*
- * Gets list of all relation published by FOR ALL SEQUENCES publication(s).
- */
-List *
-GetAllSequencesPublicationRelations(void)
-{
-       Relation        classRel;
-       ScanKeyData key[1];
-       TableScanDesc scan;
-       HeapTuple       tuple;
-       List       *result = NIL;
-
-       classRel = table_open(RelationRelationId, AccessShareLock);
-
-       ScanKeyInit(&key[0],
-                               Anum_pg_class_relkind,
-                               BTEqualStrategyNumber, F_CHAREQ,
-                               CharGetDatum(RELKIND_SEQUENCE));
-
-       scan = table_beginscan_catalog(classRel, 1, key);
-
-       while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL)
-       {
-               Form_pg_class relForm = (Form_pg_class) GETSTRUCT(tuple);
-               Oid                     relid = relForm->oid;
-
-               if (is_publishable_class(relid, relForm))
-                       result = lappend_oid(result, relid);
-       }
-
-       table_endscan(scan);
-
-       table_close(classRel, AccessShareLock);
-       return result;
-}
-
 /*
  * Get publication using oid
  *
@@ -1199,12 +1001,10 @@ GetPublication(Oid pubid)
        pub->oid = pubid;
        pub->name = pstrdup(NameStr(pubform->pubname));
        pub->alltables = pubform->puballtables;
-       pub->allsequences = pubform->puballsequences;
        pub->pubactions.pubinsert = pubform->pubinsert;
        pub->pubactions.pubupdate = pubform->pubupdate;
        pub->pubactions.pubdelete = pubform->pubdelete;
        pub->pubactions.pubtruncate = pubform->pubtruncate;
-       pub->pubactions.pubsequence = pubform->pubsequence;
        pub->pubviaroot = pubform->pubviaroot;
 
        ReleaseSysCache(tup);
@@ -1315,12 +1115,10 @@ pg_get_publication_tables(PG_FUNCTION_ARGS)
                                           *schemarelids;
 
                        relids = GetPublicationRelations(publication->oid,
-                                                                                        PUB_OBJTYPE_TABLE,
                                                                                         publication->pubviaroot ?
                                                                                         PUBLICATION_PART_ROOT :
                                                                                         PUBLICATION_PART_LEAF);
                        schemarelids = GetAllSchemaPublicationRelations(publication->oid,
-                                                                                                                       PUB_OBJTYPE_TABLE,
                                                                                                                        publication->pubviaroot ?
                                                                                                                        PUBLICATION_PART_ROOT :
                                                                                                                        PUBLICATION_PART_LEAF);
@@ -1356,71 +1154,3 @@ pg_get_publication_tables(PG_FUNCTION_ARGS)
 
        SRF_RETURN_DONE(funcctx);
 }
-
-/*
- * Returns Oids of sequences in a publication.
- */
-Datum
-pg_get_publication_sequences(PG_FUNCTION_ARGS)
-{
-       FuncCallContext *funcctx;
-       char       *pubname = text_to_cstring(PG_GETARG_TEXT_PP(0));
-       Publication *publication;
-       List       *sequences;
-
-       /* stuff done only on the first call of the function */
-       if (SRF_IS_FIRSTCALL())
-       {
-               MemoryContext oldcontext;
-
-               /* create a function context for cross-call persistence */
-               funcctx = SRF_FIRSTCALL_INIT();
-
-               /* switch to memory context appropriate for multiple function calls */
-               oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
-
-               publication = GetPublicationByName(pubname, false);
-
-               /*
-                * Publications support partitioned tables, although all changes are
-                * replicated using leaf partition identity and schema, so we only
-                * need those.
-                */
-               if (publication->allsequences)
-                       sequences = GetAllSequencesPublicationRelations();
-               else
-               {
-                       List       *relids,
-                                          *schemarelids;
-
-                       relids = GetPublicationRelations(publication->oid,
-                                                                                        PUB_OBJTYPE_SEQUENCE,
-                                                                                        publication->pubviaroot ?
-                                                                                        PUBLICATION_PART_ROOT :
-                                                                                        PUBLICATION_PART_LEAF);
-                       schemarelids = GetAllSchemaPublicationRelations(publication->oid,
-                                                                                                                       PUB_OBJTYPE_SEQUENCE,
-                                                                                                                       publication->pubviaroot ?
-                                                                                                                       PUBLICATION_PART_ROOT :
-                                                                                                                       PUBLICATION_PART_LEAF);
-                       sequences = list_concat_unique_oid(relids, schemarelids);
-               }
-
-               funcctx->user_fctx = (void *) sequences;
-
-               MemoryContextSwitchTo(oldcontext);
-       }
-
-       /* stuff done on every call of the function */
-       funcctx = SRF_PERCALL_SETUP();
-       sequences = (List *) funcctx->user_fctx;
-
-       if (funcctx->call_cntr < list_length(sequences))
-       {
-               Oid                     relid = list_nth_oid(sequences, funcctx->call_cntr);
-
-               SRF_RETURN_NEXT(funcctx, ObjectIdGetDatum(relid));
-       }
-
-       SRF_RETURN_DONE(funcctx);
-}
index b1a6df16ad33cf4893e1ee6f22844f65988d9909..0fc614e32c0cccef06456fc8a7bd790efb0c6e0c 100644 (file)
@@ -374,16 +374,6 @@ CREATE VIEW pg_publication_tables AS
          pg_class C JOIN pg_namespace N ON (N.oid = C.relnamespace)
     WHERE C.oid = GPT.relid;
 
-CREATE VIEW pg_publication_sequences AS
-    SELECT
-        P.pubname AS pubname,
-        N.nspname AS schemaname,
-        C.relname AS sequencename
-    FROM pg_publication P,
-         LATERAL pg_get_publication_sequences(P.pubname) GPS,
-         pg_class C JOIN pg_namespace N ON (N.oid = C.relnamespace)
-    WHERE C.oid = GPS.relid;
-
 CREATE VIEW pg_locks AS
     SELECT * FROM pg_lock_status() AS L;
 
index 84e37df783b56d973b9a54729c6ea50b0e8e972e..4fd1e6e7abb5fcbf5aceffa292485582b131c28d 100644 (file)
@@ -16,7 +16,6 @@
 
 #include "access/genam.h"
 #include "access/htup_details.h"
-#include "access/relation.h"
 #include "access/table.h"
 #include "access/xact.h"
 #include "catalog/catalog.h"
@@ -68,17 +67,15 @@ typedef struct rf_context
 } rf_context;
 
 static List *OpenRelIdList(List *relids);
-static List *OpenRelationList(List *rels, char objectType);
-static void CloseRelationList(List *rels);
+static List *OpenTableList(List *tables);
+static void CloseTableList(List *rels);
 static void LockSchemaList(List *schemalist);
-static void PublicationAddRelations(Oid pubid, List *rels, bool if_not_exists,
+static void PublicationAddTables(Oid pubid, List *rels, bool if_not_exists,
                                                                 AlterPublicationStmt *stmt);
-static void PublicationDropRelations(Oid pubid, List *rels, bool missing_ok);
-static void PublicationAddSchemas(Oid pubid, List *schemas, char objectType,
-                                                                 bool if_not_exists, AlterPublicationStmt *stmt);
-static void PublicationDropSchemas(Oid pubid, List *schemas, char objectType,
-                                                                  bool missing_ok);
-
+static void PublicationDropTables(Oid pubid, List *rels, bool missing_ok);
+static void PublicationAddSchemas(Oid pubid, List *schemas, bool if_not_exists,
+                                                                 AlterPublicationStmt *stmt);
+static void PublicationDropSchemas(Oid pubid, List *schemas, bool missing_ok);
 
 static void
 parse_publication_options(ParseState *pstate,
@@ -98,7 +95,6 @@ parse_publication_options(ParseState *pstate,
        pubactions->pubupdate = true;
        pubactions->pubdelete = true;
        pubactions->pubtruncate = true;
-       pubactions->pubsequence = true;
        *publish_via_partition_root = false;
 
        /* Parse options */
@@ -123,7 +119,6 @@ parse_publication_options(ParseState *pstate,
                        pubactions->pubupdate = false;
                        pubactions->pubdelete = false;
                        pubactions->pubtruncate = false;
-                       pubactions->pubsequence = false;
 
                        *publish_given = true;
                        publish = defGetString(defel);
@@ -146,8 +141,6 @@ parse_publication_options(ParseState *pstate,
                                        pubactions->pubdelete = true;
                                else if (strcmp(publish_opt, "truncate") == 0)
                                        pubactions->pubtruncate = true;
-                               else if (strcmp(publish_opt, "sequence") == 0)
-                                       pubactions->pubsequence = true;
                                else
                                        ereport(ERROR,
                                                        (errcode(ERRCODE_SYNTAX_ERROR),
@@ -174,8 +167,7 @@ parse_publication_options(ParseState *pstate,
  */
 static void
 ObjectsInPublicationToOids(List *pubobjspec_list, ParseState *pstate,
-                                                  List **tables, List **sequences,
-                                                  List **tables_schemas, List **sequences_schemas)
+                                                  List **rels, List **schemas)
 {
        ListCell   *cell;
        PublicationObjSpec *pubobj;
@@ -193,22 +185,13 @@ ObjectsInPublicationToOids(List *pubobjspec_list, ParseState *pstate,
                switch (pubobj->pubobjtype)
                {
                        case PUBLICATIONOBJ_TABLE:
-                               *tables = lappend(*tables, pubobj->pubtable);
-                               break;
-                       case PUBLICATIONOBJ_SEQUENCE:
-                               *sequences = lappend(*sequences, pubobj->pubtable);
+                               *rels = lappend(*rels, pubobj->pubtable);
                                break;
                        case PUBLICATIONOBJ_TABLES_IN_SCHEMA:
                                schemaid = get_namespace_oid(pubobj->name, false);
 
                                /* Filter out duplicates if user specifies "sch1, sch1" */
-                               *tables_schemas = list_append_unique_oid(*tables_schemas, schemaid);
-                               break;
-                       case PUBLICATIONOBJ_SEQUENCES_IN_SCHEMA:
-                               schemaid = get_namespace_oid(pubobj->name, false);
-
-                               /* Filter out duplicates if user specifies "sch1, sch1" */
-                               *sequences_schemas = list_append_unique_oid(*sequences_schemas, schemaid);
+                               *schemas = list_append_unique_oid(*schemas, schemaid);
                                break;
                        case PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA:
                                search_path = fetch_search_path(false);
@@ -221,20 +204,7 @@ ObjectsInPublicationToOids(List *pubobjspec_list, ParseState *pstate,
                                list_free(search_path);
 
                                /* Filter out duplicates if user specifies "sch1, sch1" */
-                               *tables_schemas = list_append_unique_oid(*tables_schemas, schemaid);
-                               break;
-                       case PUBLICATIONOBJ_SEQUENCES_IN_CUR_SCHEMA:
-                               search_path = fetch_search_path(false);
-                               if (search_path == NIL) /* nothing valid in search_path? */
-                                       ereport(ERROR,
-                                                       errcode(ERRCODE_UNDEFINED_SCHEMA),
-                                                       errmsg("no schema has been selected for CURRENT_SCHEMA"));
-
-                               schemaid = linitial_oid(search_path);
-                               list_free(search_path);
-
-                               /* Filter out duplicates if user specifies "sch1, sch1" */
-                               *sequences_schemas = list_append_unique_oid(*sequences_schemas, schemaid);
+                               *schemas = list_append_unique_oid(*schemas, schemaid);
                                break;
                        default:
                                /* shouldn't happen */
@@ -270,14 +240,6 @@ CheckObjSchemaNotAlreadyInPublication(List *rels, List *schemaidlist,
                                                errdetail("Table \"%s\" in schema \"%s\" is already part of the publication, adding the same schema is not supported.",
                                                                  RelationGetRelationName(rel),
                                                                  get_namespace_name(relSchemaId)));
-                       else if (checkobjtype == PUBLICATIONOBJ_SEQUENCES_IN_SCHEMA)
-                               ereport(ERROR,
-                                               errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                                               errmsg("cannot add schema \"%s\" to publication",
-                                                          get_namespace_name(relSchemaId)),
-                                               errdetail("Sequence \"%s\" in schema \"%s\" is already part of the publication, adding the same schema is not supported.",
-                                                                 RelationGetRelationName(rel),
-                                                                 get_namespace_name(relSchemaId)));
                        else if (checkobjtype == PUBLICATIONOBJ_TABLE)
                                ereport(ERROR,
                                                errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -286,14 +248,6 @@ CheckObjSchemaNotAlreadyInPublication(List *rels, List *schemaidlist,
                                                           RelationGetRelationName(rel)),
                                                errdetail("Table's schema \"%s\" is already part of the publication or part of the specified schema list.",
                                                                  get_namespace_name(relSchemaId)));
-                       else if (checkobjtype == PUBLICATIONOBJ_SEQUENCE)
-                               ereport(ERROR,
-                                               errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                                               errmsg("cannot add relation \"%s.%s\" to publication",
-                                                          get_namespace_name(relSchemaId),
-                                                          RelationGetRelationName(rel)),
-                                               errdetail("Sequence's schema \"%s\" is already part of the publication or part of the specified schema list.",
-                                                                 get_namespace_name(relSchemaId)));
                }
        }
 }
@@ -799,7 +753,6 @@ CheckPubRelationColumnList(List *tables, const char *queryString,
 ObjectAddress
 CreatePublication(ParseState *pstate, CreatePublicationStmt *stmt)
 {
-       ListCell   *lc;
        Relation        rel;
        ObjectAddress myself;
        Oid                     puboid;
@@ -811,23 +764,8 @@ CreatePublication(ParseState *pstate, CreatePublicationStmt *stmt)
        bool            publish_via_partition_root_given;
        bool            publish_via_partition_root;
        AclResult       aclresult;
-       List       *tables = NIL;
-       List       *sequences = NIL;
-       List       *tables_schemaidlist = NIL;
-       List       *sequences_schemaidlist = NIL;
-
-       bool            for_all_tables = false;
-       bool            for_all_sequences = false;
-
-       /* Translate the list of object types (represented by strings) to bool flags. */
-       foreach (lc, stmt->for_all_objects)
-       {
-               char   *val = strVal(lfirst(lc));
-               if (strcmp(val, "tables") == 0)
-                       for_all_tables = true;
-               else if (strcmp(val, "sequences") == 0)
-                       for_all_sequences = true;
-       }
+       List       *relations = NIL;
+       List       *schemaidlist = NIL;
 
        /* must have CREATE privilege on database */
        aclresult = pg_database_aclcheck(MyDatabaseId, GetUserId(), ACL_CREATE);
@@ -836,17 +774,11 @@ CreatePublication(ParseState *pstate, CreatePublicationStmt *stmt)
                                           get_database_name(MyDatabaseId));
 
        /* FOR ALL TABLES requires superuser */
-       if (for_all_tables && !superuser())
+       if (stmt->for_all_tables && !superuser())
                ereport(ERROR,
                                (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
                                 errmsg("must be superuser to create FOR ALL TABLES publication")));
 
-       /* FOR ALL SEQUENCES requires superuser */
-       if (for_all_sequences && !superuser())
-               ereport(ERROR,
-                               (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
-                                errmsg("must be superuser to create FOR ALL SEQUENCES publication")));
-
        rel = table_open(PublicationRelationId, RowExclusiveLock);
 
        /* Check if name is used */
@@ -878,9 +810,7 @@ CreatePublication(ParseState *pstate, CreatePublicationStmt *stmt)
                                                                Anum_pg_publication_oid);
        values[Anum_pg_publication_oid - 1] = ObjectIdGetDatum(puboid);
        values[Anum_pg_publication_puballtables - 1] =
-               BoolGetDatum(for_all_tables);
-       values[Anum_pg_publication_puballsequences - 1] =
-               BoolGetDatum(for_all_sequences);
+               BoolGetDatum(stmt->for_all_tables);
        values[Anum_pg_publication_pubinsert - 1] =
                BoolGetDatum(pubactions.pubinsert);
        values[Anum_pg_publication_pubupdate - 1] =
@@ -889,8 +819,6 @@ CreatePublication(ParseState *pstate, CreatePublicationStmt *stmt)
                BoolGetDatum(pubactions.pubdelete);
        values[Anum_pg_publication_pubtruncate - 1] =
                BoolGetDatum(pubactions.pubtruncate);
-       values[Anum_pg_publication_pubsequence - 1] =
-               BoolGetDatum(pubactions.pubsequence);
        values[Anum_pg_publication_pubviaroot - 1] =
                BoolGetDatum(publish_via_partition_root);
 
@@ -908,42 +836,28 @@ CreatePublication(ParseState *pstate, CreatePublicationStmt *stmt)
        CommandCounterIncrement();
 
        /* Associate objects with the publication. */
-       if (for_all_tables || for_all_sequences)
+       if (stmt->for_all_tables)
        {
                /* Invalidate relcache so that publication info is rebuilt. */
                CacheInvalidateRelcacheAll();
        }
-
-       /*
-        * If the publication might have either tables or sequences (directly or
-        * through a schema), process that.
-        */
-       if (!for_all_tables || !for_all_sequences)
+       else
        {
-               ObjectsInPublicationToOids(stmt->pubobjects, pstate,
-                                                                  &tables, &sequences,
-                                                                  &tables_schemaidlist,
-                                                                  &sequences_schemaidlist);
+               ObjectsInPublicationToOids(stmt->pubobjects, pstate, &relations,
+                                                                  &schemaidlist);
 
                /* FOR ALL TABLES IN SCHEMA requires superuser */
-               if (list_length(tables_schemaidlist) > 0 && !superuser())
+               if (list_length(schemaidlist) > 0 && !superuser())
                        ereport(ERROR,
                                        errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
                                        errmsg("must be superuser to create FOR ALL TABLES IN SCHEMA publication"));
 
-               /* FOR ALL SEQUENCES IN SCHEMA requires superuser */
-               if (list_length(sequences_schemaidlist) > 0 && !superuser())
-                       ereport(ERROR,
-                                       errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
-                                       errmsg("must be superuser to create FOR ALL SEQUENCES IN SCHEMA publication"));
-
-               /* tables added directly */
-               if (list_length(tables) > 0)
+               if (list_length(relations) > 0)
                {
                        List       *rels;
 
-                       rels = OpenRelationList(tables, PUB_OBJTYPE_TABLE);
-                       CheckObjSchemaNotAlreadyInPublication(rels, tables_schemaidlist,
+                       rels = OpenTableList(relations);
+                       CheckObjSchemaNotAlreadyInPublication(rels, schemaidlist,
                                                                                                  PUBLICATIONOBJ_TABLE);
 
                        TransformPubWhereClauses(rels, pstate->p_sourcetext,
@@ -952,46 +866,18 @@ CreatePublication(ParseState *pstate, CreatePublicationStmt *stmt)
                        CheckPubRelationColumnList(rels, pstate->p_sourcetext,
                                                                   publish_via_partition_root);
 
-                       PublicationAddRelations(puboid, rels, true, NULL);
-                       CloseRelationList(rels);
+                       PublicationAddTables(puboid, rels, true, NULL);
+                       CloseTableList(rels);
                }
 
-               /* sequences added directly */
-               if (list_length(sequences) > 0)
-               {
-                       List       *rels;
-
-                       rels = OpenRelationList(sequences, PUB_OBJTYPE_SEQUENCE);
-                       CheckObjSchemaNotAlreadyInPublication(rels, sequences_schemaidlist,
-                                                                                                 PUBLICATIONOBJ_SEQUENCE);
-                       PublicationAddRelations(puboid, rels, true, NULL);
-                       CloseRelationList(rels);
-               }
-
-               /* tables added through a schema */
-               if (list_length(tables_schemaidlist) > 0)
+               if (list_length(schemaidlist) > 0)
                {
                        /*
                         * Schema lock is held until the publication is created to prevent
                         * concurrent schema deletion.
                         */
-                       LockSchemaList(tables_schemaidlist);
-                       PublicationAddSchemas(puboid,
-                                                                 tables_schemaidlist, PUB_OBJTYPE_TABLE,
-                                                                 true, NULL);
-               }
-
-               /* sequences added through a schema */
-               if (list_length(sequences_schemaidlist) > 0)
-               {
-                       /*
-                        * Schema lock is held until the publication is created to prevent
-                        * concurrent schema deletion.
-                        */
-                       LockSchemaList(sequences_schemaidlist);
-                       PublicationAddSchemas(puboid,
-                                                                 sequences_schemaidlist, PUB_OBJTYPE_SEQUENCE,
-                                                                 true, NULL);
+                       LockSchemaList(schemaidlist);
+                       PublicationAddSchemas(puboid, schemaidlist, true, NULL);
                }
        }
 
@@ -1055,7 +941,6 @@ AlterPublicationOptions(ParseState *pstate, AlterPublicationStmt *stmt,
                                                   AccessShareLock);
 
                root_relids = GetPublicationRelations(pubform->oid,
-                                                                                         PUB_OBJTYPE_TABLE,
                                                                                          PUBLICATION_PART_ROOT);
 
                foreach(lc, root_relids)
@@ -1135,9 +1020,6 @@ AlterPublicationOptions(ParseState *pstate, AlterPublicationStmt *stmt,
 
                values[Anum_pg_publication_pubtruncate - 1] = BoolGetDatum(pubactions.pubtruncate);
                replaces[Anum_pg_publication_pubtruncate - 1] = true;
-
-               values[Anum_pg_publication_pubsequence - 1] = BoolGetDatum(pubactions.pubsequence);
-               replaces[Anum_pg_publication_pubsequence - 1] = true;
        }
 
        if (publish_via_partition_root_given)
@@ -1157,7 +1039,7 @@ AlterPublicationOptions(ParseState *pstate, AlterPublicationStmt *stmt,
        pubform = (Form_pg_publication) GETSTRUCT(tup);
 
        /* Invalidate the relcache. */
-       if (pubform->puballtables || pubform->puballsequences)
+       if (pubform->puballtables)
        {
                CacheInvalidateRelcacheAll();
        }
@@ -1173,7 +1055,6 @@ AlterPublicationOptions(ParseState *pstate, AlterPublicationStmt *stmt,
                 */
                if (root_relids == NIL)
                        relids = GetPublicationRelations(pubform->oid,
-                                                                                        PUB_OBJTYPE_TABLE,
                                                                                         PUBLICATION_PART_ALL);
                else
                {
@@ -1187,20 +1068,7 @@ AlterPublicationOptions(ParseState *pstate, AlterPublicationStmt *stmt,
                                                                                                                lfirst_oid(lc));
                }
 
-               /* tables */
-               schemarelids = GetAllSchemaPublicationRelations(pubform->oid,
-                                                                                                               PUB_OBJTYPE_TABLE,
-                                                                                                               PUBLICATION_PART_ALL);
-               relids = list_concat_unique_oid(relids, schemarelids);
-
-               /* sequences */
-               relids = list_concat_unique_oid(relids,
-                                                                               GetPublicationRelations(pubform->oid,
-                                                                                       PUB_OBJTYPE_SEQUENCE,
-                                                                                       PUBLICATION_PART_ALL));
-
                schemarelids = GetAllSchemaPublicationRelations(pubform->oid,
-                                                                                                               PUB_OBJTYPE_SEQUENCE,
                                                                                                                PUBLICATION_PART_ALL);
                relids = list_concat_unique_oid(relids, schemarelids);
 
@@ -1255,7 +1123,7 @@ AlterPublicationTables(AlterPublicationStmt *stmt, HeapTuple tup,
        if (!tables && stmt->action != AP_SetObjects)
                return;
 
-       rels = OpenRelationList(tables, PUB_OBJTYPE_TABLE);
+       rels = OpenTableList(tables);
 
        if (stmt->action == AP_AddObjects)
        {
@@ -1265,9 +1133,7 @@ AlterPublicationTables(AlterPublicationStmt *stmt, HeapTuple tup,
                 * Check if the relation is member of the existing schema in the
                 * publication or member of the schema list specified.
                 */
-               schemas = list_concat_copy(schemaidlist,
-                                                                  GetPublicationSchemas(pubid,
-                                                                                                                PUB_OBJTYPE_TABLE));
+               schemas = list_concat_copy(schemaidlist, GetPublicationSchemas(pubid));
                CheckObjSchemaNotAlreadyInPublication(rels, schemas,
                                                                                          PUBLICATIONOBJ_TABLE);
 
@@ -1275,14 +1141,13 @@ AlterPublicationTables(AlterPublicationStmt *stmt, HeapTuple tup,
 
                CheckPubRelationColumnList(rels, queryString, pubform->pubviaroot);
 
-               PublicationAddRelations(pubid, rels, false, stmt);
+               PublicationAddTables(pubid, rels, false, stmt);
        }
        else if (stmt->action == AP_DropObjects)
-               PublicationDropRelations(pubid, rels, false);
+               PublicationDropTables(pubid, rels, false);
        else                                            /* AP_SetObjects */
        {
                List       *oldrelids = GetPublicationRelations(pubid,
-                                                                                                               PUB_OBJTYPE_TABLE,
                                                                                                                PUBLICATION_PART_ROOT);
                List       *delrels = NIL;
                ListCell   *oldlc;
@@ -1401,18 +1266,18 @@ AlterPublicationTables(AlterPublicationStmt *stmt, HeapTuple tup,
                }
 
                /* And drop them. */
-               PublicationDropRelations(pubid, delrels, true);
+               PublicationDropTables(pubid, delrels, true);
 
                /*
                 * Don't bother calculating the difference for adding, we'll catch and
                 * skip existing ones when doing catalog update.
                 */
-               PublicationAddRelations(pubid, rels, true, stmt);
+               PublicationAddTables(pubid, rels, true, stmt);
 
-               CloseRelationList(delrels);
+               CloseTableList(delrels);
        }
 
-       CloseRelationList(rels);
+       CloseTableList(rels);
 }
 
 /*
@@ -1422,8 +1287,7 @@ AlterPublicationTables(AlterPublicationStmt *stmt, HeapTuple tup,
  */
 static void
 AlterPublicationSchemas(AlterPublicationStmt *stmt,
-                                               HeapTuple tup, List *schemaidlist,
-                                               char objectType)
+                                               HeapTuple tup, List *schemaidlist)
 {
        Form_pg_publication pubform = (Form_pg_publication) GETSTRUCT(tup);
 
@@ -1445,20 +1309,20 @@ AlterPublicationSchemas(AlterPublicationStmt *stmt,
                List       *rels;
                List       *reloids;
 
-               reloids = GetPublicationRelations(pubform->oid, objectType, PUBLICATION_PART_ROOT);
+               reloids = GetPublicationRelations(pubform->oid, PUBLICATION_PART_ROOT);
                rels = OpenRelIdList(reloids);
 
                CheckObjSchemaNotAlreadyInPublication(rels, schemaidlist,
                                                                                          PUBLICATIONOBJ_TABLES_IN_SCHEMA);
 
-               CloseRelationList(rels);
-               PublicationAddSchemas(pubform->oid, schemaidlist, objectType, false, stmt);
+               CloseTableList(rels);
+               PublicationAddSchemas(pubform->oid, schemaidlist, false, stmt);
        }
        else if (stmt->action == AP_DropObjects)
-               PublicationDropSchemas(pubform->oid, schemaidlist, objectType, false);
+               PublicationDropSchemas(pubform->oid, schemaidlist, false);
        else                                            /* AP_SetObjects */
        {
-               List       *oldschemaids = GetPublicationSchemas(pubform->oid, objectType);
+               List       *oldschemaids = GetPublicationSchemas(pubform->oid);
                List       *delschemas = NIL;
 
                /* Identify which schemas should be dropped */
@@ -1471,13 +1335,13 @@ AlterPublicationSchemas(AlterPublicationStmt *stmt,
                LockSchemaList(delschemas);
 
                /* And drop them */
-               PublicationDropSchemas(pubform->oid, delschemas, objectType, true);
+               PublicationDropSchemas(pubform->oid, delschemas, true);
 
                /*
                 * Don't bother calculating the difference for adding, we'll catch and
                 * skip existing ones when doing catalog update.
                 */
-               PublicationAddSchemas(pubform->oid, schemaidlist, objectType, true, stmt);
+               PublicationAddSchemas(pubform->oid, schemaidlist, true, stmt);
        }
 }
 
@@ -1487,13 +1351,12 @@ AlterPublicationSchemas(AlterPublicationStmt *stmt,
  */
 static void
 CheckAlterPublication(AlterPublicationStmt *stmt, HeapTuple tup,
-                                         List *tables, List *tables_schemaidlist,
-                                         List *sequences, List *sequences_schemaidlist)
+                                         List *tables, List *schemaidlist)
 {
        Form_pg_publication pubform = (Form_pg_publication) GETSTRUCT(tup);
 
        if ((stmt->action == AP_AddObjects || stmt->action == AP_SetObjects) &&
-               (tables_schemaidlist || sequences_schemaidlist) && !superuser())
+               schemaidlist && !superuser())
                ereport(ERROR,
                                (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
                                 errmsg("must be superuser to add or set schemas")));
@@ -1502,24 +1365,13 @@ CheckAlterPublication(AlterPublicationStmt *stmt, HeapTuple tup,
         * Check that user is allowed to manipulate the publication tables in
         * schema
         */
-       if (tables_schemaidlist && pubform->puballtables)
+       if (schemaidlist && pubform->puballtables)
                ereport(ERROR,
                                (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
                                 errmsg("publication \"%s\" is defined as FOR ALL TABLES",
                                                NameStr(pubform->pubname)),
                                 errdetail("Tables from schema cannot be added to, dropped from, or set on FOR ALL TABLES publications.")));
 
-       /*
-        * Check that user is allowed to manipulate the publication sequences in
-        * schema
-        */
-       if (sequences_schemaidlist && pubform->puballsequences)
-               ereport(ERROR,
-                               (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-                                errmsg("publication \"%s\" is defined as FOR ALL SEQUENCES",
-                                               NameStr(pubform->pubname)),
-                                errdetail("Sequences from schema cannot be added to, dropped from, or set on FOR ALL SEQUENCES publications.")));
-
        /* Check that user is allowed to manipulate the publication tables. */
        if (tables && pubform->puballtables)
                ereport(ERROR,
@@ -1527,108 +1379,6 @@ CheckAlterPublication(AlterPublicationStmt *stmt, HeapTuple tup,
                                 errmsg("publication \"%s\" is defined as FOR ALL TABLES",
                                                NameStr(pubform->pubname)),
                                 errdetail("Tables cannot be added to or dropped from FOR ALL TABLES publications.")));
-
-       /* Check that user is allowed to manipulate the publication sequences. */
-       if (sequences && pubform->puballsequences)
-               ereport(ERROR,
-                               (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-                                errmsg("publication \"%s\" is defined as FOR ALL SEQUENCES",
-                                               NameStr(pubform->pubname)),
-                                errdetail("Sequences cannot be added to or dropped from FOR ALL SEQUENCES publications.")));
-}
-
-/*
- * Add or remove sequence to/from publication.
- */
-static void
-AlterPublicationSequences(AlterPublicationStmt *stmt, HeapTuple tup,
-                                                 List *sequences, List *schemaidlist)
-{
-       List       *rels = NIL;
-       Form_pg_publication pubform = (Form_pg_publication) GETSTRUCT(tup);
-       Oid                     pubid = pubform->oid;
-
-       /*
-        * It is quite possible that for the SET case user has not specified any
-        * tables in which case we need to remove all the existing tables.
-        */
-       if (!sequences && stmt->action != AP_SetObjects)
-               return;
-
-       rels = OpenRelationList(sequences, PUB_OBJTYPE_SEQUENCE);
-
-       if (stmt->action == AP_AddObjects)
-       {
-               List       *schemas = NIL;
-
-               /*
-                * Check if the relation is member of the existing schema in the
-                * publication or member of the schema list specified.
-                */
-               schemas = list_concat_copy(schemaidlist,
-                                                                  GetPublicationSchemas(pubid,
-                                                                                                                PUB_OBJTYPE_SEQUENCE));
-               CheckObjSchemaNotAlreadyInPublication(rels, schemas,
-                                                                                         PUBLICATIONOBJ_SEQUENCE);
-               PublicationAddRelations(pubid, rels, false, stmt);
-       }
-       else if (stmt->action == AP_DropObjects)
-               PublicationDropRelations(pubid, rels, false);
-       else                                            /* DEFELEM_SET */
-       {
-               List       *oldrelids = GetPublicationRelations(pubid,
-                                                                                                               PUB_OBJTYPE_SEQUENCE,
-                                                                                                               PUBLICATION_PART_ROOT);
-               List       *delrels = NIL;
-               ListCell   *oldlc;
-
-               CheckObjSchemaNotAlreadyInPublication(rels, schemaidlist,
-                                                                                         PUBLICATIONOBJ_SEQUENCE);
-
-               /* Calculate which relations to drop. */
-               foreach(oldlc, oldrelids)
-               {
-                       Oid                     oldrelid = lfirst_oid(oldlc);
-                       ListCell   *newlc;
-                       PublicationRelInfo *oldrel;
-                       bool            found = false;
-
-                       foreach(newlc, rels)
-                       {
-                               PublicationRelInfo *newpubrel;
-
-                               newpubrel = (PublicationRelInfo *) lfirst(newlc);
-                               if (RelationGetRelid(newpubrel->relation) == oldrelid)
-                               {
-                                       found = true;
-                                       break;
-                               }
-                       }
-                       /* Not yet in the list, open it and add to the list */
-                       if (!found)
-                       {
-                               oldrel = palloc(sizeof(PublicationRelInfo));
-                               oldrel->whereClause = NULL;
-                               oldrel->columns = NULL;
-                               oldrel->relation = table_open(oldrelid,
-                                                                                         ShareUpdateExclusiveLock);
-                               delrels = lappend(delrels, oldrel);
-                       }
-               }
-
-               /* And drop them. */
-               PublicationDropRelations(pubid, delrels, true);
-
-               /*
-                * Don't bother calculating the difference for adding, we'll catch and
-                * skip existing ones when doing catalog update.
-                */
-               PublicationAddRelations(pubid, rels, true, stmt);
-
-               CloseRelationList(delrels);
-       }
-
-       CloseRelationList(rels);
 }
 
 /*
@@ -1666,20 +1416,14 @@ AlterPublication(ParseState *pstate, AlterPublicationStmt *stmt)
                AlterPublicationOptions(pstate, stmt, rel, tup);
        else
        {
-               List       *tables = NIL;
-               List       *sequences = NIL;
-               List       *tables_schemaidlist = NIL;
-               List       *sequences_schemaidlist = NIL;
+               List       *relations = NIL;
+               List       *schemaidlist = NIL;
                Oid                     pubid = pubform->oid;
 
-               ObjectsInPublicationToOids(stmt->pubobjects, pstate,
-                                                                  &tables, &sequences,
-                                                                  &tables_schemaidlist,
-                                                                  &sequences_schemaidlist);
+               ObjectsInPublicationToOids(stmt->pubobjects, pstate, &relations,
+                                                                  &schemaidlist);
 
-               CheckAlterPublication(stmt, tup,
-                                                         tables, tables_schemaidlist,
-                                                         sequences, sequences_schemaidlist);
+               CheckAlterPublication(stmt, tup, relations, schemaidlist);
 
                heap_freetuple(tup);
 
@@ -1707,16 +1451,9 @@ AlterPublication(ParseState *pstate, AlterPublicationStmt *stmt)
                                        errmsg("publication \"%s\" does not exist",
                                                   stmt->pubname));
 
-               AlterPublicationTables(stmt, tup, tables, tables_schemaidlist,
+               AlterPublicationTables(stmt, tup, relations, schemaidlist,
                                                           pstate->p_sourcetext);
-
-               AlterPublicationSequences(stmt, tup, sequences, sequences_schemaidlist);
-
-               AlterPublicationSchemas(stmt, tup, tables_schemaidlist,
-                                                               PUB_OBJTYPE_TABLE);
-
-               AlterPublicationSchemas(stmt, tup, sequences_schemaidlist,
-                                                               PUB_OBJTYPE_SEQUENCE);
+               AlterPublicationSchemas(stmt, tup, schemaidlist);
        }
 
        /* Cleanup. */
@@ -1784,7 +1521,7 @@ RemovePublicationById(Oid pubid)
        pubform = (Form_pg_publication) GETSTRUCT(tup);
 
        /* Invalidate relcache so that publication info is rebuilt. */
-       if (pubform->puballtables || pubform->puballsequences)
+       if (pubform->puballtables)
                CacheInvalidateRelcacheAll();
 
        CatalogTupleDelete(rel, &tup->t_self);
@@ -1820,7 +1557,6 @@ RemovePublicationSchemaById(Oid psoid)
         * partitions.
         */
        schemaRels = GetSchemaPublicationRelations(pubsch->pnnspid,
-                                                                                          pubsch->pntype,
                                                                                           PUBLICATION_PART_ALL);
        InvalidatePublicationRels(schemaRels);
 
@@ -1863,10 +1599,10 @@ OpenRelIdList(List *relids)
  * add them to a publication.
  */
 static List *
-OpenRelationList(List *rels, char objectType)
+OpenTableList(List *tables)
 {
        List       *relids = NIL;
-       List       *result = NIL;
+       List       *rels = NIL;
        ListCell   *lc;
        List       *relids_with_rf = NIL;
        List       *relids_with_collist = NIL;
@@ -1874,35 +1610,19 @@ OpenRelationList(List *rels, char objectType)
        /*
         * Open, share-lock, and check all the explicitly-specified relations
         */
-       foreach(lc, rels)
+       foreach(lc, tables)
        {
                PublicationTable *t = lfirst_node(PublicationTable, lc);
                bool            recurse = t->relation->inh;
                Relation        rel;
                Oid                     myrelid;
                PublicationRelInfo *pub_rel;
-               char            myrelkind;
 
                /* Allow query cancel in case this takes a long time */
                CHECK_FOR_INTERRUPTS();
 
                rel = table_openrv(t->relation, ShareUpdateExclusiveLock);
                myrelid = RelationGetRelid(rel);
-               myrelkind = get_rel_relkind(myrelid);
-
-               /*
-                * Make sure the relkind matches the expected object type. This may
-                * happen e.g. when adding a sequence using ADD TABLE or a table
-                * using ADD SEQUENCE).
-                *
-                * XXX We let through unsupported object types (views etc.). Those
-                * will be caught later in check_publication_add_relation.
-                */
-               if (pub_get_object_type_for_relkind(myrelkind) != PUB_OBJTYPE_UNSUPPORTED &&
-                       pub_get_object_type_for_relkind(myrelkind) != objectType)
-                       ereport(ERROR,
-                                       errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                                       errmsg("object type does not match type expected by command"));
 
                /*
                 * Filter out duplicates if user specifies "foo, foo".
@@ -1935,7 +1655,7 @@ OpenRelationList(List *rels, char objectType)
                pub_rel->relation = rel;
                pub_rel->whereClause = t->whereClause;
                pub_rel->columns = t->columns;
-               result = lappend(result, pub_rel);
+               rels = lappend(rels, pub_rel);
                relids = lappend_oid(relids, myrelid);
 
                if (t->whereClause)
@@ -2004,9 +1724,10 @@ OpenRelationList(List *rels, char objectType)
                                pub_rel->relation = rel;
                                /* child inherits WHERE clause from parent */
                                pub_rel->whereClause = t->whereClause;
+
                                /* child inherits column list from parent */
                                pub_rel->columns = t->columns;
-                               result = lappend(result, pub_rel);
+                               rels = lappend(rels, pub_rel);
                                relids = lappend_oid(relids, childrelid);
 
                                if (t->whereClause)
@@ -2021,14 +1742,14 @@ OpenRelationList(List *rels, char objectType)
        list_free(relids);
        list_free(relids_with_rf);
 
-       return result;
+       return rels;
 }
 
 /*
  * Close all relations in the list.
  */
 static void
-CloseRelationList(List *rels)
+CloseTableList(List *rels)
 {
        ListCell   *lc;
 
@@ -2076,12 +1797,12 @@ LockSchemaList(List *schemalist)
  * Add listed tables to the publication.
  */
 static void
-PublicationAddRelations(Oid pubid, List *rels, bool if_not_exists,
+PublicationAddTables(Oid pubid, List *rels, bool if_not_exists,
                                         AlterPublicationStmt *stmt)
 {
        ListCell   *lc;
 
-       Assert(!stmt || !stmt->for_all_objects);
+       Assert(!stmt || !stmt->for_all_tables);
 
        foreach(lc, rels)
        {
@@ -2110,7 +1831,7 @@ PublicationAddRelations(Oid pubid, List *rels, bool if_not_exists,
  * Remove listed tables from the publication.
  */
 static void
-PublicationDropRelations(Oid pubid, List *rels, bool missing_ok)
+PublicationDropTables(Oid pubid, List *rels, bool missing_ok)
 {
        ObjectAddress obj;
        ListCell   *lc;
@@ -2155,19 +1876,19 @@ PublicationDropRelations(Oid pubid, List *rels, bool missing_ok)
  * Add listed schemas to the publication.
  */
 static void
-PublicationAddSchemas(Oid pubid, List *schemas, char objectType,
-                                         bool if_not_exists, AlterPublicationStmt *stmt)
+PublicationAddSchemas(Oid pubid, List *schemas, bool if_not_exists,
+                                         AlterPublicationStmt *stmt)
 {
        ListCell   *lc;
 
-       Assert(!stmt || !stmt->for_all_objects);
+       Assert(!stmt || !stmt->for_all_tables);
 
        foreach(lc, schemas)
        {
                Oid                     schemaid = lfirst_oid(lc);
                ObjectAddress obj;
 
-               obj = publication_add_schema(pubid, schemaid, objectType, if_not_exists);
+               obj = publication_add_schema(pubid, schemaid, if_not_exists);
                if (stmt)
                {
                        EventTriggerCollectSimpleCommand(obj, InvalidObjectAddress,
@@ -2183,7 +1904,7 @@ PublicationAddSchemas(Oid pubid, List *schemas, char objectType,
  * Remove listed schemas from the publication.
  */
 static void
-PublicationDropSchemas(Oid pubid, List *schemas, char objectType, bool missing_ok)
+PublicationDropSchemas(Oid pubid, List *schemas, bool missing_ok)
 {
        ObjectAddress obj;
        ListCell   *lc;
@@ -2193,11 +1914,10 @@ PublicationDropSchemas(Oid pubid, List *schemas, char objectType, bool missing_o
        {
                Oid                     schemaid = lfirst_oid(lc);
 
-               psid = GetSysCacheOid3(PUBLICATIONNAMESPACEMAP,
+               psid = GetSysCacheOid2(PUBLICATIONNAMESPACEMAP,
                                                           Anum_pg_publication_namespace_oid,
                                                           ObjectIdGetDatum(schemaid),
-                                                          ObjectIdGetDatum(pubid),
-                                                          CharGetDatum(objectType));
+                                                          ObjectIdGetDatum(pubid));
                if (!OidIsValid(psid))
                {
                        if (missing_ok)
@@ -2252,13 +1972,6 @@ AlterPublicationOwner_internal(Relation rel, HeapTuple tup, Oid newOwnerId)
                                                        NameStr(form->pubname)),
                                         errhint("The owner of a FOR ALL TABLES publication must be a superuser.")));
 
-               if (form->puballsequences && !superuser_arg(newOwnerId))
-                       ereport(ERROR,
-                                       (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
-                                        errmsg("permission denied to change owner of publication \"%s\"",
-                                                       NameStr(form->pubname)),
-                                        errhint("The owner of a FOR ALL SEQUENCES publication must be a superuser.")));
-
                if (!superuser_arg(newOwnerId) && is_schema_publication(form->oid))
                        ereport(ERROR,
                                        (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
index 47f62c28d4252118b74ba76370a99fcf4144f9c1..ddf219b21f5e78934c9c80449db2b8ccf82ac891 100644 (file)
@@ -332,160 +332,6 @@ ResetSequence(Oid seq_relid)
        relation_close(seq_rel, NoLock);
 }
 
-/*
- * Update the sequence state by modifying the existing sequence data row.
- *
- * This keeps the same relfilenode, so the behavior is non-transactional.
- */
-static void
-SetSequence_non_transactional(Oid seqrelid, int64 last_value, int64 log_cnt, bool is_called)
-{
-       SeqTable        elm;
-       Relation        seqrel;
-       Buffer          buf;
-       HeapTupleData seqdatatuple;
-       Form_pg_sequence_data seq;
-
-       /* open and lock sequence */
-       init_sequence(seqrelid, &elm, &seqrel);
-
-       /* lock page' buffer and read tuple */
-       seq = read_seq_tuple(seqrel, &buf, &seqdatatuple);
-
-       /* check the comment above nextval_internal()'s equivalent call. */
-       if (RelationNeedsWAL(seqrel))
-       {
-               GetTopTransactionId();
-
-               if (XLogLogicalInfoActive())
-                       GetCurrentTransactionId();
-       }
-
-       /* ready to change the on-disk (or really, in-buffer) tuple */
-       START_CRIT_SECTION();
-
-       seq->last_value = last_value;
-       seq->is_called = is_called;
-       seq->log_cnt = log_cnt;
-
-       MarkBufferDirty(buf);
-
-       /* XLOG stuff */
-       if (RelationNeedsWAL(seqrel))
-       {
-               xl_seq_rec      xlrec;
-               XLogRecPtr      recptr;
-               Page            page = BufferGetPage(buf);
-
-               XLogBeginInsert();
-               XLogRegisterBuffer(0, buf, REGBUF_WILL_INIT);
-
-               xlrec.node = seqrel->rd_node;
-               xlrec.created = false;
-
-               XLogRegisterData((char *) &xlrec, sizeof(xl_seq_rec));
-               XLogRegisterData((char *) seqdatatuple.t_data, seqdatatuple.t_len);
-
-               recptr = XLogInsert(RM_SEQ_ID, XLOG_SEQ_LOG);
-
-               PageSetLSN(page, recptr);
-       }
-
-       END_CRIT_SECTION();
-
-       UnlockReleaseBuffer(buf);
-
-       /* Clear local cache so that we don't think we have cached numbers */
-       /* Note that we do not change the currval() state */
-       elm->cached = elm->last;
-
-       relation_close(seqrel, NoLock);
-}
-
-/*
- * Update the sequence state by creating a new relfilenode.
- *
- * This creates a new relfilenode, to allow transactional behavior.
- */
-static void
-SetSequence_transactional(Oid seq_relid, int64 last_value, int64 log_cnt, bool is_called)
-{
-       SeqTable        elm;
-       Relation        seqrel;
-       Buffer          buf;
-       HeapTupleData seqdatatuple;
-       Form_pg_sequence_data seq;
-       HeapTuple       tuple;
-
-       /* open and lock sequence */
-       init_sequence(seq_relid, &elm, &seqrel);
-
-       /* lock page' buffer and read tuple */
-       seq = read_seq_tuple(seqrel, &buf, &seqdatatuple);
-
-       /* Copy the existing sequence tuple. */
-       tuple = heap_copytuple(&seqdatatuple);
-
-       /* Now we're done with the old page */
-       UnlockReleaseBuffer(buf);
-
-       /*
-        * Modify the copied tuple to update the sequence state (similar to what
-        * ResetSequence does).
-        */
-       seq = (Form_pg_sequence_data) GETSTRUCT(tuple);
-       seq->last_value = last_value;
-       seq->is_called = is_called;
-       seq->log_cnt = log_cnt;
-
-       /*
-        * Create a new storage file for the sequence - this is needed for the
-        * transactional behavior.
-        */
-       RelationSetNewRelfilenode(seqrel, seqrel->rd_rel->relpersistence);
-
-       /*
-        * Ensure sequence's relfrozenxid is at 0, since it won't contain any
-        * unfrozen XIDs.  Same with relminmxid, since a sequence will never
-        * contain multixacts.
-        */
-       Assert(seqrel->rd_rel->relfrozenxid == InvalidTransactionId);
-       Assert(seqrel->rd_rel->relminmxid == InvalidMultiXactId);
-
-       /*
-        * Insert the modified tuple into the new storage file. This does all the
-        * necessary WAL-logging etc.
-        */
-       fill_seq_with_data(seqrel, tuple);
-
-       /* Clear local cache so that we don't think we have cached numbers */
-       /* Note that we do not change the currval() state */
-       elm->cached = elm->last;
-
-       relation_close(seqrel, NoLock);
-}
-
-/*
- * Set a sequence to a specified internal state.
- *
- * The change is made transactionally, so that on failure of the current
- * transaction, the sequence will be restored to its previous state.
- * We do that by creating a whole new relfilenode for the sequence; so this
- * works much like the rewriting forms of ALTER TABLE.
- *
- * Caller is assumed to have acquired AccessExclusiveLock on the sequence,
- * which must not be released until end of transaction.  Caller is also
- * responsible for permissions checking.
- */
-void
-SetSequence(Oid seq_relid, bool transactional, int64 last_value, int64 log_cnt, bool is_called)
-{
-       if (transactional)
-               SetSequence_transactional(seq_relid, last_value, log_cnt, is_called);
-       else
-               SetSequence_non_transactional(seq_relid, last_value, log_cnt, is_called);
-}
-
 /*
  * Initialize a sequence's relation with the specified tuple as content
  *
@@ -552,13 +398,8 @@ fill_seq_fork_with_data(Relation rel, HeapTuple tuple, ForkNumber forkNum)
 
        /* check the comment above nextval_internal()'s equivalent call. */
        if (RelationNeedsWAL(rel))
-       {
                GetTopTransactionId();
 
-               if (XLogLogicalInfoActive())
-                       GetCurrentTransactionId();
-       }
-
        START_CRIT_SECTION();
 
        MarkBufferDirty(buf);
@@ -578,7 +419,6 @@ fill_seq_fork_with_data(Relation rel, HeapTuple tuple, ForkNumber forkNum)
                XLogRegisterBuffer(0, buf, REGBUF_WILL_INIT);
 
                xlrec.node = rel->rd_node;
-               xlrec.created = true;
 
                XLogRegisterData((char *) &xlrec, sizeof(xl_seq_rec));
                XLogRegisterData((char *) tuple->t_data, tuple->t_len);
@@ -958,28 +798,10 @@ nextval_internal(Oid relid, bool check_permissions)
         * It's sufficient to ensure the toplevel transaction has an xid, no need
         * to assign xids subxacts, that'll already trigger an appropriate wait.
         * (Have to do that here, so we're outside the critical section)
-        *
-        * We have to ensure we have a proper XID, which will be included in
-        * the XLOG record by XLogRecordAssemble. Otherwise the first nextval()
-        * in a subxact (without any preceding changes) would get XID 0, and it
-        * would then be impossible to decide which top xact it belongs to.
-        * It'd also trigger assert in DecodeSequence. We only do that with
-        * wal_level=logical, though.
-        *
-        * XXX This might seem unnecessary, because if there's no XID the xact
-        * couldn't have done anything important yet, e.g. it could not have
-        * created a sequence. But that's incorrect, because of subxacts. The
-        * current subtransaction might not have done anything yet (thus no XID),
-        * but an earlier one might have created the sequence.
         */
        if (logit && RelationNeedsWAL(seqrel))
-       {
                GetTopTransactionId();
 
-               if (XLogLogicalInfoActive())
-                       GetCurrentTransactionId();
-       }
-
        /* ready to change the on-disk (or really, in-buffer) tuple */
        START_CRIT_SECTION();
 
@@ -1015,7 +837,6 @@ nextval_internal(Oid relid, bool check_permissions)
                seq->log_cnt = 0;
 
                xlrec.node = seqrel->rd_node;
-               xlrec.created = false;
 
                XLogRegisterData((char *) &xlrec, sizeof(xl_seq_rec));
                XLogRegisterData((char *) seqdatatuple.t_data, seqdatatuple.t_len);
@@ -1181,13 +1002,8 @@ do_setval(Oid relid, int64 next, bool iscalled)
 
        /* check the comment above nextval_internal()'s equivalent call. */
        if (RelationNeedsWAL(seqrel))
-       {
                GetTopTransactionId();
 
-               if (XLogLogicalInfoActive())
-                       GetCurrentTransactionId();
-       }
-
        /* ready to change the on-disk (or really, in-buffer) tuple */
        START_CRIT_SECTION();
 
@@ -1208,8 +1024,6 @@ do_setval(Oid relid, int64 next, bool iscalled)
                XLogRegisterBuffer(0, buf, REGBUF_WILL_INIT);
 
                xlrec.node = seqrel->rd_node;
-               xlrec.created = false;
-
                XLogRegisterData((char *) &xlrec, sizeof(xl_seq_rec));
                XLogRegisterData((char *) seqdatatuple.t_data, seqdatatuple.t_len);
 
index 057ab4b6a3f300130234e5d1a19f2568ee5aa7d2..2e8d8afead8322cdcd5812cca5aef8b7987869af 100644 (file)
@@ -90,7 +90,6 @@ typedef struct SubOpts
 } SubOpts;
 
 static List *fetch_table_list(WalReceiverConn *wrconn, List *publications);
-static List *fetch_sequence_list(WalReceiverConn *wrconn, List *publications);
 static void check_duplicates_in_publist(List *publist, Datum *datums);
 static List *merge_publications(List *oldpublist, List *newpublist, bool addpub, const char *subname);
 static void ReportSlotConnectionError(List *rstates, Oid subid, char *slotname, char *err);
@@ -639,9 +638,9 @@ CreateSubscription(ParseState *pstate, CreateSubscriptionStmt *stmt,
        {
                char       *err;
                WalReceiverConn *wrconn;
-               List       *relations;
+               List       *tables;
                ListCell   *lc;
-               char            sync_state;
+               char            table_state;
 
                /* Try to connect to the publisher. */
                wrconn = walrcv_connect(conninfo, true, stmt->subname, &err);
@@ -658,17 +657,14 @@ CreateSubscription(ParseState *pstate, CreateSubscriptionStmt *stmt,
                         * Set sync state based on if we were asked to do data copy or
                         * not.
                         */
-                       sync_state = opts.copy_data ? SUBREL_STATE_INIT : SUBREL_STATE_READY;
+                       table_state = opts.copy_data ? SUBREL_STATE_INIT : SUBREL_STATE_READY;
 
                        /*
-                        * Get the table and sequence list from publisher and build
-                        * local relation sync status info.
+                        * Get the table list from publisher and build local table status
+                        * info.
                         */
-                       relations = fetch_table_list(wrconn, publications);
-                       relations = list_concat(relations,
-                                                                       fetch_sequence_list(wrconn, publications));
-
-                       foreach(lc, relations)
+                       tables = fetch_table_list(wrconn, publications);
+                       foreach(lc, tables)
                        {
                                RangeVar   *rv = (RangeVar *) lfirst(lc);
                                Oid                     relid;
@@ -679,7 +675,7 @@ CreateSubscription(ParseState *pstate, CreateSubscriptionStmt *stmt,
                                CheckSubscriptionRelkind(get_rel_relkind(relid),
                                                                                 rv->schemaname, rv->relname);
 
-                               AddSubscriptionRelState(subid, relid, sync_state,
+                               AddSubscriptionRelState(subid, relid, table_state,
                                                                                InvalidXLogRecPtr);
                        }
 
@@ -705,12 +701,12 @@ CreateSubscription(ParseState *pstate, CreateSubscriptionStmt *stmt,
                                 *
                                 * Note that if tables were specified but copy_data is false
                                 * then it is safe to enable two_phase up-front because those
-                                * relations are already initially in READY state. When the
-                                * subscription has no relations, we leave the twophase state
-                                * as PENDING, to allow ALTER SUBSCRIPTION ... REFRESH
+                                * tables are already initially in READY state. When the
+                                * subscription has no tables, we leave the twophase state as
+                                * PENDING, to allow ALTER SUBSCRIPTION ... REFRESH
                                 * PUBLICATION to work.
                                 */
-                               if (opts.twophase && !opts.copy_data && relations != NIL)
+                               if (opts.twophase && !opts.copy_data && tables != NIL)
                                        twophase_enabled = true;
 
                                walrcv_create_slot(wrconn, opts.slot_name, false, twophase_enabled,
@@ -786,10 +782,8 @@ AlterSubscription_refresh(Subscription *sub, bool copy_data,
                if (validate_publications)
                        check_publications(wrconn, validate_publications);
 
-               /* Get the list of relations from publisher. */
+               /* Get the table list from publisher. */
                pubrel_names = fetch_table_list(wrconn, sub->publications);
-               pubrel_names = list_concat(pubrel_names,
-                                                                  fetch_sequence_list(wrconn, sub->publications));
 
                /* Get local table list. */
                subrel_states = GetSubscriptionRelations(sub->oid);
@@ -1813,75 +1807,6 @@ fetch_table_list(WalReceiverConn *wrconn, List *publications)
        return tablelist;
 }
 
-/*
- * Get the list of sequences which belong to specified publications on the
- * publisher connection.
- */
-static List *
-fetch_sequence_list(WalReceiverConn *wrconn, List *publications)
-{
-       WalRcvExecResult *res;
-       StringInfoData cmd;
-       TupleTableSlot *slot;
-       Oid                     tableRow[2] = {TEXTOID, TEXTOID};
-       ListCell   *lc;
-       bool            first;
-       List       *tablelist = NIL;
-
-       Assert(list_length(publications) > 0);
-
-       initStringInfo(&cmd);
-       appendStringInfoString(&cmd, "SELECT DISTINCT s.schemaname, s.sequencename\n"
-                                                  "  FROM pg_catalog.pg_publication_sequences s\n"
-                                                  " WHERE s.pubname IN (");
-       first = true;
-       foreach(lc, publications)
-       {
-               char       *pubname = strVal(lfirst(lc));
-
-               if (first)
-                       first = false;
-               else
-                       appendStringInfoString(&cmd, ", ");
-
-               appendStringInfoString(&cmd, quote_literal_cstr(pubname));
-       }
-       appendStringInfoChar(&cmd, ')');
-
-       res = walrcv_exec(wrconn, cmd.data, 2, tableRow);
-       pfree(cmd.data);
-
-       if (res->status != WALRCV_OK_TUPLES)
-               ereport(ERROR,
-                               (errmsg("could not receive list of replicated sequences from the publisher: %s",
-                                               res->err)));
-
-       /* Process sequences. */
-       slot = MakeSingleTupleTableSlot(res->tupledesc, &TTSOpsMinimalTuple);
-       while (tuplestore_gettupleslot(res->tuplestore, true, false, slot))
-       {
-               char       *nspname;
-               char       *relname;
-               bool            isnull;
-               RangeVar   *rv;
-
-               nspname = TextDatumGetCString(slot_getattr(slot, 1, &isnull));
-               Assert(!isnull);
-               relname = TextDatumGetCString(slot_getattr(slot, 2, &isnull));
-               Assert(!isnull);
-
-               rv = makeRangeVar(nspname, relname, -1);
-               tablelist = lappend(tablelist, rv);
-
-               ExecClearTuple(slot);
-       }
-       ExecDropSingleTupleTableSlot(slot);
-
-       walrcv_clear_result(res);
-
-       return tablelist;
-}
-
 /*
  * This is to report the connection failure while dropping replication slots.
  * Here, we report the WARNING for all tablesync slots so that user can drop
index 4dd545cdd20cff9cc2962ce81c8ba524201bd1e1..90edd0bb97d7dde7425d0e2c5cf21687b77328a9 100644 (file)
@@ -42,7 +42,6 @@
 #include "catalog/pg_inherits.h"
 #include "catalog/pg_namespace.h"
 #include "catalog/pg_opclass.h"
-#include "catalog/pg_publication_namespace.h"
 #include "catalog/pg_statistic_ext.h"
 #include "catalog/pg_tablespace.h"
 #include "catalog/pg_trigger.h"
@@ -16409,14 +16408,11 @@ AlterTableNamespace(AlterObjectSchemaStmt *stmt, Oid *oldschema)
         * Check that setting the relation to a different schema won't result in a
         * publication having both a schema and the same schema's table, as this
         * is not supported.
-        *
-        * XXX We do this for tables and sequences, but it's better to keep the two
-        * blocks separate, to make the strings easier to translate.
         */
        if (stmt->objectType == OBJECT_TABLE)
        {
                ListCell   *lc;
-               List       *schemaPubids = GetSchemaPublications(nspOid, PUB_OBJTYPE_TABLE);
+               List       *schemaPubids = GetSchemaPublications(nspOid);
                List       *relPubids = GetRelationPublications(RelationGetRelid(rel));
 
                foreach(lc, relPubids)
@@ -16434,27 +16430,6 @@ AlterTableNamespace(AlterObjectSchemaStmt *stmt, Oid *oldschema)
                                                                  get_publication_name(pubid, false)));
                }
        }
-       else if (stmt->objectType == OBJECT_SEQUENCE)
-       {
-               ListCell   *lc;
-               List       *schemaPubids = GetSchemaPublications(nspOid, PUB_OBJTYPE_SEQUENCE);
-               List       *relPubids = GetRelationPublications(RelationGetRelid(rel));
-
-               foreach(lc, relPubids)
-               {
-                       Oid                     pubid = lfirst_oid(lc);
-
-                       if (list_member_oid(schemaPubids, pubid))
-                               ereport(ERROR,
-                                               errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                                               errmsg("cannot move sequence \"%s\" to schema \"%s\"",
-                                                          RelationGetRelationName(rel), stmt->newschema),
-                                               errdetail("The schema \"%s\" and same schema's sequence \"%s\" cannot be part of the same publication \"%s\".",
-                                                                 stmt->newschema,
-                                                                 RelationGetRelationName(rel),
-                                                                 get_publication_name(pubid, false)));
-               }
-       }
 
        /* common checks on switching namespaces */
        CheckSetNamespace(oldNspOid, nspOid);
index 228e3547012f21eb21cda9b5bc3890a4190fe858..27989bd723ddf8f7a197f230bdc8cb1a7ced2a2d 100644 (file)
@@ -649,9 +649,7 @@ void
 CheckSubscriptionRelkind(char relkind, const char *nspname,
                                                 const char *relname)
 {
-       if (relkind != RELKIND_RELATION &&
-               relkind != RELKIND_PARTITIONED_TABLE &&
-               relkind != RELKIND_SEQUENCE)
+       if (relkind != RELKIND_RELATION && relkind != RELKIND_PARTITIONED_TABLE)
                ereport(ERROR,
                                (errcode(ERRCODE_WRONG_OBJECT_TYPE),
                                 errmsg("cannot use relation \"%s.%s\" as logical replication target",
index 46a1943d97a42bacfcf811713d3d5e847c00fdf5..1585cf2d58ceba1ce5c417a9de59bcaaf155cc8c 100644 (file)
@@ -5390,7 +5390,7 @@ _copyCreatePublicationStmt(const CreatePublicationStmt *from)
        COPY_STRING_FIELD(pubname);
        COPY_NODE_FIELD(options);
        COPY_NODE_FIELD(pubobjects);
-       COPY_NODE_FIELD(for_all_objects);
+       COPY_SCALAR_FIELD(for_all_tables);
 
        return newnode;
 }
@@ -5403,7 +5403,7 @@ _copyAlterPublicationStmt(const AlterPublicationStmt *from)
        COPY_STRING_FIELD(pubname);
        COPY_NODE_FIELD(options);
        COPY_NODE_FIELD(pubobjects);
-       COPY_NODE_FIELD(for_all_objects);
+       COPY_SCALAR_FIELD(for_all_tables);
        COPY_SCALAR_FIELD(action);
 
        return newnode;
index 1f765f42c91a56e952139e15123266d2b7c5536a..caad20e04781615a5b769bee3748c41b10c07bff 100644 (file)
@@ -2688,7 +2688,7 @@ _equalCreatePublicationStmt(const CreatePublicationStmt *a,
        COMPARE_STRING_FIELD(pubname);
        COMPARE_NODE_FIELD(options);
        COMPARE_NODE_FIELD(pubobjects);
-       COMPARE_NODE_FIELD(for_all_objects);
+       COMPARE_SCALAR_FIELD(for_all_tables);
 
        return true;
 }
@@ -2700,7 +2700,7 @@ _equalAlterPublicationStmt(const AlterPublicationStmt *a,
        COMPARE_STRING_FIELD(pubname);
        COMPARE_NODE_FIELD(options);
        COMPARE_NODE_FIELD(pubobjects);
-       COMPARE_NODE_FIELD(for_all_objects);
+       COMPARE_SCALAR_FIELD(for_all_tables);
        COMPARE_SCALAR_FIELD(action);
 
        return true;
index 2cc92a894326e5266958dbc574a217b176d4fac4..c9941d9cb4f20dc9ecd40a54efad97f6e4a063da 100644 (file)
@@ -455,7 +455,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
                                transform_element_list transform_type_list
                                TriggerTransitions TriggerReferencing
                                vacuum_relation_list opt_vacuum_relation_list
-                               drop_option_list pub_obj_list pub_obj_type_list
+                               drop_option_list pub_obj_list
 
 %type <node>   opt_routine_body
 %type <groupclause> group_clause
@@ -588,7 +588,6 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
 %type <node>   var_value zone_value
 %type <rolespec> auth_ident RoleSpec opt_granted_by
 %type <publicationobjectspec> PublicationObjSpec
-%type <node>   pub_obj_type
 
 %type <keyword> unreserved_keyword type_func_name_keyword
 %type <keyword> col_name_keyword reserved_keyword
@@ -9863,10 +9862,13 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
  *
  * CREATE PUBLICATION FOR ALL TABLES [WITH options]
  *
- * CREATE PUBLICATION FOR ALL SEQUENCES [WITH options]
- *
  * CREATE PUBLICATION FOR pub_obj [, ...] [WITH options]
  *
+ * pub_obj is one of:
+ *
+ *             TABLE table [, ...]
+ *             ALL TABLES IN SCHEMA schema [, ...]
+ *
  *****************************************************************************/
 
 CreatePublicationStmt:
@@ -9877,12 +9879,12 @@ CreatePublicationStmt:
                                        n->options = $4;
                                        $$ = (Node *)n;
                                }
-                       | CREATE PUBLICATION name FOR ALL pub_obj_type_list opt_definition
+                       | CREATE PUBLICATION name FOR ALL TABLES opt_definition
                                {
                                        CreatePublicationStmt *n = makeNode(CreatePublicationStmt);
                                        n->pubname = $3;
                                        n->options = $7;
-                                       n->for_all_objects = $6;
+                                       n->for_all_tables = true;
                                        $$ = (Node *)n;
                                }
                        | CREATE PUBLICATION name FOR pub_obj_list opt_definition
@@ -9932,26 +9934,6 @@ PublicationObjSpec:
                                        $$->pubobjtype = PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA;
                                        $$->location = @5;
                                }
-                       | SEQUENCE relation_expr
-                               {
-                                       $$ = makeNode(PublicationObjSpec);
-                                       $$->pubobjtype = PUBLICATIONOBJ_SEQUENCE;
-                                       $$->pubtable = makeNode(PublicationTable);
-                                       $$->pubtable->relation = $2;
-                               }
-                       | ALL SEQUENCES IN_P SCHEMA ColId
-                               {
-                                       $$ = makeNode(PublicationObjSpec);
-                                       $$->pubobjtype = PUBLICATIONOBJ_SEQUENCES_IN_SCHEMA;
-                                       $$->name = $5;
-                                       $$->location = @5;
-                               }
-                       | ALL SEQUENCES IN_P SCHEMA CURRENT_SCHEMA
-                               {
-                                       $$ = makeNode(PublicationObjSpec);
-                                       $$->pubobjtype = PUBLICATIONOBJ_SEQUENCES_IN_CUR_SCHEMA;
-                                       $$->location = @5;
-                               }
                        | ColId opt_column_list OptWhereClause
                                {
                                        $$ = makeNode(PublicationObjSpec);
@@ -10013,19 +9995,6 @@ pub_obj_list:   PublicationObjSpec
                                        { $$ = lappend($1, $3); }
        ;
 
-pub_obj_type:  TABLES
-                                       { $$ = (Node *) makeString("tables"); }
-                               | SEQUENCES
-                                       { $$ = (Node *) makeString("sequences"); }
-       ;
-
-pub_obj_type_list:     pub_obj_type
-                                       { $$ = list_make1($1); }
-                               | pub_obj_type_list ',' pub_obj_type
-                                       { $$ = lappend($1, $3); }
-       ;
-
-
 /*****************************************************************************
  *
  * ALTER PUBLICATION name SET ( options )
@@ -10036,6 +10005,11 @@ pub_obj_type_list:     pub_obj_type
  *
  * ALTER PUBLICATION name SET pub_obj [, ...]
  *
+ * pub_obj is one of:
+ *
+ *             TABLE table_name [, ...]
+ *             ALL TABLES IN SCHEMA schema_name [, ...]
+ *
  *****************************************************************************/
 
 AlterPublicationStmt:
@@ -18757,8 +18731,7 @@ preprocess_pubobj_list(List *pubobjspec_list, core_yyscan_t yyscanner)
                if (pubobj->pubobjtype == PUBLICATIONOBJ_CONTINUATION)
                        pubobj->pubobjtype = prevobjtype;
 
-               if (pubobj->pubobjtype == PUBLICATIONOBJ_TABLE ||
-                       pubobj->pubobjtype == PUBLICATIONOBJ_SEQUENCE)
+               if (pubobj->pubobjtype == PUBLICATIONOBJ_TABLE)
                {
                        /* relation name or pubtable must be set for this type of object */
                        if (!pubobj->name && !pubobj->pubtable)
@@ -18809,30 +18782,6 @@ preprocess_pubobj_list(List *pubobjspec_list, core_yyscan_t yyscanner)
                                                errmsg("invalid schema name at or near"),
                                                parser_errposition(pubobj->location));
                }
-               else if (pubobj->pubobjtype == PUBLICATIONOBJ_SEQUENCES_IN_SCHEMA ||
-                                pubobj->pubobjtype == PUBLICATIONOBJ_SEQUENCES_IN_CUR_SCHEMA)
-               {
-                       /* WHERE clause is not allowed on a schema object */
-                       if (pubobj->pubtable && pubobj->pubtable->whereClause)
-                               ereport(ERROR,
-                                               errcode(ERRCODE_SYNTAX_ERROR),
-                                               errmsg("WHERE clause not allowed for schema"),
-                                               parser_errposition(pubobj->location));
-
-                       /*
-                        * We can distinguish between the different type of schema
-                        * objects based on whether name and pubtable is set.
-                        */
-                       if (pubobj->name)
-                               pubobj->pubobjtype = PUBLICATIONOBJ_SEQUENCES_IN_SCHEMA;
-                       else if (!pubobj->name && !pubobj->pubtable)
-                               pubobj->pubobjtype = PUBLICATIONOBJ_SEQUENCES_IN_CUR_SCHEMA;
-                       else
-                               ereport(ERROR,
-                                               errcode(ERRCODE_SYNTAX_ERROR),
-                                               errmsg("invalid schema name at or near"),
-                                               parser_errposition(pubobj->location));
-               }
 
                prevobjtype = pubobj->pubobjtype;
        }
index c6ea7c98e1548659e430e811c46617edd45ee02a..6303647fe0f6f2ceb5cc11f7c2b12908008d362b 100644 (file)
@@ -42,7 +42,6 @@
 #include "replication/reorderbuffer.h"
 #include "replication/snapbuild.h"
 #include "storage/standby.h"
-#include "commands/sequence.h"
 
 /* individual record(group)'s handlers */
 static void DecodeInsert(LogicalDecodingContext *ctx, XLogRecordBuffer *buf);
@@ -64,7 +63,6 @@ static void DecodePrepare(LogicalDecodingContext *ctx, XLogRecordBuffer *buf,
 
 /* common function to decode tuples */
 static void DecodeXLogTuple(char *data, Size len, ReorderBufferTupleBuf *tup);
-static void DecodeSeqTuple(char *data, Size len, ReorderBufferTupleBuf *tuple);
 
 /* helper functions for decoding transactions */
 static inline bool FilterPrepare(LogicalDecodingContext *ctx,
@@ -1252,132 +1250,3 @@ DecodeTXNNeedSkip(LogicalDecodingContext *ctx, XLogRecordBuffer *buf,
                        (txn_dbid != InvalidOid && txn_dbid != ctx->slot->data.database) ||
                        ctx->fast_forward || FilterByOrigin(ctx, origin_id));
 }
-
-/*
- * DecodeSeqTuple
- *             decode tuple describing the sequence increment
- *
- * Sequences are represented as a table with a single row, which gets updated
- * by nextval(). The tuple is stored in WAL right after the xl_seq_rec, so we
- * simply copy it into the tuplebuf (similar to seq_redo).
- */
-static void
-DecodeSeqTuple(char *data, Size len, ReorderBufferTupleBuf *tuple)
-{
-       int                     datalen = len - sizeof(xl_seq_rec) - SizeofHeapTupleHeader;
-
-       Assert(datalen >= 0);
-
-       tuple->tuple.t_len = datalen + SizeofHeapTupleHeader;
-
-       ItemPointerSetInvalid(&tuple->tuple.t_self);
-
-       tuple->tuple.t_tableOid = InvalidOid;
-
-       memcpy(((char *) tuple->tuple.t_data),
-                  data + sizeof(xl_seq_rec),
-                  SizeofHeapTupleHeader);
-
-       memcpy(((char *) tuple->tuple.t_data) + SizeofHeapTupleHeader,
-                  data + sizeof(xl_seq_rec) + SizeofHeapTupleHeader,
-                  datalen);
-}
-
-/*
- * Handle sequence decode
- *
- * Decoding sequences is a bit tricky, because while most sequence actions
- * are non-transactional (not subject to rollback), some need to be handled
- * as transactional.
- *
- * By default, a sequence increment is non-transactional - we must not queue
- * it in a transaction as other changes, because the transaction might get
- * rolled back and we'd discard the increment. The downstream would not be
- * notified about the increment, which is wrong.
- *
- * On the other hand, the sequence may be created in a transaction. In this
- * case we *should* queue the change as other changes in the transaction,
- * because we don't want to send the increments for unknown sequence to the
- * plugin - it might get confused about which sequence it's related to etc.
- */
-void
-sequence_decode(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
-{
-       SnapBuild  *builder = ctx->snapshot_builder;
-       ReorderBufferTupleBuf *tuplebuf;
-       RelFileNode target_node;
-       XLogReaderState *r = buf->record;
-       char       *tupledata = NULL;
-       Size            tuplelen;
-       Size            datalen = 0;
-       TransactionId xid = XLogRecGetXid(r);
-       uint8           info = XLogRecGetInfo(buf->record) & ~XLR_INFO_MASK;
-       xl_seq_rec *xlrec;
-       Snapshot        snapshot;
-       RepOriginId origin_id = XLogRecGetOrigin(r);
-       bool            transactional;
-
-       /* only decode changes flagged with XLOG_SEQ_LOG */
-       if (info != XLOG_SEQ_LOG)
-               elog(ERROR, "unexpected RM_SEQ_ID record type: %u", info);
-
-       ReorderBufferProcessXid(ctx->reorder, XLogRecGetXid(r), buf->origptr);
-
-       /*
-        * If we don't have snapshot or we are just fast-forwarding, there is no
-        * point in decoding messages.
-        */
-       if (SnapBuildCurrentState(builder) < SNAPBUILD_FULL_SNAPSHOT ||
-               ctx->fast_forward)
-               return;
-
-       /* only interested in our database */
-       XLogRecGetBlockTag(r, 0, &target_node, NULL, NULL);
-       if (target_node.dbNode != ctx->slot->data.database)
-               return;
-
-       /* output plugin doesn't look for this origin, no need to queue */
-       if (FilterByOrigin(ctx, XLogRecGetOrigin(r)))
-               return;
-
-       tupledata = XLogRecGetData(r);
-       datalen = XLogRecGetDataLen(r);
-       tuplelen = datalen - SizeOfHeapHeader - sizeof(xl_seq_rec);
-
-       /* extract the WAL record, with "created" flag */
-       xlrec = (xl_seq_rec *) XLogRecGetData(r);
-
-       /* XXX how could we have sequence change without data? */
-       if(!datalen || !tupledata)
-               return;
-
-       tuplebuf = ReorderBufferGetTupleBuf(ctx->reorder, tuplelen);
-       DecodeSeqTuple(tupledata, datalen, tuplebuf);
-
-       /*
-        * Should we handle the sequence increment as transactional or not?
-        *
-        * If the sequence was created in a still-running transaction, treat
-        * it as transactional and queue the increments. Otherwise it needs
-        * to be treated as non-transactional, in which case we send it to
-        * the plugin right away.
-        */
-       transactional = ReorderBufferSequenceIsTransactional(ctx->reorder,
-                                                                                                                target_node,
-                                                                                                                xlrec->created);
-
-       /* Skip the change if already processed (per the snapshot). */
-       if (transactional &&
-               !SnapBuildProcessChange(builder, xid, buf->origptr))
-               return;
-       else if (!transactional &&
-                        (SnapBuildCurrentState(builder) != SNAPBUILD_CONSISTENT ||
-                         SnapBuildXactNeedsSkip(builder, buf->origptr)))
-               return;
-
-       /* Queue the increment (or send immediately if not transactional). */
-       snapshot = SnapBuildGetOrBuildSnapshot(builder, xid);
-       ReorderBufferQueueSequence(ctx->reorder, xid, snapshot, buf->endptr,
-                                                          origin_id, target_node, transactional,
-                                                          xlrec->created, tuplebuf);
-}
index 30e33dace33cf152cf1c9dd285d6cf8dcd6c9806..788769dd738e67cb19447c0d4159e96fd3a4c342 100644 (file)
@@ -73,10 +73,6 @@ static void truncate_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn,
 static void message_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn,
                                                           XLogRecPtr message_lsn, bool transactional,
                                                           const char *prefix, Size message_size, const char *message);
-static void sequence_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn,
-                                                               XLogRecPtr sequence_lsn, Relation rel,
-                                                               bool transactional,
-                                                               int64 last_value, int64 log_cnt, bool is_called);
 
 /* streaming callbacks */
 static void stream_start_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn,
@@ -94,10 +90,6 @@ static void stream_change_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn
 static void stream_message_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn,
                                                                          XLogRecPtr message_lsn, bool transactional,
                                                                          const char *prefix, Size message_size, const char *message);
-static void stream_sequence_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn,
-                                                                          XLogRecPtr sequence_lsn, Relation rel,
-                                                                          bool transactional,
-                                                                          int64 last_value, int64 log_cnt, bool is_called);
 static void stream_truncate_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn,
                                                                           int nrelations, Relation relations[], ReorderBufferChange *change);
 
@@ -226,7 +218,6 @@ StartupDecodingContext(List *output_plugin_options,
        ctx->reorder->apply_truncate = truncate_cb_wrapper;
        ctx->reorder->commit = commit_cb_wrapper;
        ctx->reorder->message = message_cb_wrapper;
-       ctx->reorder->sequence = sequence_cb_wrapper;
 
        /*
         * To support streaming, we require start/stop/abort/commit/change
@@ -243,7 +234,6 @@ StartupDecodingContext(List *output_plugin_options,
                (ctx->callbacks.stream_commit_cb != NULL) ||
                (ctx->callbacks.stream_change_cb != NULL) ||
                (ctx->callbacks.stream_message_cb != NULL) ||
-               (ctx->callbacks.stream_sequence_cb != NULL) ||
                (ctx->callbacks.stream_truncate_cb != NULL);
 
        /*
@@ -261,7 +251,6 @@ StartupDecodingContext(List *output_plugin_options,
        ctx->reorder->stream_commit = stream_commit_cb_wrapper;
        ctx->reorder->stream_change = stream_change_cb_wrapper;
        ctx->reorder->stream_message = stream_message_cb_wrapper;
-       ctx->reorder->stream_sequence = stream_sequence_cb_wrapper;
        ctx->reorder->stream_truncate = stream_truncate_cb_wrapper;
 
 
@@ -1216,42 +1205,6 @@ message_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn,
        error_context_stack = errcallback.previous;
 }
 
-static void
-sequence_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn,
-                                       XLogRecPtr sequence_lsn, Relation rel, bool transactional,
-                                       int64 last_value, int64 log_cnt, bool is_called)
-{
-       LogicalDecodingContext *ctx = cache->private_data;
-       LogicalErrorCallbackState state;
-       ErrorContextCallback errcallback;
-
-       Assert(!ctx->fast_forward);
-
-       if (ctx->callbacks.sequence_cb == NULL)
-               return;
-
-       /* Push callback + info on the error context stack */
-       state.ctx = ctx;
-       state.callback_name = "sequence";
-       state.report_location = sequence_lsn;
-       errcallback.callback = output_plugin_error_callback;
-       errcallback.arg = (void *) &state;
-       errcallback.previous = error_context_stack;
-       error_context_stack = &errcallback;
-
-       /* set output state */
-       ctx->accept_writes = true;
-       ctx->write_xid = txn != NULL ? txn->xid : InvalidTransactionId;
-       ctx->write_location = sequence_lsn;
-
-       /* do the actual work: call callback */
-       ctx->callbacks.sequence_cb(ctx, txn, sequence_lsn, rel, transactional,
-                                                          last_value, log_cnt, is_called);
-
-       /* Pop the error context stack */
-       error_context_stack = errcallback.previous;
-}
-
 static void
 stream_start_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn,
                                                XLogRecPtr first_lsn)
@@ -1557,47 +1510,6 @@ stream_message_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn,
        error_context_stack = errcallback.previous;
 }
 
-static void
-stream_sequence_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn,
-                                                  XLogRecPtr sequence_lsn, Relation rel,
-                                                  bool transactional,
-                                                  int64 last_value, int64 log_cnt, bool is_called)
-{
-       LogicalDecodingContext *ctx = cache->private_data;
-       LogicalErrorCallbackState state;
-       ErrorContextCallback errcallback;
-
-       Assert(!ctx->fast_forward);
-
-       /* We're only supposed to call this when streaming is supported. */
-       Assert(ctx->streaming);
-
-       /* this callback is optional */
-       if (ctx->callbacks.stream_sequence_cb == NULL)
-               return;
-
-       /* Push callback + info on the error context stack */
-       state.ctx = ctx;
-       state.callback_name = "stream_sequence";
-       state.report_location = sequence_lsn;
-       errcallback.callback = output_plugin_error_callback;
-       errcallback.arg = (void *) &state;
-       errcallback.previous = error_context_stack;
-       error_context_stack = &errcallback;
-
-       /* set output state */
-       ctx->accept_writes = true;
-       ctx->write_xid = txn != NULL ? txn->xid : InvalidTransactionId;
-       ctx->write_location = sequence_lsn;
-
-       /* do the actual work: call callback */
-       ctx->callbacks.sequence_cb(ctx, txn, sequence_lsn, rel, transactional,
-                                                          last_value, log_cnt, is_called);
-
-       /* Pop the error context stack */
-       error_context_stack = errcallback.previous;
-}
-
 static void
 stream_truncate_cb_wrapper(ReorderBuffer *cache, ReorderBufferTXN *txn,
                                                   int nrelations, Relation relations[],
index 18d3cbb9248de1699cb843451a6f9044545a8eb1..ff8513e2d2980e0010a1566c06e7435b5193bfee 100644 (file)
@@ -662,56 +662,6 @@ logicalrep_write_message(StringInfo out, TransactionId xid, XLogRecPtr lsn,
        pq_sendbytes(out, message, sz);
 }
 
-/*
- * Write SEQUENCE to stream
- */
-void
-logicalrep_write_sequence(StringInfo out, Relation rel, TransactionId xid,
-                                                 XLogRecPtr lsn, bool transactional,
-                                                 int64 last_value, int64 log_cnt, bool is_called)
-{
-       uint8           flags = 0;
-       char       *relname;
-
-       pq_sendbyte(out, LOGICAL_REP_MSG_SEQUENCE);
-
-       /* transaction ID (if not valid, we're not streaming) */
-       if (TransactionIdIsValid(xid))
-               pq_sendint32(out, xid);
-
-       pq_sendint8(out, flags);
-       pq_sendint64(out, lsn);
-
-       logicalrep_write_namespace(out, RelationGetNamespace(rel));
-       relname = RelationGetRelationName(rel);
-       pq_sendstring(out, relname);
-
-       pq_sendint8(out, transactional);
-       pq_sendint64(out, last_value);
-       pq_sendint64(out, log_cnt);
-       pq_sendint8(out, is_called);
-}
-
-/*
- * Read SEQUENCE from the stream.
- */
-void
-logicalrep_read_sequence(StringInfo in, LogicalRepSequence *seqdata)
-{
-       /* XXX skipping flags and lsn */
-       pq_getmsgint(in, 1);
-       pq_getmsgint64(in);
-
-       /* Read relation name from stream */
-       seqdata->nspname = pstrdup(logicalrep_read_namespace(in));
-       seqdata->seqname = pstrdup(pq_getmsgstring(in));
-
-       seqdata->transactional = pq_getmsgint(in, 1);
-       seqdata->last_value = pq_getmsgint64(in);
-       seqdata->log_cnt = pq_getmsgint64(in);
-       seqdata->is_called = pq_getmsgint(in, 1);
-}
-
 /*
  * Write relation description to the output stream.
  */
@@ -1286,8 +1236,6 @@ logicalrep_message_type(LogicalRepMsgType action)
                        return "STREAM ABORT";
                case LOGICAL_REP_MSG_STREAM_PREPARE:
                        return "STREAM PREPARE";
-               case LOGICAL_REP_MSG_SEQUENCE:
-                       return "SEQUENCE";
        }
 
        elog(ERROR, "invalid logical replication message type \"%c\"", action);
index 4702750a2e75854532fa36e3ee48087ef5341274..5adc016d449f81fd3d4f748d8719e25c6d73e8f7 100644 (file)
  *       a bit more memory to the oldest subtransactions, because it's likely
  *       they are the source for the next sequence of changes.
  *
- *       When decoding sequences, we differentiate between a sequences created
- *       in a (running) transaction, and sequences created in other (already
- *       committed) transactions. Changes for sequences created in the same
- *       top-level transaction are treated as "transactional" i.e. just like
- *       any other change from that transaction (and discarded in case of a
- *       rollback). Changes for sequences created earlier are treated as not
- *       transactional - are processed immediately, as if performed outside
- *       any transaction (and thus not rolled back).
- *
- *       This mixed behavior is necessary - sequences are non-transactional
- *       (e.g. ROLLBACK does not undo the sequence increments). But for new
- *       sequences, we need to handle them in a transactional way, because if
- *       we ever get some DDL support, the sequence won't exist until the
- *       transaction gets applied. So we need to ensure the increments don't
- *       happen until the sequence gets created.
- *
- *       To differentiate which sequences are "old" and which were created
- *       in a still-running transaction, we track sequences created in running
- *       transactions in a hash table. Sequences are identified by relfilenode,
- *       and we track XID of the (sub)transaction that created it. This means
- *       that if a transaction does something that changes the relfilenode
- *       (like an alter / reset of a sequence), the new relfilenode will be
- *       treated as if created in the transaction. The list of sequences gets
- *       discarded when the transaction completes (commit/rollback).
- *
- *       We don't use the XID to check if it's the same top-level transaction.
- *       It's enough to know it was created in an in-progress transaction,
- *       and we know it must be the current one because otherwise it wouldn't
- *       see the sequence object.
- *
- *       The XID may be valid even for non-transactional sequences - we simply
- *       keep the XID logged to WAL, it's up to the reorderbuffer to decide if
- *       the increment is transactional.
- *
  * -------------------------------------------------------------------------
  */
 #include "postgres.h"
 #include "access/xact.h"
 #include "access/xlog_internal.h"
 #include "catalog/catalog.h"
-#include "commands/sequence.h"
 #include "lib/binaryheap.h"
 #include "miscadmin.h"
 #include "pgstat.h"
@@ -151,13 +116,6 @@ typedef struct ReorderBufferTXNByIdEnt
        ReorderBufferTXN *txn;
 } ReorderBufferTXNByIdEnt;
 
-/* entry for hash table we use to track sequences created in running xacts */
-typedef struct ReorderBufferSequenceEnt
-{
-       RelFileNode             rnode;
-       TransactionId   xid;
-} ReorderBufferSequenceEnt;
-
 /* data structures for (relfilenode, ctid) => (cmin, cmax) mapping */
 typedef struct ReorderBufferTupleCidKey
 {
@@ -388,14 +346,6 @@ ReorderBufferAllocate(void)
        buffer->by_txn = hash_create("ReorderBufferByXid", 1000, &hash_ctl,
                                                                 HASH_ELEM | HASH_BLOBS | HASH_CONTEXT);
 
-       /* hash table of sequences, mapping relfilenode to XID of transaction */
-       hash_ctl.keysize = sizeof(RelFileNode);
-       hash_ctl.entrysize = sizeof(ReorderBufferSequenceEnt);
-       hash_ctl.hcxt = buffer->context;
-
-       buffer->sequences = hash_create("ReorderBufferSequenceHash", 1000, &hash_ctl,
-                                                                HASH_ELEM | HASH_BLOBS | HASH_CONTEXT);
-
        buffer->by_txn_last_xid = InvalidTransactionId;
        buffer->by_txn_last_txn = NULL;
 
@@ -582,13 +532,6 @@ ReorderBufferReturnChange(ReorderBuffer *rb, ReorderBufferChange *change,
                                change->data.truncate.relids = NULL;
                        }
                        break;
-               case REORDER_BUFFER_CHANGE_SEQUENCE:
-                       if (change->data.sequence.tuple)
-                       {
-                               ReorderBufferReturnTupleBuf(rb, change->data.sequence.tuple);
-                               change->data.sequence.tuple = NULL;
-                       }
-                       break;
                case REORDER_BUFFER_CHANGE_INTERNAL_SPEC_CONFIRM:
                case REORDER_BUFFER_CHANGE_INTERNAL_SPEC_ABORT:
                case REORDER_BUFFER_CHANGE_INTERNAL_COMMAND_ID:
@@ -923,230 +866,6 @@ ReorderBufferQueueMessage(ReorderBuffer *rb, TransactionId xid,
        }
 }
 
-/*
- * Treat the sequence increment as transactional?
- *
- * The hash table tracks all sequences created in in-progress transactions,
- * so we simply do a lookup (the sequence is identified by relfilende). If
- * we find a match, the increment should be handled as transactional.
- */
-bool
-ReorderBufferSequenceIsTransactional(ReorderBuffer *rb,
-                                                                        RelFileNode rnode, bool created)
-{
-       bool    found = false;
-
-       if (created)
-               return true;
-
-       hash_search(rb->sequences,
-                               (void *) &rnode,
-                               HASH_FIND,
-                               &found);
-
-       return found;
-}
-
-/*
- * Cleanup sequences created in in-progress transactions.
- *
- * There's no way to search by XID, so we simply do a seqscan of all
- * the entries in the hash table. Hopefully there are only a couple
- * entries in most cases - people generally don't create many new
- * sequences over and over.
- */
-static void
-ReorderBufferSequenceCleanup(ReorderBuffer *rb, TransactionId xid)
-{
-       HASH_SEQ_STATUS scan_status;
-       ReorderBufferSequenceEnt *ent;
-
-       hash_seq_init(&scan_status, rb->sequences);
-       while ((ent = (ReorderBufferSequenceEnt *) hash_seq_search(&scan_status)) != NULL)
-       {
-               /* skip sequences not from this transaction */
-               if (ent->xid != xid)
-                       continue;
-
-               (void) hash_search(rb->sequences,
-                                          (void *) &(ent->rnode),
-                                          HASH_REMOVE, NULL);
-       }
-}
-
-/*
- * A transactional sequence increment is queued to be processed upon commit
- * and a non-transactional increment gets processed immediately.
- *
- * A sequence update may be both transactional and non-transactional. When
- * created in a running transaction, treat it as transactional and queue
- * the change in it. Otherwise treat it as non-transactional, so that we
- * don't forget the increment in case of a rollback.
- */
-void
-ReorderBufferQueueSequence(ReorderBuffer *rb, TransactionId xid,
-                                                  Snapshot snapshot, XLogRecPtr lsn, RepOriginId origin_id,
-                                                  RelFileNode rnode, bool transactional, bool created,
-                                                  ReorderBufferTupleBuf *tuplebuf)
-{
-       /*
-        * Change needs to be handled as transactional, because the sequence was
-        * created in a transaction that is still running. In that case all the
-        * changes need to be queued in that transaction, we must not send them
-        * to the downstream until the transaction commits.
-        *
-        * There's a bit of a trouble with subtransactions - we can't queue it
-        * into the subxact, because it might be rolled back and we'd lose the
-        * increment. We need to queue it into the same (sub)xact that created
-        * the sequence, which is why we track the XID in the hash table.
-        */
-       if (transactional)
-       {
-               MemoryContext oldcontext;
-               ReorderBufferChange *change;
-
-               /* lookup sequence by relfilenode */
-               ReorderBufferSequenceEnt   *ent;
-               bool                                            found;
-
-               /* transactional changes require a transaction */
-               Assert(xid != InvalidTransactionId);
-
-               /* search the lookup table (we ignore the return value, found is enough) */
-               ent = hash_search(rb->sequences,
-                                                 (void *) &rnode,
-                                                 created ? HASH_ENTER : HASH_FIND,
-                                                 &found);
-
-               /*
-                * If this is the "create" increment, we must not have found any
-                * pre-existing entry in the hash table (i.e. there must not be
-                * any conflicting sequence).
-                */
-               Assert(!(created && found));
-
-               /* But we must have either created or found an existing entry. */
-               Assert(created || found);
-
-               /*
-                * When creating the sequence, remember the XID of the transaction
-                * that created id.
-                */
-               if (created)
-                       ent->xid = xid;
-
-               /* XXX Maybe check that we're still in the same top-level xact? */
-
-               /* OK, allocate and queue the change */
-               oldcontext = MemoryContextSwitchTo(rb->context);
-
-               change = ReorderBufferGetChange(rb);
-
-               change->action = REORDER_BUFFER_CHANGE_SEQUENCE;
-               change->origin_id = origin_id;
-
-               memcpy(&change->data.sequence.relnode, &rnode, sizeof(RelFileNode));
-
-               change->data.sequence.tuple = tuplebuf;
-
-               /* add it to the same subxact that created the sequence */
-               ReorderBufferQueueChange(rb, ent->xid, lsn, change, false);
-
-               MemoryContextSwitchTo(oldcontext);
-       }
-       else
-       {
-               /*
-                * This increment is for a sequence that was not created in any
-                * running transaction, so we treat it as non-transactional and
-                * just send it to the output plugin directly.
-                */
-               ReorderBufferTXN *txn = NULL;
-               volatile Snapshot snapshot_now = snapshot;
-               bool    using_subtxn;
-
-#ifdef USE_ASSERT_CHECKING
-               /* All "creates" have to be handled as transactional. */
-               Assert(!created);
-
-               /* Make sure the sequence is not in the hash table. */
-               {
-                       bool    found;
-                       hash_search(rb->sequences,
-                                               (void *) &rnode,
-                                               HASH_FIND, &found);
-                       Assert(!found);
-               }
-#endif
-
-               if (xid != InvalidTransactionId)
-                       txn = ReorderBufferTXNByXid(rb, xid, true, NULL, lsn, true);
-
-               /* setup snapshot to allow catalog access */
-               SetupHistoricSnapshot(snapshot_now, NULL);
-
-               /*
-                * Decoding needs access to syscaches et al., which in turn use
-                * heavyweight locks and such. Thus we need to have enough state around to
-                * keep track of those.  The easiest way is to simply use a transaction
-                * internally.  That also allows us to easily enforce that nothing writes
-                * to the database by checking for xid assignments.
-                *
-                * When we're called via the SQL SRF there's already a transaction
-                * started, so start an explicit subtransaction there.
-                */
-               using_subtxn = IsTransactionOrTransactionBlock();
-
-               PG_TRY();
-               {
-                       Relation        relation;
-                       HeapTuple       tuple;
-                       Form_pg_sequence_data seq;
-                       Oid                     reloid;
-
-                       if (using_subtxn)
-                               BeginInternalSubTransaction("sequence");
-                       else
-                               StartTransactionCommand();
-
-                       reloid = RelidByRelfilenode(rnode.spcNode, rnode.relNode);
-
-                       if (reloid == InvalidOid)
-                               elog(ERROR, "could not map filenode \"%s\" to relation OID",
-                                        relpathperm(rnode,
-                                                                MAIN_FORKNUM));
-
-                       relation = RelationIdGetRelation(reloid);
-                       tuple = &tuplebuf->tuple;
-                       seq = (Form_pg_sequence_data) GETSTRUCT(tuple);
-
-                       rb->sequence(rb, txn, lsn, relation, transactional,
-                                                seq->last_value, seq->log_cnt, seq->is_called);
-
-                       RelationClose(relation);
-
-                       TeardownHistoricSnapshot(false);
-
-                       AbortCurrentTransaction();
-
-                       if (using_subtxn)
-                               RollbackAndReleaseCurrentSubTransaction();
-               }
-               PG_CATCH();
-               {
-                       TeardownHistoricSnapshot(true);
-
-                       AbortCurrentTransaction();
-
-                       if (using_subtxn)
-                               RollbackAndReleaseCurrentSubTransaction();
-
-                       PG_RE_THROW();
-               }
-               PG_END_TRY();
-       }
-}
-
 /*
  * AssertTXNLsnOrder
  *             Verify LSN ordering of transaction lists in the reorderbuffer
@@ -1823,9 +1542,6 @@ ReorderBufferCleanupTXN(ReorderBuffer *rb, ReorderBufferTXN *txn)
                                &found);
        Assert(found);
 
-       /* Remove sequences created in this transaction (if any). */
-       ReorderBufferSequenceCleanup(rb, txn->xid);
-
        /* remove entries spilled to disk */
        if (rbtxn_is_serialized(txn))
                ReorderBufferRestoreCleanup(rb, txn);
@@ -2241,29 +1957,6 @@ ReorderBufferApplyMessage(ReorderBuffer *rb, ReorderBufferTXN *txn,
                                        change->data.msg.message);
 }
 
-/*
- * Helper function for ReorderBufferProcessTXN for applying sequences.
- */
-static inline void
-ReorderBufferApplySequence(ReorderBuffer *rb, ReorderBufferTXN *txn,
-                                                  Relation relation, ReorderBufferChange *change,
-                                                  bool streaming)
-{
-       HeapTuple       tuple;
-       Form_pg_sequence_data seq;
-
-       tuple = &change->data.sequence.tuple->tuple;
-       seq = (Form_pg_sequence_data) GETSTRUCT(tuple);
-
-       /* Only ever called from ReorderBufferApplySequence, so transational. */
-       if (streaming)
-               rb->stream_sequence(rb, txn, change->lsn, relation, true,
-                                                       seq->last_value, seq->log_cnt, seq->is_called);
-       else
-               rb->sequence(rb, txn, change->lsn, relation, true,
-                                        seq->last_value, seq->log_cnt, seq->is_called);
-}
-
 /*
  * Function to store the command id and snapshot at the end of the current
  * stream so that we can reuse the same while sending the next stream.
@@ -2706,31 +2399,6 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, ReorderBufferTXN *txn,
                                case REORDER_BUFFER_CHANGE_INTERNAL_TUPLECID:
                                        elog(ERROR, "tuplecid value in changequeue");
                                        break;
-
-                               case REORDER_BUFFER_CHANGE_SEQUENCE:
-                                       Assert(snapshot_now);
-
-                                       reloid = RelidByRelfilenode(change->data.sequence.relnode.spcNode,
-                                                                                               change->data.sequence.relnode.relNode);
-
-                                       if (reloid == InvalidOid)
-                                               elog(ERROR, "could not map filenode \"%s\" to relation OID",
-                                                        relpathperm(change->data.sequence.relnode,
-                                                                                MAIN_FORKNUM));
-
-                                       relation = RelationIdGetRelation(reloid);
-
-                                       if (!RelationIsValid(relation))
-                                               elog(ERROR, "could not open relation with OID %u (for filenode \"%s\")",
-                                                        reloid,
-                                                        relpathperm(change->data.sequence.relnode,
-                                                                                MAIN_FORKNUM));
-
-                                       if (RelationIsLogicallyLogged(relation))
-                                               ReorderBufferApplySequence(rb, txn, relation, change, streaming);
-
-                                       RelationClose(relation);
-                                       break;
                        }
                }
 
@@ -4115,39 +3783,6 @@ ReorderBufferSerializeChange(ReorderBuffer *rb, ReorderBufferTXN *txn,
                                memcpy(data, change->data.truncate.relids, size);
                                data += size;
 
-                               break;
-                       }
-               case REORDER_BUFFER_CHANGE_SEQUENCE:
-                       {
-                               char       *data;
-                               ReorderBufferTupleBuf *tup;
-                               Size            len = 0;
-
-                               tup = change->data.sequence.tuple;
-
-                               if (tup)
-                               {
-                                       sz += sizeof(HeapTupleData);
-                                       len = tup->tuple.t_len;
-                                       sz += len;
-                               }
-
-                               /* make sure we have enough space */
-                               ReorderBufferSerializeReserve(rb, sz);
-
-                               data = ((char *) rb->outbuf) + sizeof(ReorderBufferDiskChange);
-                               /* might have been reallocated above */
-                               ondisk = (ReorderBufferDiskChange *) rb->outbuf;
-
-                               if (len)
-                               {
-                                       memcpy(data, &tup->tuple, sizeof(HeapTupleData));
-                                       data += sizeof(HeapTupleData);
-
-                                       memcpy(data, tup->tuple.t_data, len);
-                                       data += len;
-                               }
-
                                break;
                        }
                case REORDER_BUFFER_CHANGE_INTERNAL_SPEC_CONFIRM:
@@ -4412,22 +4047,6 @@ ReorderBufferChangeSize(ReorderBufferChange *change)
                        {
                                sz += sizeof(Oid) * change->data.truncate.nrelids;
 
-                               break;
-                       }
-               case REORDER_BUFFER_CHANGE_SEQUENCE:
-                       {
-                               ReorderBufferTupleBuf *tup;
-                               Size            len = 0;
-
-                               tup = change->data.sequence.tuple;
-
-                               if (tup)
-                               {
-                                       sz += sizeof(HeapTupleData);
-                                       len = tup->tuple.t_len;
-                                       sz += len;
-                               }
-
                                break;
                        }
                case REORDER_BUFFER_CHANGE_INTERNAL_SPEC_CONFIRM:
@@ -4729,30 +4348,6 @@ ReorderBufferRestoreChange(ReorderBuffer *rb, ReorderBufferTXN *txn,
 
                                break;
                        }
-
-               case REORDER_BUFFER_CHANGE_SEQUENCE:
-                       if (change->data.sequence.tuple)
-                       {
-                               uint32          tuplelen = ((HeapTuple) data)->t_len;
-
-                               change->data.sequence.tuple =
-                                       ReorderBufferGetTupleBuf(rb, tuplelen - SizeofHeapTupleHeader);
-
-                               /* restore ->tuple */
-                               memcpy(&change->data.sequence.tuple->tuple, data,
-                                          sizeof(HeapTupleData));
-                               data += sizeof(HeapTupleData);
-
-                               /* reset t_data pointer into the new tuplebuf */
-                               change->data.sequence.tuple->tuple.t_data =
-                                       ReorderBufferTupleBufData(change->data.sequence.tuple);
-
-                               /* restore tuple data itself */
-                               memcpy(change->data.sequence.tuple->tuple.t_data, data, tuplelen);
-                               data += tuplelen;
-                       }
-                       break;
-
                case REORDER_BUFFER_CHANGE_INTERNAL_SPEC_CONFIRM:
                case REORDER_BUFFER_CHANGE_INTERNAL_SPEC_ABORT:
                case REORDER_BUFFER_CHANGE_INTERNAL_COMMAND_ID:
index b2cb31eaad71d06fdf4a052a4f8329b5f44d92d3..49ceec3bdc849f843b7a6bbb7e7773d6446f432c 100644 (file)
 #include "catalog/pg_subscription_rel.h"
 #include "catalog/pg_type.h"
 #include "commands/copy.h"
-#include "commands/sequence.h"
 #include "miscadmin.h"
 #include "parser/parse_relation.h"
 #include "pgstat.h"
@@ -1137,95 +1136,6 @@ copy_table(Relation rel)
        logicalrep_rel_close(relmapentry, NoLock);
 }
 
-/*
- * Fetch sequence data (current state) from the remote node.
- */
-static void
-fetch_sequence_data(char *nspname, char *relname,
-                                       int64 *last_value, int64 *log_cnt, bool *is_called)
-{
-       WalRcvExecResult *res;
-       StringInfoData cmd;
-       TupleTableSlot *slot;
-       Oid                     tableRow[3] = {INT8OID, INT8OID, BOOLOID};
-
-       initStringInfo(&cmd);
-       appendStringInfo(&cmd, "SELECT last_value, log_cnt, is_called\n"
-                                          "  FROM %s", quote_qualified_identifier(nspname, relname));
-
-       res = walrcv_exec(LogRepWorkerWalRcvConn, cmd.data, 3, tableRow);
-       pfree(cmd.data);
-
-       if (res->status != WALRCV_OK_TUPLES)
-               ereport(ERROR,
-                               (errmsg("could not receive list of replicated tables from the publisher: %s",
-                                               res->err)));
-
-       /* Process the sequence. */
-       slot = MakeSingleTupleTableSlot(res->tupledesc, &TTSOpsMinimalTuple);
-       while (tuplestore_gettupleslot(res->tuplestore, true, false, slot))
-       {
-               bool            isnull;
-
-               *last_value = DatumGetInt64(slot_getattr(slot, 1, &isnull));
-               Assert(!isnull);
-
-               *log_cnt = DatumGetInt64(slot_getattr(slot, 2, &isnull));
-               Assert(!isnull);
-
-               *is_called = DatumGetBool(slot_getattr(slot, 3, &isnull));
-               Assert(!isnull);
-
-               ExecClearTuple(slot);
-       }
-       ExecDropSingleTupleTableSlot(slot);
-
-       walrcv_clear_result(res);
-}
-
-/*
- * Copy existing data of a sequence from publisher.
- *
- * Caller is responsible for locking the local relation.
- */
-static void
-copy_sequence(Relation rel)
-{
-       LogicalRepRelMapEntry *relmapentry;
-       LogicalRepRelation lrel;
-       List       *qual = NIL;
-       StringInfoData cmd;
-       int64           last_value = 0,
-                               log_cnt = 0;
-       bool            is_called = 0;
-
-       /* Get the publisher relation info. */
-       fetch_remote_table_info(get_namespace_name(RelationGetNamespace(rel)),
-                                                       RelationGetRelationName(rel), &lrel, &qual);
-
-       /* sequences don't have row filters */
-       Assert(!qual);
-
-       /* Put the relation into relmap. */
-       logicalrep_relmap_update(&lrel);
-
-       /* Map the publisher relation to local one. */
-       relmapentry = logicalrep_rel_open(lrel.remoteid, NoLock);
-       Assert(rel == relmapentry->localrel);
-
-       /* Start copy on the publisher. */
-       initStringInfo(&cmd);
-
-       Assert(lrel.relkind == RELKIND_SEQUENCE);
-
-       fetch_sequence_data(lrel.nspname, lrel.relname, &last_value, &log_cnt, &is_called);
-
-       /* tablesync sets the sequences in non-transactional way */
-       SetSequence(RelationGetRelid(rel), false, last_value, log_cnt, is_called);
-
-       logicalrep_rel_close(relmapentry, NoLock);
-}
-
 /*
  * Determine the tablesync slot name.
  *
@@ -1487,21 +1397,10 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos)
                                                originname)));
        }
 
-       /* Do the right action depending on the relation kind. */
-       if (get_rel_relkind(RelationGetRelid(rel)) == RELKIND_SEQUENCE)
-       {
-               /* Now do the initial sequence copy */
-               PushActiveSnapshot(GetTransactionSnapshot());
-               copy_sequence(rel);
-               PopActiveSnapshot();
-       }
-       else
-       {
-               /* Now do the initial data copy */
-               PushActiveSnapshot(GetTransactionSnapshot());
-               copy_table(rel);
-               PopActiveSnapshot();
-       }
+       /* Now do the initial data copy */
+       PushActiveSnapshot(GetTransactionSnapshot());
+       copy_table(rel);
+       PopActiveSnapshot();
 
        res = walrcv_exec(LogRepWorkerWalRcvConn, "COMMIT", 0, NULL);
        if (res->status != WALRCV_OK_COMMAND)
index 7ade49652e77f369d0c81b0eb2df2ce0563bede9..9181d3e8636869b9c70e5888b1a68bf56a9cf331 100644 (file)
 #include "catalog/pg_subscription.h"
 #include "catalog/pg_subscription_rel.h"
 #include "catalog/pg_tablespace.h"
-#include "commands/sequence.h"
 #include "commands/tablecmds.h"
 #include "commands/tablespace.h"
 #include "commands/trigger.h"
@@ -1144,57 +1143,6 @@ apply_handle_origin(StringInfo s)
                                 errmsg_internal("ORIGIN message sent out of order")));
 }
 
-/*
- * Handle SEQUENCE message.
- */
-static void
-apply_handle_sequence(StringInfo s)
-{
-       LogicalRepSequence      seq;
-       Oid                                     relid;
-
-       if (handle_streamed_transaction(LOGICAL_REP_MSG_SEQUENCE, s))
-               return;
-
-       logicalrep_read_sequence(s, &seq);
-
-       /*
-        * Non-transactional sequence updates should not be part of a remote
-        * transaction. There should not be any running transaction.
-        */
-       Assert((!seq.transactional) || in_remote_transaction);
-       Assert(!(!seq.transactional && in_remote_transaction));
-       Assert(!(!seq.transactional && IsTransactionState()));
-
-       /*
-        * Make sure we're in a transaction (needed by SetSequence). For
-        * non-transactional updates we're guaranteed to start a new one,
-        * and we'll commit it at the end.
-        */
-       if (!IsTransactionState())
-       {
-               StartTransactionCommand();
-               maybe_reread_subscription();
-       }
-
-       relid = RangeVarGetRelid(makeRangeVar(seq.nspname,
-                                                                                 seq.seqname, -1),
-                                                        RowExclusiveLock, false);
-
-       /* lock the sequence in AccessExclusiveLock, as expected by SetSequence */
-       LockRelationOid(relid, AccessExclusiveLock);
-
-       /* apply the sequence change */
-       SetSequence(relid, seq.transactional, seq.last_value, seq.log_cnt, seq.is_called);
-
-       /*
-        * Commit the per-stream transaction (we only do this when not in
-        * remote transaction, i.e. for non-transactional sequence updates.
-        */
-       if (!in_remote_transaction)
-               CommitTransactionCommand();
-}
-
 /*
  * Handle STREAM START message.
  */
@@ -2563,10 +2511,6 @@ apply_dispatch(StringInfo s)
                         */
                        break;
 
-               case LOGICAL_REP_MSG_SEQUENCE:
-                       apply_handle_sequence(s);
-                       return;
-
                case LOGICAL_REP_MSG_STREAM_START:
                        apply_handle_stream_start(s);
                        break;
index 9d33630464c8598bde4dea5a3ee15256000abf3f..fe5accca5762a378ade53245e5daadf41d1b7e3e 100644 (file)
@@ -15,7 +15,6 @@
 #include "access/tupconvert.h"
 #include "catalog/partition.h"
 #include "catalog/pg_publication.h"
-#include "catalog/pg_publication_namespace.h"
 #include "catalog/pg_publication_rel.h"
 #include "commands/defrem.h"
 #include "executor/executor.h"
@@ -55,10 +54,6 @@ static void pgoutput_message(LogicalDecodingContext *ctx,
                                                         ReorderBufferTXN *txn, XLogRecPtr message_lsn,
                                                         bool transactional, const char *prefix,
                                                         Size sz, const char *message);
-static void pgoutput_sequence(LogicalDecodingContext *ctx,
-                                                         ReorderBufferTXN *txn, XLogRecPtr sequence_lsn,
-                                                         Relation relation, bool transactional,
-                                                         int64 last_value, int64 log_cnt, bool is_called);
 static bool pgoutput_origin_filter(LogicalDecodingContext *ctx,
                                                                   RepOriginId origin_id);
 static void pgoutput_begin_prepare_txn(LogicalDecodingContext *ctx,
@@ -260,7 +255,6 @@ _PG_output_plugin_init(OutputPluginCallbacks *cb)
        cb->change_cb = pgoutput_change;
        cb->truncate_cb = pgoutput_truncate;
        cb->message_cb = pgoutput_message;
-       cb->sequence_cb = pgoutput_sequence;
        cb->commit_cb = pgoutput_commit_txn;
 
        cb->begin_prepare_cb = pgoutput_begin_prepare_txn;
@@ -277,7 +271,6 @@ _PG_output_plugin_init(OutputPluginCallbacks *cb)
        cb->stream_commit_cb = pgoutput_stream_commit;
        cb->stream_change_cb = pgoutput_change;
        cb->stream_message_cb = pgoutput_message;
-       cb->stream_sequence_cb = pgoutput_sequence;
        cb->stream_truncate_cb = pgoutput_truncate;
        /* transaction streaming - two-phase commit */
        cb->stream_prepare_cb = pgoutput_stream_prepare_txn;
@@ -291,7 +284,6 @@ parse_output_parameters(List *options, PGOutputData *data)
        bool            publication_names_given = false;
        bool            binary_option_given = false;
        bool            messages_option_given = false;
-       bool            sequences_option_given = false;
        bool            streaming_given = false;
        bool            two_phase_option_given = false;
 
@@ -299,7 +291,6 @@ parse_output_parameters(List *options, PGOutputData *data)
        data->streaming = false;
        data->messages = false;
        data->two_phase = false;
-       data->sequences = true;
 
        foreach(lc, options)
        {
@@ -368,16 +359,6 @@ parse_output_parameters(List *options, PGOutputData *data)
 
                        data->messages = defGetBoolean(defel);
                }
-               else if (strcmp(defel->defname, "sequences") == 0)
-               {
-                       if (sequences_option_given)
-                               ereport(ERROR,
-                                               (errcode(ERRCODE_SYNTAX_ERROR),
-                                                errmsg("conflicting or redundant options")));
-                       sequences_option_given = true;
-
-                       data->sequences = defGetBoolean(defel);
-               }
                else if (strcmp(defel->defname, "streaming") == 0)
                {
                        if (streaming_given)
@@ -1709,64 +1690,6 @@ pgoutput_message(LogicalDecodingContext *ctx, ReorderBufferTXN *txn,
        OutputPluginWrite(ctx, true);
 }
 
-static void
-pgoutput_sequence(LogicalDecodingContext *ctx,
-                                 ReorderBufferTXN *txn, XLogRecPtr sequence_lsn,
-                                 Relation relation, bool transactional,
-                                 int64 last_value, int64 log_cnt, bool is_called)
-{
-       PGOutputData *data = (PGOutputData *) ctx->output_plugin_private;
-       TransactionId xid = InvalidTransactionId;
-       RelationSyncEntry *relentry;
-
-       if (!data->sequences)
-               return;
-
-       if (!is_publishable_relation(relation))
-               return;
-
-       /*
-        * Remember the xid for the message in streaming mode. See
-        * pgoutput_change.
-        */
-       if (in_streaming)
-               xid = txn->xid;
-
-       relentry = get_rel_sync_entry(data, relation);
-
-       /*
-        * First check the sequence filter.
-        *
-        * We handle just REORDER_BUFFER_CHANGE_SEQUENCE here.
-        */
-       if (!relentry->pubactions.pubsequence)
-               return;
-
-       /*
-        * Output BEGIN if we haven't yet. Avoid for non-transactional
-        * sequence changes.
-        */
-       if (transactional)
-       {
-               PGOutputTxnData *txndata = (PGOutputTxnData *) txn->output_plugin_private;
-
-               /* Send BEGIN if we haven't yet */
-               if (txndata && !txndata->sent_begin_txn)
-                       pgoutput_send_begin(ctx, txn);
-       }
-
-       OutputPluginPrepareWrite(ctx, true);
-       logicalrep_write_sequence(ctx->out,
-                                                         relation,
-                                                         xid,
-                                                         sequence_lsn,
-                                                         transactional,
-                                                         last_value,
-                                                         log_cnt,
-                                                         is_called);
-       OutputPluginWrite(ctx, true);
-}
-
 /*
  * Currently we always forward.
  */
@@ -2052,8 +1975,7 @@ get_rel_sync_entry(PGOutputData *data, Relation relation)
                entry->schema_sent = false;
                entry->streamed_txns = NIL;
                entry->pubactions.pubinsert = entry->pubactions.pubupdate =
-                       entry->pubactions.pubdelete = entry->pubactions.pubtruncate =
-                       entry->pubactions.pubsequence = false;
+                       entry->pubactions.pubdelete = entry->pubactions.pubtruncate = false;
                entry->new_slot = NULL;
                entry->old_slot = NULL;
                memset(entry->exprstate, 0, sizeof(entry->exprstate));
@@ -2068,18 +1990,18 @@ get_rel_sync_entry(PGOutputData *data, Relation relation)
        {
                Oid                     schemaId = get_rel_namespace(relid);
                List       *pubids = GetRelationPublications(relid);
-               char            relkind = get_rel_relkind(relid);
-               char            objectType = pub_get_object_type_for_relkind(relkind);
+
                /*
                 * We don't acquire a lock on the namespace system table as we build
                 * the cache entry using a historic snapshot and all the later changes
                 * are absorbed while decoding WAL.
                 */
-               List       *schemaPubids = GetSchemaPublications(schemaId, objectType);
+               List       *schemaPubids = GetSchemaPublications(schemaId);
                ListCell   *lc;
                Oid                     publish_as_relid = relid;
                int                     publish_ancestor_level = 0;
                bool            am_partition = get_rel_relispartition(relid);
+               char            relkind = get_rel_relkind(relid);
                List       *rel_publications = NIL;
 
                /* Reload publications if needed before use. */
@@ -2111,7 +2033,6 @@ get_rel_sync_entry(PGOutputData *data, Relation relation)
                entry->pubactions.pubupdate = false;
                entry->pubactions.pubdelete = false;
                entry->pubactions.pubtruncate = false;
-               entry->pubactions.pubsequence = false;
 
                /*
                 * Tuple slots cleanups. (Will be rebuilt later if needed).
@@ -2159,11 +2080,9 @@ get_rel_sync_entry(PGOutputData *data, Relation relation)
 
                        /*
                         * If this is a FOR ALL TABLES publication, pick the partition root
-                        * and set the ancestor level accordingly. If this is a FOR ALL
-                        * SEQUENCES publication, we publish it too but we don't need to
-                        * pick the partition root etc.
+                        * and set the ancestor level accordingly.
                         */
-                       if (pub->alltables || pub->allsequences)
+                       if (pub->alltables)
                        {
                                publish = true;
                                if (pub->pubviaroot && am_partition)
@@ -2227,7 +2146,6 @@ get_rel_sync_entry(PGOutputData *data, Relation relation)
                                entry->pubactions.pubupdate |= pub->pubactions.pubupdate;
                                entry->pubactions.pubdelete |= pub->pubactions.pubdelete;
                                entry->pubactions.pubtruncate |= pub->pubactions.pubtruncate;
-                               entry->pubactions.pubsequence |= pub->pubactions.pubsequence;
 
                                /*
                                 * We want to publish the changes as the top-most ancestor
index 1f29670a1314c513108efca3486d5bd9685d8ce3..43f14c233d6af7a661c105fb205240d6a3d95667 100644 (file)
@@ -56,7 +56,6 @@
 #include "catalog/pg_opclass.h"
 #include "catalog/pg_proc.h"
 #include "catalog/pg_publication.h"
-#include "catalog/pg_publication_namespace.h"
 #include "catalog/pg_rewrite.h"
 #include "catalog/pg_shseclabel.h"
 #include "catalog/pg_statistic_ext.h"
@@ -5568,8 +5567,6 @@ RelationBuildPublicationDesc(Relation relation, PublicationDesc *pubdesc)
        Oid                     schemaid;
        List       *ancestors = NIL;
        Oid                     relid = RelationGetRelid(relation);
-       char            relkind = relation->rd_rel->relkind;
-       char            objType;
 
        /*
         * If not publishable, it publishes no actions.  (pgoutput_change() will
@@ -5600,15 +5597,8 @@ RelationBuildPublicationDesc(Relation relation, PublicationDesc *pubdesc)
        /* Fetch the publication membership info. */
        puboids = GetRelationPublications(relid);
        schemaid = RelationGetNamespace(relation);
-       objType = pub_get_object_type_for_relkind(relkind);
+       puboids = list_concat_unique_oid(puboids, GetSchemaPublications(schemaid));
 
-       puboids = list_concat_unique_oid(puboids,
-                                                                        GetSchemaPublications(schemaid, objType));
-
-       /*
-        * If this is a partion (and thus a table), lookup all ancestors and track
-        * all publications them too.
-        */
        if (relation->rd_rel->relispartition)
        {
                /* Add publications that the ancestors are in too. */
@@ -5620,23 +5610,12 @@ RelationBuildPublicationDesc(Relation relation, PublicationDesc *pubdesc)
 
                        puboids = list_concat_unique_oid(puboids,
                                                                                         GetRelationPublications(ancestor));
-
-                       /* include all publications publishing schema of all ancestors */
                        schemaid = get_rel_namespace(ancestor);
                        puboids = list_concat_unique_oid(puboids,
-                                                                                        GetSchemaPublications(schemaid,
-                                                                                                                                  PUB_OBJTYPE_TABLE));
+                                                                                        GetSchemaPublications(schemaid));
                }
        }
-
-       /*
-        * Consider also FOR ALL TABLES and FOR ALL SEQUENCES publications,
-        * depending on the relkind of the relation.
-        */
-       if (relation->rd_rel->relkind == RELKIND_SEQUENCE)
-               puboids = list_concat_unique_oid(puboids, GetAllSequencesPublications());
-       else
-               puboids = list_concat_unique_oid(puboids, GetAllTablesPublications());
+       puboids = list_concat_unique_oid(puboids, GetAllTablesPublications());
 
        foreach(lc, puboids)
        {
@@ -5655,7 +5634,6 @@ RelationBuildPublicationDesc(Relation relation, PublicationDesc *pubdesc)
                pubdesc->pubactions.pubupdate |= pubform->pubupdate;
                pubdesc->pubactions.pubdelete |= pubform->pubdelete;
                pubdesc->pubactions.pubtruncate |= pubform->pubtruncate;
-               pubdesc->pubactions.pubsequence |= pubform->pubsequence;
 
                /*
                 * Check if all columns referenced in the filter expression are part of
index 8d265f2d23ca181514c4d4bb907f1a770a525408..1912b121463d4b1076e06acf5f51fb632fbb757d 100644 (file)
@@ -653,12 +653,12 @@ static const struct cachedesc cacheinfo[] = {
                64
        },
        {PublicationNamespaceRelationId,        /* PUBLICATIONNAMESPACEMAP */
-               PublicationNamespacePnnspidPnpubidPntypeIndexId,
-               3,
+               PublicationNamespacePnnspidPnpubidIndexId,
+               2,
                {
                        Anum_pg_publication_namespace_pnnspid,
                        Anum_pg_publication_namespace_pnpubid,
-                       Anum_pg_publication_namespace_pntype,
+                       0,
                        0
                },
                64
index 3c2201a725f645dab71837014a822547c50e44c5..196f6d23a3e493afac4c95600089c62031ee7c1c 100644 (file)
@@ -3814,12 +3814,10 @@ getPublications(Archive *fout, int *numPublications)
        int                     i_pubname;
        int                     i_pubowner;
        int                     i_puballtables;
-       int                     i_puballsequences;
        int                     i_pubinsert;
        int                     i_pubupdate;
        int                     i_pubdelete;
        int                     i_pubtruncate;
-       int                     i_pubsequence;
        int                     i_pubviaroot;
        int                     i,
                                ntups;
@@ -3835,29 +3833,23 @@ getPublications(Archive *fout, int *numPublications)
        resetPQExpBuffer(query);
 
        /* Get the publications. */
-       if (fout->remoteVersion >= 150000)
-               appendPQExpBuffer(query,
-                                                 "SELECT p.tableoid, p.oid, p.pubname, "
-                                                 "p.pubowner, "
-                                                 "p.puballtables, p.puballsequences, p.pubinsert, p.pubupdate, p.pubdelete, p.pubtruncate, p.pubsequence, p.pubviaroot "
-                                                 "FROM pg_publication p");
-       else if (fout->remoteVersion >= 130000)
+       if (fout->remoteVersion >= 130000)
                appendPQExpBuffer(query,
                                                  "SELECT p.tableoid, p.oid, p.pubname, "
                                                  "p.pubowner, "
-                                                 "p.puballtables, false AS puballsequences, p.pubinsert, p.pubupdate, p.pubdelete, p.pubtruncate, false AS pubsequence, p.pubviaroot "
+                                                 "p.puballtables, p.pubinsert, p.pubupdate, p.pubdelete, p.pubtruncate, p.pubviaroot "
                                                  "FROM pg_publication p");
        else if (fout->remoteVersion >= 110000)
                appendPQExpBuffer(query,
                                                  "SELECT p.tableoid, p.oid, p.pubname, "
                                                  "p.pubowner, "
-                                                 "p.puballtables, false AS puballsequences, p.pubinsert, p.pubupdate, p.pubdelete, p.pubtruncate, false AS pubsequence, false AS pubviaroot "
+                                                 "p.puballtables, p.pubinsert, p.pubupdate, p.pubdelete, p.pubtruncate, false AS pubviaroot "
                                                  "FROM pg_publication p");
        else
                appendPQExpBuffer(query,
                                                  "SELECT p.tableoid, p.oid, p.pubname, "
                                                  "p.pubowner, "
-                                                 "p.puballtables, false AS puballsequences, p.pubinsert, p.pubupdate, p.pubdelete, false AS pubtruncate, false AS pubsequence, false AS pubviaroot "
+                                                 "p.puballtables, p.pubinsert, p.pubupdate, p.pubdelete, false AS pubtruncate, false AS pubviaroot "
                                                  "FROM pg_publication p");
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
@@ -3869,12 +3861,10 @@ getPublications(Archive *fout, int *numPublications)
        i_pubname = PQfnumber(res, "pubname");
        i_pubowner = PQfnumber(res, "pubowner");
        i_puballtables = PQfnumber(res, "puballtables");
-       i_puballsequences = PQfnumber(res, "puballsequences");
        i_pubinsert = PQfnumber(res, "pubinsert");
        i_pubupdate = PQfnumber(res, "pubupdate");
        i_pubdelete = PQfnumber(res, "pubdelete");
        i_pubtruncate = PQfnumber(res, "pubtruncate");
-       i_pubsequence = PQfnumber(res, "pubsequence");
        i_pubviaroot = PQfnumber(res, "pubviaroot");
 
        pubinfo = pg_malloc(ntups * sizeof(PublicationInfo));
@@ -3890,8 +3880,6 @@ getPublications(Archive *fout, int *numPublications)
                pubinfo[i].rolname = getRoleName(PQgetvalue(res, i, i_pubowner));
                pubinfo[i].puballtables =
                        (strcmp(PQgetvalue(res, i, i_puballtables), "t") == 0);
-               pubinfo[i].puballsequences =
-                       (strcmp(PQgetvalue(res, i, i_puballsequences), "t") == 0);
                pubinfo[i].pubinsert =
                        (strcmp(PQgetvalue(res, i, i_pubinsert), "t") == 0);
                pubinfo[i].pubupdate =
@@ -3900,8 +3888,6 @@ getPublications(Archive *fout, int *numPublications)
                        (strcmp(PQgetvalue(res, i, i_pubdelete), "t") == 0);
                pubinfo[i].pubtruncate =
                        (strcmp(PQgetvalue(res, i, i_pubtruncate), "t") == 0);
-               pubinfo[i].pubsequence =
-                       (strcmp(PQgetvalue(res, i, i_pubsequence), "t") == 0);
                pubinfo[i].pubviaroot =
                        (strcmp(PQgetvalue(res, i, i_pubviaroot), "t") == 0);
 
@@ -3947,9 +3933,6 @@ dumpPublication(Archive *fout, const PublicationInfo *pubinfo)
        if (pubinfo->puballtables)
                appendPQExpBufferStr(query, " FOR ALL TABLES");
 
-       if (pubinfo->puballsequences)
-               appendPQExpBufferStr(query, " FOR ALL SEQUENCES");
-
        appendPQExpBufferStr(query, " WITH (publish = '");
        if (pubinfo->pubinsert)
        {
@@ -3984,15 +3967,6 @@ dumpPublication(Archive *fout, const PublicationInfo *pubinfo)
                first = false;
        }
 
-       if (pubinfo->pubsequence)
-       {
-               if (!first)
-                       appendPQExpBufferStr(query, ", ");
-
-               appendPQExpBufferStr(query, "sequence");
-               first = false;
-       }
-
        appendPQExpBufferStr(query, "'");
 
        if (pubinfo->pubviaroot)
@@ -4039,7 +4013,6 @@ getPublicationNamespaces(Archive *fout)
        int                     i_oid;
        int                     i_pnpubid;
        int                     i_pnnspid;
-       int                     i_pntype;
        int                     i,
                                j,
                                ntups;
@@ -4051,7 +4024,7 @@ getPublicationNamespaces(Archive *fout)
 
        /* Collect all publication membership info. */
        appendPQExpBufferStr(query,
-                                                "SELECT tableoid, oid, pnpubid, pnnspid, pntype "
+                                                "SELECT tableoid, oid, pnpubid, pnnspid "
                                                 "FROM pg_catalog.pg_publication_namespace");
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -4061,7 +4034,6 @@ getPublicationNamespaces(Archive *fout)
        i_oid = PQfnumber(res, "oid");
        i_pnpubid = PQfnumber(res, "pnpubid");
        i_pnnspid = PQfnumber(res, "pnnspid");
-       i_pntype = PQfnumber(res, "pntype");
 
        /* this allocation may be more than we need */
        pubsinfo = pg_malloc(ntups * sizeof(PublicationSchemaInfo));
@@ -4071,7 +4043,6 @@ getPublicationNamespaces(Archive *fout)
        {
                Oid                     pnpubid = atooid(PQgetvalue(res, i, i_pnpubid));
                Oid                     pnnspid = atooid(PQgetvalue(res, i, i_pnnspid));
-               char            pntype = PQgetvalue(res, i, i_pntype)[0];
                PublicationInfo *pubinfo;
                NamespaceInfo *nspinfo;
 
@@ -4103,7 +4074,6 @@ getPublicationNamespaces(Archive *fout)
                pubsinfo[j].dobj.name = nspinfo->dobj.name;
                pubsinfo[j].publication = pubinfo;
                pubsinfo[j].pubschema = nspinfo;
-               pubsinfo[j].pubtype = pntype;
 
                /* Decide whether we want to dump it */
                selectDumpablePublicationObject(&(pubsinfo[j].dobj), fout);
@@ -4269,11 +4239,7 @@ dumpPublicationNamespace(Archive *fout, const PublicationSchemaInfo *pubsinfo)
        query = createPQExpBuffer();
 
        appendPQExpBuffer(query, "ALTER PUBLICATION %s ", fmtId(pubinfo->dobj.name));
-
-       if (pubsinfo->pubtype == 't')
-               appendPQExpBuffer(query, "ADD ALL TABLES IN SCHEMA %s;\n", fmtId(schemainfo->dobj.name));
-       else
-               appendPQExpBuffer(query, "ADD ALL SEQUENCES IN SCHEMA %s;\n", fmtId(schemainfo->dobj.name));
+       appendPQExpBuffer(query, "ADD ALL TABLES IN SCHEMA %s;\n", fmtId(schemainfo->dobj.name));
 
        /*
         * There is no point in creating drop query as the drop is done by schema
@@ -4306,7 +4272,6 @@ dumpPublicationTable(Archive *fout, const PublicationRelInfo *pubrinfo)
        TableInfo  *tbinfo = pubrinfo->pubtable;
        PQExpBuffer query;
        char       *tag;
-       char       *description;
 
        /* Do nothing in data-only dump */
        if (dopt->dataOnly)
@@ -4316,19 +4281,8 @@ dumpPublicationTable(Archive *fout, const PublicationRelInfo *pubrinfo)
 
        query = createPQExpBuffer();
 
-       if (tbinfo->relkind == RELKIND_SEQUENCE)
-       {
-               appendPQExpBuffer(query, "ALTER PUBLICATION %s ADD SEQUENCE",
-                                                 fmtId(pubinfo->dobj.name));
-               description = "PUBLICATION SEQUENCE";
-       }
-       else
-       {
-               appendPQExpBuffer(query, "ALTER PUBLICATION %s ADD TABLE ONLY",
-                                                 fmtId(pubinfo->dobj.name));
-               description = "PUBLICATION TABLE";
-       }
-
+       appendPQExpBuffer(query, "ALTER PUBLICATION %s ADD TABLE ONLY",
+                                         fmtId(pubinfo->dobj.name));
        appendPQExpBuffer(query, " %s",
                                          fmtQualifiedDumpable(tbinfo));
 
@@ -4357,7 +4311,7 @@ dumpPublicationTable(Archive *fout, const PublicationRelInfo *pubrinfo)
                                         ARCHIVE_OPTS(.tag = tag,
                                                                  .namespace = tbinfo->dobj.namespace->dobj.name,
                                                                  .owner = pubinfo->rolname,
-                                                                 .description = description,
+                                                                 .description = "PUBLICATION TABLE",
                                                                  .section = SECTION_POST_DATA,
                                                                  .createStmt = query->data));
 
index 688093c55e023b386c8398384b444854c3b6ce5e..1d21c2906f114a7b7f5f6b0ef64328a12b97ed96 100644 (file)
@@ -615,12 +615,10 @@ typedef struct _PublicationInfo
        DumpableObject dobj;
        const char *rolname;
        bool            puballtables;
-       bool            puballsequences;
        bool            pubinsert;
        bool            pubupdate;
        bool            pubdelete;
        bool            pubtruncate;
-       bool            pubsequence;
        bool            pubviaroot;
 } PublicationInfo;
 
@@ -646,7 +644,6 @@ typedef struct _PublicationSchemaInfo
        DumpableObject dobj;
        PublicationInfo *publication;
        NamespaceInfo *pubschema;
-       char pubtype;
 } PublicationSchemaInfo;
 
 /*
index 75b754a4202d3c18c20b52fd29bb8a0183c85328..c65c92bfb0e7505b56493fd2c96cc2ee2d0a85a6 100644 (file)
@@ -2420,7 +2420,7 @@ my %tests = (
                create_order => 50,
                create_sql   => 'CREATE PUBLICATION pub1;',
                regexp       => qr/^
-                       \QCREATE PUBLICATION pub1 WITH (publish = 'insert, update, delete, truncate, sequence');\E
+                       \QCREATE PUBLICATION pub1 WITH (publish = 'insert, update, delete, truncate');\E
                        /xm,
                like => { %full_runs, section_post_data => 1, },
        },
@@ -2440,27 +2440,16 @@ my %tests = (
                create_order => 50,
                create_sql   => 'CREATE PUBLICATION pub3;',
                regexp => qr/^
-                       \QCREATE PUBLICATION pub3 WITH (publish = 'insert, update, delete, truncate, sequence');\E
+                       \QCREATE PUBLICATION pub3 WITH (publish = 'insert, update, delete, truncate');\E
                        /xm,
                like => { %full_runs, section_post_data => 1, },
        },
 
        'CREATE PUBLICATION pub4' => {
                create_order => 50,
-               create_sql   => 'CREATE PUBLICATION pub4
-                                                FOR ALL SEQUENCES
-                                                WITH (publish = \'\');',
+               create_sql   => 'CREATE PUBLICATION pub4;',
                regexp => qr/^
-                       \QCREATE PUBLICATION pub4 FOR ALL SEQUENCES WITH (publish = '');\E
-                       /xm,
-               like => { %full_runs, section_post_data => 1, },
-       },
-
-       'CREATE PUBLICATION pub5' => {
-               create_order => 50,
-               create_sql   => 'CREATE PUBLICATION pub5;',
-               regexp => qr/^
-                       \QCREATE PUBLICATION pub5 WITH (publish = 'insert, update, delete, truncate, sequence');\E
+                       \QCREATE PUBLICATION pub4 WITH (publish = 'insert, update, delete, truncate');\E
                        /xm,
                like => { %full_runs, section_post_data => 1, },
        },
@@ -2569,27 +2558,6 @@ my %tests = (
                unlike => { exclude_dump_test_schema => 1, },
        },
 
-       'ALTER PUBLICATION pub3 ADD ALL SEQUENCES IN SCHEMA dump_test' => {
-               create_order => 51,
-               create_sql =>
-                 'ALTER PUBLICATION pub3 ADD ALL SEQUENCES IN SCHEMA dump_test;',
-               regexp => qr/^
-                       \QALTER PUBLICATION pub3 ADD ALL SEQUENCES IN SCHEMA dump_test;\E
-                       /xm,
-               like   => { %full_runs, section_post_data => 1, },
-               unlike => { exclude_dump_test_schema => 1, },
-       },
-
-       'ALTER PUBLICATION pub3 ADD ALL SEQUENCES IN SCHEMA public' => {
-               create_order => 52,
-               create_sql =>
-                 'ALTER PUBLICATION pub3 ADD ALL SEQUENCES IN SCHEMA public;',
-               regexp => qr/^
-                       \QALTER PUBLICATION pub3 ADD ALL SEQUENCES IN SCHEMA public;\E
-                       /xm,
-               like => { %full_runs, section_post_data => 1, },
-       },
-
        'CREATE SCHEMA public' => {
                regexp => qr/^CREATE SCHEMA public;/m,
 
index 73bbbe2eb404c2b18f99c7253859db4d83aa5f8b..3f1b3802c225e121f0fc443503e952fc3452494c 100644 (file)
@@ -1633,19 +1633,28 @@ describeOneTableDetails(const char *schemaname,
        if (tableinfo.relkind == RELKIND_SEQUENCE)
        {
                PGresult   *result = NULL;
+               printQueryOpt myopt = pset.popt;
+               char       *footers[2] = {NULL, NULL};
 
                if (pset.sversion >= 100000)
                {
                        printfPQExpBuffer(&buf,
-                                                         "SELECT pg_catalog.format_type(seqtypid, NULL),\n"
-                                                         "       seqstart,\n"
-                                                         "       seqmin,\n"
-                                                         "       seqmax,\n"
-                                                         "       seqincrement,\n"
-                                                         "       CASE WHEN seqcycle THEN '%s' ELSE '%s' END,\n"
-                                                         "       seqcache\n",
+                                                         "SELECT pg_catalog.format_type(seqtypid, NULL) AS \"%s\",\n"
+                                                         "       seqstart AS \"%s\",\n"
+                                                         "       seqmin AS \"%s\",\n"
+                                                         "       seqmax AS \"%s\",\n"
+                                                         "       seqincrement AS \"%s\",\n"
+                                                         "       CASE WHEN seqcycle THEN '%s' ELSE '%s' END AS \"%s\",\n"
+                                                         "       seqcache AS \"%s\"\n",
+                                                         gettext_noop("Type"),
+                                                         gettext_noop("Start"),
+                                                         gettext_noop("Minimum"),
+                                                         gettext_noop("Maximum"),
+                                                         gettext_noop("Increment"),
                                                          gettext_noop("yes"),
-                                                         gettext_noop("no"));
+                                                         gettext_noop("no"),
+                                                         gettext_noop("Cycles?"),
+                                                         gettext_noop("Cache"));
                        appendPQExpBuffer(&buf,
                                                          "FROM pg_catalog.pg_sequence\n"
                                                          "WHERE seqrelid = '%s';",
@@ -1654,15 +1663,22 @@ describeOneTableDetails(const char *schemaname,
                else
                {
                        printfPQExpBuffer(&buf,
-                                                         "SELECT 'bigint',\n"
-                                                         "       start_value,\n"
-                                                         "       min_value,\n"
-                                                         "       max_value,\n"
-                                                         "       increment_by,\n"
-                                                         "       CASE WHEN is_cycled THEN '%s' ELSE '%s' END,\n"
-                                                         "       cache_value\n",
+                                                         "SELECT 'bigint' AS \"%s\",\n"
+                                                         "       start_value AS \"%s\",\n"
+                                                         "       min_value AS \"%s\",\n"
+                                                         "       max_value AS \"%s\",\n"
+                                                         "       increment_by AS \"%s\",\n"
+                                                         "       CASE WHEN is_cycled THEN '%s' ELSE '%s' END AS \"%s\",\n"
+                                                         "       cache_value AS \"%s\"\n",
+                                                         gettext_noop("Type"),
+                                                         gettext_noop("Start"),
+                                                         gettext_noop("Minimum"),
+                                                         gettext_noop("Maximum"),
+                                                         gettext_noop("Increment"),
                                                          gettext_noop("yes"),
-                                                         gettext_noop("no"));
+                                                         gettext_noop("no"),
+                                                         gettext_noop("Cycles?"),
+                                                         gettext_noop("Cache"));
                        appendPQExpBuffer(&buf, "FROM %s", fmtId(schemaname));
                        /* must be separate because fmtId isn't reentrant */
                        appendPQExpBuffer(&buf, ".%s;", fmtId(relationname));
@@ -1672,57 +1688,6 @@ describeOneTableDetails(const char *schemaname,
                if (!res)
                        goto error_return;
 
-               numrows = PQntuples(res);
-
-               /* XXX reset to use expanded output for sequences (maybe we should
-                * keep this disabled, just like for tables?) */
-               myopt.expanded = pset.popt.topt.expanded;
-
-               printTableInit(&cont, &myopt, title.data, 7, numrows);
-               printTableInitialized = true;
-
-               if (tableinfo.relpersistence == 'u')
-                       printfPQExpBuffer(&title, _("Unlogged sequence \"%s.%s\""),
-                                                         schemaname, relationname);
-               else
-                       printfPQExpBuffer(&title, _("Sequence \"%s.%s\""),
-                                                         schemaname, relationname);
-
-               printTableAddHeader(&cont, gettext_noop("Type"), true, 'l');
-               printTableAddHeader(&cont, gettext_noop("Start"), true, 'r');
-               printTableAddHeader(&cont, gettext_noop("Minimum"), true, 'r');
-               printTableAddHeader(&cont, gettext_noop("Maximum"), true, 'r');
-               printTableAddHeader(&cont, gettext_noop("Increment"), true, 'r');
-               printTableAddHeader(&cont, gettext_noop("Cycles?"), true, 'l');
-               printTableAddHeader(&cont, gettext_noop("Cache"), true, 'r');
-
-               /* Generate table cells to be printed */
-               for (i = 0; i < numrows; i++)
-               {
-                       /* Type */
-                       printTableAddCell(&cont, PQgetvalue(res, i, 0), false, false);
-
-                       /* Start */
-                       printTableAddCell(&cont, PQgetvalue(res, i, 1), false, false);
-
-                       /* Minimum */
-                       printTableAddCell(&cont, PQgetvalue(res, i, 2), false, false);
-
-                       /* Maximum */
-                       printTableAddCell(&cont, PQgetvalue(res, i, 3), false, false);
-
-                       /* Increment */
-                       printTableAddCell(&cont, PQgetvalue(res, i, 4), false, false);
-
-                       /* Cycles? */
-                       printTableAddCell(&cont, PQgetvalue(res, i, 5), false, false);
-
-                       /* Cache */
-                       printTableAddCell(&cont, PQgetvalue(res, i, 6), false, false);
-               }
-
-               /* Footer information about a sequence */
-
                /* Get the column that owns this sequence */
                printfPQExpBuffer(&buf, "SELECT pg_catalog.quote_ident(nspname) || '.' ||"
                                                  "\n   pg_catalog.quote_ident(relname) || '.' ||"
@@ -1754,63 +1719,33 @@ describeOneTableDetails(const char *schemaname,
                        switch (PQgetvalue(result, 0, 1)[0])
                        {
                                case 'a':
-                                       printTableAddFooter(&cont,
-                                                                               psprintf(_("Owned by: %s"),
-                                                                                                PQgetvalue(result, 0, 0)));
+                                       footers[0] = psprintf(_("Owned by: %s"),
+                                                                                 PQgetvalue(result, 0, 0));
                                        break;
                                case 'i':
-                                       printTableAddFooter(&cont,
-                                                                               psprintf(_("Sequence for identity column: %s"),
-                                                                                                PQgetvalue(result, 0, 0)));
+                                       footers[0] = psprintf(_("Sequence for identity column: %s"),
+                                                                                 PQgetvalue(result, 0, 0));
                                        break;
                        }
                }
                PQclear(result);
 
-               /* print any publications */
-               if (pset.sversion >= 150000)
-               {
-                       int                     tuples = 0;
-
-                       printfPQExpBuffer(&buf,
-                                                         "SELECT pubname\n"
-                                                         "FROM pg_catalog.pg_publication p\n"
-                                                         "             JOIN pg_catalog.pg_publication_namespace pn ON p.oid = pn.pnpubid\n"
-                                                         "             JOIN pg_catalog.pg_class pc ON pc.relnamespace = pn.pnnspid\n"
-                                                         "WHERE pc.oid ='%s' and pn.pntype = 's' and pg_catalog.pg_relation_is_publishable('%s')\n"
-                                                         "UNION\n"
-                                                         "SELECT pubname\n"
-                                                         "FROM pg_catalog.pg_publication p\n"
-                                                         "             JOIN pg_catalog.pg_publication_rel pr ON p.oid = pr.prpubid\n"
-                                                         "WHERE pr.prrelid = '%s'\n"
-                                                         "UNION\n"
-                                                         "SELECT pubname\n"
-                                                         "FROM pg_catalog.pg_publication p\n"
-                                                         "WHERE p.puballsequences AND pg_catalog.pg_relation_is_publishable('%s')\n"
-                                                         "ORDER BY 1;",
-                                                         oid, oid, oid, oid);
-
-                       result = PSQLexec(buf.data);
-                       if (!result)
-                               goto error_return;
-                       else
-                               tuples = PQntuples(result);
-
-                       if (tuples > 0)
-                               printTableAddFooter(&cont, _("Publications:"));
+               if (tableinfo.relpersistence == 'u')
+                       printfPQExpBuffer(&title, _("Unlogged sequence \"%s.%s\""),
+                                                         schemaname, relationname);
+               else
+                       printfPQExpBuffer(&title, _("Sequence \"%s.%s\""),
+                                                         schemaname, relationname);
 
-                       /* Might be an empty set - that's ok */
-                       for (i = 0; i < tuples; i++)
-                       {
-                               printfPQExpBuffer(&buf, "    \"%s\"",
-                                                                 PQgetvalue(result, i, 0));
+               myopt.footers = footers;
+               myopt.topt.default_footer = false;
+               myopt.title = title.data;
+               myopt.translate_header = true;
 
-                               printTableAddFooter(&cont, buf.data);
-                       }
-                       PQclear(result);
-               }
+               printQuery(res, &myopt, pset.queryFout, false, pset.logfile);
 
-               printTable(&cont, pset.queryFout, false, pset.logfile);
+               if (footers[0])
+                       free(footers[0]);
 
                retval = true;
                goto error_return;              /* not an error, just return early */
@@ -2037,11 +1972,6 @@ describeOneTableDetails(const char *schemaname,
        for (i = 0; i < cols; i++)
                printTableAddHeader(&cont, headers[i], true, 'l');
 
-       res = PSQLexec(buf.data);
-       if (!res)
-               goto error_return;
-       numrows = PQntuples(res);
-
        /* Generate table cells to be printed */
        for (i = 0; i < numrows; i++)
        {
@@ -2968,7 +2898,7 @@ describeOneTableDetails(const char *schemaname,
                                                                  "FROM pg_catalog.pg_publication p\n"
                                                                  "             JOIN pg_catalog.pg_publication_namespace pn ON p.oid = pn.pnpubid\n"
                                                                  "             JOIN pg_catalog.pg_class pc ON pc.relnamespace = pn.pnnspid\n"
-                                                                 "WHERE pc.oid ='%s' and pn.pntype = 't' and pg_catalog.pg_relation_is_publishable('%s')\n"
+                                                                 "WHERE pc.oid ='%s' and pg_catalog.pg_relation_is_publishable('%s')\n"
                                                                  "UNION\n"
                                                                  "SELECT pubname\n"
                                                                  "             , pg_get_expr(pr.prqual, c.oid)\n"
@@ -4872,7 +4802,7 @@ listSchemas(const char *pattern, bool verbose, bool showSystem)
                int                     i;
 
                printfPQExpBuffer(&buf,
-                                                 "SELECT pubname, (CASE WHEN pntype = 't' THEN 'tables' ELSE 'sequences' END) AS pubtype\n"
+                                                 "SELECT pubname \n"
                                                  "FROM pg_catalog.pg_publication p\n"
                                                  "             JOIN pg_catalog.pg_publication_namespace pn ON p.oid = pn.pnpubid\n"
                                                  "             JOIN pg_catalog.pg_namespace n ON n.oid = pn.pnnspid \n"
@@ -4901,9 +4831,8 @@ listSchemas(const char *pattern, bool verbose, bool showSystem)
                        /* Might be an empty set - that's ok */
                        for (i = 0; i < pub_schema_tuples; i++)
                        {
-                               printfPQExpBuffer(&buf, "    \"%s\" (%s)",
-                                                                 PQgetvalue(result, i, 0),
-                                                                 PQgetvalue(result, i, 1));
+                               printfPQExpBuffer(&buf, "    \"%s\"",
+                                                                 PQgetvalue(result, i, 0));
 
                                footers[i + 1] = pg_strdup(buf.data);
                        }
@@ -5908,7 +5837,7 @@ listPublications(const char *pattern)
        PQExpBufferData buf;
        PGresult   *res;
        printQueryOpt myopt = pset.popt;
-       static const bool translate_columns[] = {false, false, false, false, false, false, false, false, false, false};
+       static const bool translate_columns[] = {false, false, false, false, false, false, false, false};
 
        if (pset.sversion < 100000)
        {
@@ -5922,45 +5851,23 @@ listPublications(const char *pattern)
 
        initPQExpBuffer(&buf);
 
-       if (pset.sversion >= 150000)
-               printfPQExpBuffer(&buf,
-                                                 "SELECT pubname AS \"%s\",\n"
-                                                 "  pg_catalog.pg_get_userbyid(pubowner) AS \"%s\",\n"
-                                                 "  puballtables AS \"%s\",\n"
-                                                 "  puballsequences AS \"%s\",\n"
-                                                 "  pubinsert AS \"%s\",\n"
-                                                 "  pubupdate AS \"%s\",\n"
-                                                 "  pubdelete AS \"%s\"",
-                                                 gettext_noop("Name"),
-                                                 gettext_noop("Owner"),
-                                                 gettext_noop("All tables"),
-                                                 gettext_noop("All sequences"),
-                                                 gettext_noop("Inserts"),
-                                                 gettext_noop("Updates"),
-                                                 gettext_noop("Deletes"));
-       else
-               printfPQExpBuffer(&buf,
-                                                 "SELECT pubname AS \"%s\",\n"
-                                                 "  pg_catalog.pg_get_userbyid(pubowner) AS \"%s\",\n"
-                                                 "  puballtables AS \"%s\",\n"
-                                                 "  pubinsert AS \"%s\",\n"
-                                                 "  pubupdate AS \"%s\",\n"
-                                                 "  pubdelete AS \"%s\"",
-                                                 gettext_noop("Name"),
-                                                 gettext_noop("Owner"),
-                                                 gettext_noop("All tables"),
-                                                 gettext_noop("Inserts"),
-                                                 gettext_noop("Updates"),
-                                                 gettext_noop("Deletes"));
-
+       printfPQExpBuffer(&buf,
+                                         "SELECT pubname AS \"%s\",\n"
+                                         "  pg_catalog.pg_get_userbyid(pubowner) AS \"%s\",\n"
+                                         "  puballtables AS \"%s\",\n"
+                                         "  pubinsert AS \"%s\",\n"
+                                         "  pubupdate AS \"%s\",\n"
+                                         "  pubdelete AS \"%s\"",
+                                         gettext_noop("Name"),
+                                         gettext_noop("Owner"),
+                                         gettext_noop("All tables"),
+                                         gettext_noop("Inserts"),
+                                         gettext_noop("Updates"),
+                                         gettext_noop("Deletes"));
        if (pset.sversion >= 110000)
                appendPQExpBuffer(&buf,
                                                  ",\n  pubtruncate AS \"%s\"",
                                                  gettext_noop("Truncates"));
-       if (pset.sversion >= 150000)
-               appendPQExpBuffer(&buf,
-                                                 ",\n  pubsequence AS \"%s\"",
-                                                 gettext_noop("Sequences"));
        if (pset.sversion >= 130000)
                appendPQExpBuffer(&buf,
                                                  ",\n  pubviaroot AS \"%s\"",
@@ -6050,7 +5957,6 @@ describePublications(const char *pattern)
        PGresult   *res;
        bool            has_pubtruncate;
        bool            has_pubviaroot;
-       bool            has_pubsequence;
 
        PQExpBufferData title;
        printTableContent cont;
@@ -6067,7 +5973,6 @@ describePublications(const char *pattern)
 
        has_pubtruncate = (pset.sversion >= 110000);
        has_pubviaroot = (pset.sversion >= 130000);
-       has_pubsequence = (pset.sversion >= 150000);
 
        initPQExpBuffer(&buf);
 
@@ -6075,17 +5980,12 @@ describePublications(const char *pattern)
                                          "SELECT oid, pubname,\n"
                                          "  pg_catalog.pg_get_userbyid(pubowner) AS owner,\n"
                                          "  puballtables, pubinsert, pubupdate, pubdelete");
-
        if (has_pubtruncate)
                appendPQExpBufferStr(&buf,
                                                         ", pubtruncate");
        if (has_pubviaroot)
                appendPQExpBufferStr(&buf,
                                                         ", pubviaroot");
-       if (has_pubsequence)
-               appendPQExpBufferStr(&buf,
-                                                        ", puballsequences, pubsequence");
-
        appendPQExpBufferStr(&buf,
                                                 "\nFROM pg_catalog.pg_publication\n");
 
@@ -6126,7 +6026,6 @@ describePublications(const char *pattern)
                char       *pubid = PQgetvalue(res, i, 0);
                char       *pubname = PQgetvalue(res, i, 1);
                bool            puballtables = strcmp(PQgetvalue(res, i, 3), "t") == 0;
-               bool            puballsequences = strcmp(PQgetvalue(res, i, 9), "t") == 0;
                printTableOpt myopt = pset.popt.topt;
 
                if (has_pubtruncate)
@@ -6134,43 +6033,29 @@ describePublications(const char *pattern)
                if (has_pubviaroot)
                        ncols++;
 
-               /* sequences have two extra columns (puballsequences, pubsequences) */
-               if (has_pubsequence)
-                       ncols += 2;
-
                initPQExpBuffer(&title);
                printfPQExpBuffer(&title, _("Publication %s"), pubname);
                printTableInit(&cont, &myopt, title.data, ncols, nrows);
 
                printTableAddHeader(&cont, gettext_noop("Owner"), true, align);
                printTableAddHeader(&cont, gettext_noop("All tables"), true, align);
-               if (has_pubsequence)
-                       printTableAddHeader(&cont, gettext_noop("All sequences"), true, align);
                printTableAddHeader(&cont, gettext_noop("Inserts"), true, align);
                printTableAddHeader(&cont, gettext_noop("Updates"), true, align);
                printTableAddHeader(&cont, gettext_noop("Deletes"), true, align);
                if (has_pubtruncate)
                        printTableAddHeader(&cont, gettext_noop("Truncates"), true, align);
-               if (has_pubsequence)
-                       printTableAddHeader(&cont, gettext_noop("Sequences"), true, align);
                if (has_pubviaroot)
                        printTableAddHeader(&cont, gettext_noop("Via root"), true, align);
 
-               printTableAddCell(&cont, PQgetvalue(res, i, 2), false, false); /* owner */
-               printTableAddCell(&cont, PQgetvalue(res, i, 3), false, false); /* all tables */
-
-               if (has_pubsequence)
-                       printTableAddCell(&cont, PQgetvalue(res, i, 9), false, false); /* all sequences */
-
-               printTableAddCell(&cont, PQgetvalue(res, i, 4), false, false); /* insert */
-               printTableAddCell(&cont, PQgetvalue(res, i, 5), false, false); /* update */
-               printTableAddCell(&cont, PQgetvalue(res, i, 6), false, false); /* delete */
+               printTableAddCell(&cont, PQgetvalue(res, i, 2), false, false);
+               printTableAddCell(&cont, PQgetvalue(res, i, 3), false, false);
+               printTableAddCell(&cont, PQgetvalue(res, i, 4), false, false);
+               printTableAddCell(&cont, PQgetvalue(res, i, 5), false, false);
+               printTableAddCell(&cont, PQgetvalue(res, i, 6), false, false);
                if (has_pubtruncate)
-                       printTableAddCell(&cont, PQgetvalue(res, i, 7), false, false); /* truncate */
-               if (has_pubsequence)
-                       printTableAddCell(&cont, PQgetvalue(res, i, 10), false, false); /* sequence */
+                       printTableAddCell(&cont, PQgetvalue(res, i, 7), false, false);
                if (has_pubviaroot)
-                       printTableAddCell(&cont, PQgetvalue(res, i, 8), false, false); /* via root */
+                       printTableAddCell(&cont, PQgetvalue(res, i, 8), false, false);
 
                if (!puballtables)
                {
@@ -6201,7 +6086,6 @@ describePublications(const char *pattern)
                                                          "WHERE c.relnamespace = n.oid\n"
                                                          "  AND c.oid = pr.prrelid\n"
                                                          "  AND pr.prpubid = '%s'\n"
-                                                         "  AND c.relkind != 'S'\n" /* exclude sequences */
                                                          "ORDER BY 1,2", pubid);
                        if (!addFooterToPublicationDesc(&buf, "Tables:", false, &cont))
                                goto error_return;
@@ -6213,7 +6097,7 @@ describePublications(const char *pattern)
                                                                  "SELECT n.nspname\n"
                                                                  "FROM pg_catalog.pg_namespace n\n"
                                                                  "     JOIN pg_catalog.pg_publication_namespace pn ON n.oid = pn.pnnspid\n"
-                                                                 "WHERE pn.pnpubid = '%s' AND pn.pntype = 't'\n"
+                                                                 "WHERE pn.pnpubid = '%s'\n"
                                                                  "ORDER BY 1", pubid);
                                if (!addFooterToPublicationDesc(&buf, "Tables from schemas:",
                                                                                                true, &cont))
@@ -6221,37 +6105,6 @@ describePublications(const char *pattern)
                        }
                }
 
-               if (!puballsequences)
-               {
-                       /* Get the sequences for the specified publication */
-                       printfPQExpBuffer(&buf,
-                                                         "SELECT n.nspname, c.relname, NULL, NULL\n"
-                                                         "FROM pg_catalog.pg_class c,\n"
-                                                         "     pg_catalog.pg_namespace n,\n"
-                                                         "     pg_catalog.pg_publication_rel pr\n"
-                                                         "WHERE c.relnamespace = n.oid\n"
-                                                         "  AND c.oid = pr.prrelid\n"
-                                                         "  AND pr.prpubid = '%s'\n"
-                                                         "  AND c.relkind = 'S'\n" /* only sequences */
-                                                         "ORDER BY 1,2", pubid);
-                       if (!addFooterToPublicationDesc(&buf, "Sequences:", false, &cont))
-                               goto error_return;
-
-                       if (pset.sversion >= 150000)
-                       {
-                               /* Get the schemas for the specified publication */
-                               printfPQExpBuffer(&buf,
-                                                                 "SELECT n.nspname\n"
-                                                                 "FROM pg_catalog.pg_namespace n\n"
-                                                                 "     JOIN pg_catalog.pg_publication_namespace pn ON n.oid = pn.pnnspid\n"
-                                                                 "WHERE pn.pnpubid = '%s' AND pn.pntype = 's'\n"
-                                                                 "ORDER BY 1", pubid);
-                               if (!addFooterToPublicationDesc(&buf, "Sequences from schemas:",
-                                                                                               true, &cont))
-                                       goto error_return;
-                       }
-               }
-
                printTable(&cont, pset.queryFout, false, pset.logfile);
                printTableCleanup(&cont);
 
index 025d3f71a114a5a642692b10b79eaf95a4308141..a2df39d0c1b6f9eced3f438e48cb14887e7cc193 100644 (file)
@@ -1827,15 +1827,11 @@ psql_completion(const char *text, int start, int end)
                COMPLETE_WITH("ADD", "DROP", "OWNER TO", "RENAME TO", "SET");
        /* ALTER PUBLICATION <name> ADD */
        else if (Matches("ALTER", "PUBLICATION", MatchAny, "ADD"))
-               COMPLETE_WITH("ALL TABLES IN SCHEMA", "ALL SEQUENCES IN SCHEMA", "TABLE", "SEQUENCE");
+               COMPLETE_WITH("ALL TABLES IN SCHEMA", "TABLE");
        else if (Matches("ALTER", "PUBLICATION", MatchAny, "ADD|SET", "TABLE") ||
                         (HeadMatches("ALTER", "PUBLICATION", MatchAny, "ADD|SET", "TABLE") &&
                          ends_with(prev_wd, ',')))
                COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
-       else if (Matches("ALTER", "PUBLICATION", MatchAny, "ADD|SET", "SEQUENCE") ||
-                        (HeadMatches("ALTER", "PUBLICATION", MatchAny, "ADD|SET", "SEQUENCE") &&
-                         ends_with(prev_wd, ',')))
-               COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences);
        /*
         * "ALTER PUBLICATION <name> SET TABLE <name> WHERE (" - complete with
         * table attributes
@@ -1854,11 +1850,11 @@ psql_completion(const char *text, int start, int end)
                COMPLETE_WITH(",");
        /* ALTER PUBLICATION <name> DROP */
        else if (Matches("ALTER", "PUBLICATION", MatchAny, "DROP"))
-               COMPLETE_WITH("ALL TABLES IN SCHEMA", "ALL SEQUENCES IN SCHEMA", "TABLE", "SEQUENCE");
+               COMPLETE_WITH("ALL TABLES IN SCHEMA", "TABLE");
        /* ALTER PUBLICATION <name> SET */
        else if (Matches("ALTER", "PUBLICATION", MatchAny, "SET"))
-               COMPLETE_WITH("(", "ALL TABLES IN SCHEMA", "ALL SEQUENCES IN SCHEMA", "TABLE", "SEQUENCE");
-       else if (Matches("ALTER", "PUBLICATION", MatchAny, "ADD|DROP|SET", "ALL", "TABLES|SEQUENCES", "IN", "SCHEMA"))
+               COMPLETE_WITH("(", "ALL TABLES IN SCHEMA", "TABLE");
+       else if (Matches("ALTER", "PUBLICATION", MatchAny, "ADD|DROP|SET", "ALL", "TABLES", "IN", "SCHEMA"))
                COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
                                                                 " AND nspname NOT LIKE E'pg\\\\_%%'",
                                                                 "CURRENT_SCHEMA");
@@ -2988,27 +2984,21 @@ psql_completion(const char *text, int start, int end)
 
 /* CREATE PUBLICATION */
        else if (Matches("CREATE", "PUBLICATION", MatchAny))
-               COMPLETE_WITH("FOR TABLE", "FOR ALL TABLES", "FOR ALL TABLES IN SCHEMA",
-                                         "FOR SEQUENCE", "FOR ALL SEQUENCES", "FOR ALL SEQUENCES IN SCHEMA",
-                                         "WITH (");
+               COMPLETE_WITH("FOR TABLE", "FOR ALL TABLES", "FOR ALL TABLES IN SCHEMA", "WITH (");
        else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR"))
-               COMPLETE_WITH("TABLE", "ALL TABLES", "ALL TABLES IN SCHEMA",
-                                         "SEQUENCE", "ALL SEQUENCES", "ALL SEQUENCES IN SCHEMA");
+               COMPLETE_WITH("TABLE", "ALL TABLES", "ALL TABLES IN SCHEMA");
        else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL"))
-               COMPLETE_WITH("TABLES", "TABLES IN SCHEMA", "SEQUENCES", "SEQUENCES IN SCHEMA");
-       else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES|SEQUENCES"))
+               COMPLETE_WITH("TABLES", "TABLES IN SCHEMA");
+       else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES"))
                COMPLETE_WITH("IN SCHEMA", "WITH (");
-       else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "TABLE|SEQUENCE", MatchAny) && !ends_with(prev_wd, ','))
+       else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "TABLE", MatchAny) && !ends_with(prev_wd, ','))
                COMPLETE_WITH("WHERE (", "WITH (");
        /* Complete "CREATE PUBLICATION <name> FOR TABLE" with "<table>, ..." */
        else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "TABLE"))
                COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
-       /* Complete "CREATE PUBLICATION <name> FOR SEQUENCE" with "<sequence>, ..." */
-       else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "SEQUENCE"))
-               COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences);
 
        /*
-        * "CREATE PUBLICATION <name> FOR TABLE|SEQUENCE <name> WHERE (" - complete with
+        * "CREATE PUBLICATION <name> FOR TABLE <name> WHERE (" - complete with
         * table attributes
         */
        else if (HeadMatches("CREATE", "PUBLICATION", MatchAny) && TailMatches("WHERE"))
@@ -3019,14 +3009,14 @@ psql_completion(const char *text, int start, int end)
                COMPLETE_WITH(" WITH (");
 
        /*
-        * Complete "CREATE PUBLICATION <name> FOR ALL TABLES|SEQUENCES IN SCHEMA <schema>,
+        * Complete "CREATE PUBLICATION <name> FOR ALL TABLES IN SCHEMA <schema>,
         * ..."
         */
-       else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES|SEQUENCES", "IN", "SCHEMA"))
+       else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES", "IN", "SCHEMA"))
                COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
                                                                 " AND nspname NOT LIKE E'pg\\\\_%%'",
                                                                 "CURRENT_SCHEMA");
-       else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES|SEQUENCES", "IN", "SCHEMA", MatchAny) && (!ends_with(prev_wd, ',')))
+       else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES", "IN", "SCHEMA", MatchAny) && (!ends_with(prev_wd, ',')))
                COMPLETE_WITH("WITH (");
        /* Complete "CREATE PUBLICATION <name> [...] WITH" */
        else if (HeadMatches("CREATE", "PUBLICATION") && TailMatches("WITH", "("))
index cf8b6d48193a90d72fbb536335ea47675e89cedf..9a74721c97cdec6ccb2e3c7474edd1ab3053a232 100644 (file)
@@ -40,7 +40,7 @@ PG_RMGR(RM_BTREE_ID, "Btree", btree_redo, btree_desc, btree_identify, btree_xlog
 PG_RMGR(RM_HASH_ID, "Hash", hash_redo, hash_desc, hash_identify, NULL, NULL, hash_mask, NULL)
 PG_RMGR(RM_GIN_ID, "Gin", gin_redo, gin_desc, gin_identify, gin_xlog_startup, gin_xlog_cleanup, gin_mask, NULL)
 PG_RMGR(RM_GIST_ID, "Gist", gist_redo, gist_desc, gist_identify, gist_xlog_startup, gist_xlog_cleanup, gist_mask, NULL)
-PG_RMGR(RM_SEQ_ID, "Sequence", seq_redo, seq_desc, seq_identify, NULL, NULL, seq_mask, sequence_decode)
+PG_RMGR(RM_SEQ_ID, "Sequence", seq_redo, seq_desc, seq_identify, NULL, NULL, seq_mask, NULL)
 PG_RMGR(RM_SPGIST_ID, "SPGist", spg_redo, spg_desc, spg_identify, spg_xlog_startup, spg_xlog_cleanup, spg_mask, NULL)
 PG_RMGR(RM_BRIN_ID, "BRIN", brin_redo, brin_desc, brin_identify, NULL, NULL, brin_mask, NULL)
 PG_RMGR(RM_COMMIT_TS_ID, "CommitTs", commit_ts_redo, commit_ts_desc, commit_ts_identify, NULL, NULL, NULL, NULL)
index 67f3d8526cdd83669644d45e8398313c2a70e9e9..cec70caae1fa365d509869d80d9d5f3f210bf38c 100644 (file)
@@ -53,6 +53,6 @@
  */
 
 /*                                                     yyyymmddN */
-#define CATALOG_VERSION_NO     202204074
+#define CATALOG_VERSION_NO     202204075
 
 #endif
index 61876c4e8089a64831f604f53e8ce691ecd959bb..52f56cf5b1b937e419c1e9396b2a2e48a811a3f5 100644 (file)
   provolatile => 's', prorettype => 'oid', proargtypes => 'text',
   proallargtypes => '{text,oid}', proargmodes => '{i,o}',
   proargnames => '{pubname,relid}', prosrc => 'pg_get_publication_tables' },
-{ oid => '8000', descr => 'get OIDs of sequences in a publication',
-  proname => 'pg_get_publication_sequences', prorows => '1000', proretset => 't',
-  provolatile => 's', prorettype => 'oid', proargtypes => 'text',
-  proallargtypes => '{text,oid}', proargmodes => '{i,o}',
-  proargnames => '{pubname,relid}', prosrc => 'pg_get_publication_sequences' },
 { oid => '6121',
   descr => 'returns whether a relation can be part of a publication',
   proname => 'pg_relation_is_publishable', provolatile => 's',
index 186d8ea74b6e89ffb496e26ebf6636e643dff43a..29b18566657ea1e033c5d1147086db9227e7a7dc 100644 (file)
@@ -40,12 +40,6 @@ CATALOG(pg_publication,6104,PublicationRelationId)
         */
        bool            puballtables;
 
-       /*
-        * indicates that this is special publication which should encompass all
-        * sequences in the database (except for the unlogged and temp ones)
-        */
-       bool            puballsequences;
-
        /* true if inserts are published */
        bool            pubinsert;
 
@@ -58,9 +52,6 @@ CATALOG(pg_publication,6104,PublicationRelationId)
        /* true if truncates are published */
        bool            pubtruncate;
 
-       /* true if sequences are published */
-       bool            pubsequence;
-
        /* true if partition changes are published using root schema */
        bool            pubviaroot;
 } FormData_pg_publication;
@@ -81,7 +72,6 @@ typedef struct PublicationActions
        bool            pubupdate;
        bool            pubdelete;
        bool            pubtruncate;
-       bool            pubsequence;
 } PublicationActions;
 
 typedef struct PublicationDesc
@@ -109,7 +99,6 @@ typedef struct Publication
        Oid                     oid;
        char       *name;
        bool            alltables;
-       bool            allsequences;
        bool            pubviaroot;
        PublicationActions pubactions;
 } Publication;
@@ -141,16 +130,14 @@ typedef enum PublicationPartOpt
        PUBLICATION_PART_ALL,
 } PublicationPartOpt;
 
-extern List *GetPublicationRelations(Oid pubid, char objectType,
-                                                                        PublicationPartOpt pub_partopt);
+extern List *GetPublicationRelations(Oid pubid, PublicationPartOpt pub_partopt);
 extern List *GetAllTablesPublications(void);
 extern List *GetAllTablesPublicationRelations(bool pubviaroot);
-extern void GetActionsInPublication(Oid pubid, PublicationActions *actions);
-extern List *GetPublicationSchemas(Oid pubid, char objectType);
-extern List *GetSchemaPublications(Oid schemaid, char objectType);
-extern List *GetSchemaPublicationRelations(Oid schemaid, char objectType,
+extern List *GetPublicationSchemas(Oid pubid);
+extern List *GetSchemaPublications(Oid schemaid);
+extern List *GetSchemaPublicationRelations(Oid schemaid,
                                                                                   PublicationPartOpt pub_partopt);
-extern List *GetAllSchemaPublicationRelations(Oid puboid, char objectType,
+extern List *GetAllSchemaPublicationRelations(Oid puboid,
                                                                                          PublicationPartOpt pub_partopt);
 extern List *GetPubPartitionOptionRelations(List *result,
                                                                                        PublicationPartOpt pub_partopt,
@@ -158,15 +145,11 @@ extern List *GetPubPartitionOptionRelations(List *result,
 extern Oid     GetTopMostAncestorInPublication(Oid puboid, List *ancestors,
                                                                                        int *ancestor_level);
 
-extern List *GetAllSequencesPublications(void);
-extern List *GetAllSequencesPublicationRelations(void);
-
 extern bool is_publishable_relation(Relation rel);
 extern bool is_schema_publication(Oid pubid);
 extern ObjectAddress publication_add_relation(Oid pubid, PublicationRelInfo *pri,
                                                                                          bool if_not_exists);
 extern ObjectAddress publication_add_schema(Oid pubid, Oid schemaid,
-                                                                                       char objectType,
                                                                                        bool if_not_exists);
 
 extern Bitmapset *pub_collist_to_bitmapset(Bitmapset *columns, Datum pubcols,
index 7340a1ec64612c390fc14a34585f5131d9444af0..e4306da02e7f1a2d42117f50809189eebce3d8d4 100644 (file)
@@ -32,7 +32,6 @@ CATALOG(pg_publication_namespace,8901,PublicationNamespaceRelationId)
        Oid                     oid;                    /* oid */
        Oid                     pnpubid BKI_LOOKUP(pg_publication); /* Oid of the publication */
        Oid                     pnnspid BKI_LOOKUP(pg_namespace);       /* Oid of the schema */
-       char            pntype;                                                         /* object type to include */
 } FormData_pg_publication_namespace;
 
 /* ----------------
@@ -43,13 +42,6 @@ CATALOG(pg_publication_namespace,8901,PublicationNamespaceRelationId)
 typedef FormData_pg_publication_namespace *Form_pg_publication_namespace;
 
 DECLARE_UNIQUE_INDEX_PKEY(pg_publication_namespace_oid_index, 8902, PublicationNamespaceObjectIndexId, on pg_publication_namespace using btree(oid oid_ops));
-DECLARE_UNIQUE_INDEX(pg_publication_namespace_pnnspid_pnpubid_pntype_index, 8903, PublicationNamespacePnnspidPnpubidPntypeIndexId, on pg_publication_namespace using btree(pnnspid oid_ops, pnpubid oid_ops, pntype char_ops));
-
-/* object type to include from a schema, maps to relkind */
-#define                PUB_OBJTYPE_TABLE                       't'     /* table (regular or partitioned) */
-#define                PUB_OBJTYPE_SEQUENCE            's'     /* sequence object */
-#define                PUB_OBJTYPE_UNSUPPORTED         'u'     /* used for non-replicated types */
-
-extern char    pub_get_object_type_for_relkind(char relkind);
+DECLARE_UNIQUE_INDEX(pg_publication_namespace_pnnspid_pnpubid_index, 8903, PublicationNamespacePnnspidPnpubidIndexId, on pg_publication_namespace using btree(pnnspid oid_ops, pnpubid oid_ops));
 
 #endif                                                 /* PG_PUBLICATION_NAMESPACE_H */
index f2381982d5d4edb641c1e2aede52888ecd431c35..9da23008101a7c387b87ae0d070def81e91a90a7 100644 (file)
@@ -48,7 +48,6 @@ typedef FormData_pg_sequence_data *Form_pg_sequence_data;
 typedef struct xl_seq_rec
 {
        RelFileNode node;
-       bool            created;        /* creates a new relfilenode (CREATE/ALTER) */
        /* SEQUENCE TUPLE DATA FOLLOWS AT THE END */
 } xl_seq_rec;
 
@@ -61,7 +60,6 @@ extern ObjectAddress AlterSequence(ParseState *pstate, AlterSeqStmt *stmt);
 extern void SequenceChangePersistence(Oid relid, char newrelpersistence);
 extern void DeleteSequenceTuple(Oid relid);
 extern void ResetSequence(Oid seq_relid);
-extern void SetSequence(Oid seq_relid, bool transactional, int64 last_value, int64 log_cnt, bool is_called);
 extern void ResetSequenceCaches(void);
 
 extern void seq_redo(XLogReaderState *rptr);
index 8998d345605a482704329ee4862bd970dc3df1fd..1bdeb9eb3d308a218fa8d20489a4e7e7af589508 100644 (file)
@@ -4013,10 +4013,6 @@ typedef enum PublicationObjSpecType
        PUBLICATIONOBJ_TABLES_IN_SCHEMA,        /* All tables in schema */
        PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA,    /* All tables in first element of
                                                                                         * search_path */
-       PUBLICATIONOBJ_SEQUENCE,                /* Sequence type */
-       PUBLICATIONOBJ_SEQUENCES_IN_SCHEMA, /* Sequences in schema type */
-       PUBLICATIONOBJ_SEQUENCES_IN_CUR_SCHEMA, /* Get the first element of
-                                                                                        * search_path */
        PUBLICATIONOBJ_CONTINUATION /* Continuation of previous type */
 } PublicationObjSpecType;
 
@@ -4035,7 +4031,7 @@ typedef struct CreatePublicationStmt
        char       *pubname;            /* Name of the publication */
        List       *options;            /* List of DefElem nodes */
        List       *pubobjects;         /* Optional list of publication objects */
-       List       *for_all_objects; /* Special publication for all objects in db */
+       bool            for_all_tables; /* Special publication for all tables in db */
 } CreatePublicationStmt;
 
 typedef enum AlterPublicationAction
@@ -4058,7 +4054,7 @@ typedef struct AlterPublicationStmt
         * objects.
         */
        List       *pubobjects;         /* Optional list of publication objects */
-       List       *for_all_objects; /* Special publication for all objects in db */
+       bool            for_all_tables; /* Special publication for all tables in db */
        AlterPublicationAction action;  /* What action to perform with the given
                                                                         * objects */
 } AlterPublicationStmt;
index 8e07bb7409a4caf1d45f5adc928a8ba0adb97c32..a33c2a718a7802787e72d06e27c4302973c8e1d6 100644 (file)
@@ -27,7 +27,6 @@ extern void heap2_decode(LogicalDecodingContext *ctx, XLogRecordBuffer *buf);
 extern void xact_decode(LogicalDecodingContext *ctx, XLogRecordBuffer *buf);
 extern void standby_decode(LogicalDecodingContext *ctx, XLogRecordBuffer *buf);
 extern void logicalmsg_decode(LogicalDecodingContext *ctx, XLogRecordBuffer *buf);
-extern void sequence_decode(LogicalDecodingContext *ctx, XLogRecordBuffer *buf);
 
 extern void    LogicalDecodingProcessRecord(LogicalDecodingContext *ctx,
                                                                                 XLogReaderState *record);
index 13ee10fdd4e7ceaabf2c00e168d9e14378855605..a771ab8ff3356ee5d2798e6bdd867164c528eea6 100644 (file)
@@ -61,7 +61,6 @@ typedef enum LogicalRepMsgType
        LOGICAL_REP_MSG_RELATION = 'R',
        LOGICAL_REP_MSG_TYPE = 'Y',
        LOGICAL_REP_MSG_MESSAGE = 'M',
-       LOGICAL_REP_MSG_SEQUENCE = 'Q',
        LOGICAL_REP_MSG_BEGIN_PREPARE = 'b',
        LOGICAL_REP_MSG_PREPARE = 'P',
        LOGICAL_REP_MSG_COMMIT_PREPARED = 'K',
@@ -119,18 +118,6 @@ typedef struct LogicalRepTyp
        char       *typname;            /* name of the remote type */
 } LogicalRepTyp;
 
-/* Sequence info */
-typedef struct LogicalRepSequence
-{
-       Oid                     remoteid;               /* unique id of the remote sequence */
-       char       *nspname;            /* schema name of remote sequence */
-       char       *seqname;            /* name of the remote sequence */
-       bool            transactional;
-       int64           last_value;
-       int64           log_cnt;
-       bool            is_called;
-} LogicalRepSequence;
-
 /* Transaction info */
 typedef struct LogicalRepBeginData
 {
@@ -243,12 +230,6 @@ extern List *logicalrep_read_truncate(StringInfo in,
                                                                          bool *cascade, bool *restart_seqs);
 extern void logicalrep_write_message(StringInfo out, TransactionId xid, XLogRecPtr lsn,
                                                                         bool transactional, const char *prefix, Size sz, const char *message);
-extern void logicalrep_write_sequence(StringInfo out, Relation rel,
-                                                                         TransactionId xid, XLogRecPtr lsn,
-                                                                         bool transactional,
-                                                                         int64 last_value, int64 log_cnt,
-                                                                         bool is_called);
-extern void logicalrep_read_sequence(StringInfo in, LogicalRepSequence *seqdata);
 extern void logicalrep_write_rel(StringInfo out, TransactionId xid,
                                                                 Relation rel, Bitmapset *columns);
 extern LogicalRepRelation *logicalrep_read_rel(StringInfo in);
index fe85d49a03084b14427666b395773df771182d9e..539dc8e6974a7b7d86635c437056976176a65c14 100644 (file)
@@ -88,18 +88,6 @@ typedef void (*LogicalDecodeMessageCB) (struct LogicalDecodingContext *ctx,
                                                                                Size message_size,
                                                                                const char *message);
 
-/*
- * Called for the generic logical decoding sequences.
- */
-typedef void (*LogicalDecodeSequenceCB) (struct LogicalDecodingContext *ctx,
-                                                                                ReorderBufferTXN *txn,
-                                                                                XLogRecPtr sequence_lsn,
-                                                                                Relation rel,
-                                                                                bool transactional,
-                                                                                int64 last_value,
-                                                                                int64 log_cnt,
-                                                                                bool is_called);
-
 /*
  * Filter changes by origin.
  */
@@ -211,19 +199,6 @@ typedef void (*LogicalDecodeStreamMessageCB) (struct LogicalDecodingContext *ctx
                                                                                          Size message_size,
                                                                                          const char *message);
 
-/*
- * Called for the streaming generic logical decoding sequences from in-progress
- * transactions.
- */
-typedef void (*LogicalDecodeStreamSequenceCB) (struct LogicalDecodingContext *ctx,
-                                                                                          ReorderBufferTXN *txn,
-                                                                                          XLogRecPtr sequence_lsn,
-                                                                                          Relation rel,
-                                                                                          bool transactional,
-                                                                                          int64 last_value,
-                                                                                          int64 log_cnt,
-                                                                                          bool is_called);
-
 /*
  * Callback for streaming truncates from in-progress transactions.
  */
@@ -244,7 +219,6 @@ typedef struct OutputPluginCallbacks
        LogicalDecodeTruncateCB truncate_cb;
        LogicalDecodeCommitCB commit_cb;
        LogicalDecodeMessageCB message_cb;
-       LogicalDecodeSequenceCB sequence_cb;
        LogicalDecodeFilterByOriginCB filter_by_origin_cb;
        LogicalDecodeShutdownCB shutdown_cb;
 
@@ -263,7 +237,6 @@ typedef struct OutputPluginCallbacks
        LogicalDecodeStreamCommitCB stream_commit_cb;
        LogicalDecodeStreamChangeCB stream_change_cb;
        LogicalDecodeStreamMessageCB stream_message_cb;
-       LogicalDecodeStreamSequenceCB stream_sequence_cb;
        LogicalDecodeStreamTruncateCB stream_truncate_cb;
 } OutputPluginCallbacks;
 
index f4e9f35d09d1e173ce827853901c6cb34593a596..eafedd610a50b2096fd1a74e18317cb3b6a9880c 100644 (file)
@@ -29,7 +29,6 @@ typedef struct PGOutputData
        bool            streaming;
        bool            messages;
        bool            two_phase;
-       bool            sequences;
 } PGOutputData;
 
 #endif                                                 /* PGOUTPUT_H */
index 0bcc150b33167f09007bfcf0676e627b9ff761d3..f12e75d69be5e068a7428614865d3e63f56bfb4f 100644 (file)
@@ -64,8 +64,7 @@ typedef enum ReorderBufferChangeType
        REORDER_BUFFER_CHANGE_INTERNAL_SPEC_INSERT,
        REORDER_BUFFER_CHANGE_INTERNAL_SPEC_CONFIRM,
        REORDER_BUFFER_CHANGE_INTERNAL_SPEC_ABORT,
-       REORDER_BUFFER_CHANGE_TRUNCATE,
-       REORDER_BUFFER_CHANGE_SEQUENCE
+       REORDER_BUFFER_CHANGE_TRUNCATE
 } ReorderBufferChangeType;
 
 /* forward declaration */
@@ -159,13 +158,6 @@ typedef struct ReorderBufferChange
                        uint32          ninvalidations; /* Number of messages */
                        SharedInvalidationMessage *invalidations;       /* invalidation message */
                }                       inval;
-
-               /* Context data for Sequence changes */
-               struct
-               {
-                       RelFileNode relnode;
-                       ReorderBufferTupleBuf *tuple;
-               }                       sequence;
        }                       data;
 
        /*
@@ -438,15 +430,6 @@ typedef void (*ReorderBufferMessageCB) (ReorderBuffer *rb,
                                                                                const char *prefix, Size sz,
                                                                                const char *message);
 
-/* sequence callback signature */
-typedef void (*ReorderBufferSequenceCB) (ReorderBuffer *rb,
-                                                                                ReorderBufferTXN *txn,
-                                                                                XLogRecPtr sequence_lsn,
-                                                                                Relation rel,
-                                                                                bool transactional,
-                                                                                int64 last_value, int64 log_cnt,
-                                                                                bool is_called);
-
 /* begin prepare callback signature */
 typedef void (*ReorderBufferBeginPrepareCB) (ReorderBuffer *rb,
                                                                                         ReorderBufferTXN *txn);
@@ -513,15 +496,6 @@ typedef void (*ReorderBufferStreamMessageCB) (
                                                                                          const char *prefix, Size sz,
                                                                                          const char *message);
 
-/* stream sequence callback signature */
-typedef void (*ReorderBufferStreamSequenceCB) (ReorderBuffer *rb,
-                                                                                          ReorderBufferTXN *txn,
-                                                                                          XLogRecPtr sequence_lsn,
-                                                                                          Relation rel,
-                                                                                          bool transactional,
-                                                                                          int64 last_value, int64 log_cnt,
-                                                                                          bool is_called);
-
 /* stream truncate callback signature */
 typedef void (*ReorderBufferStreamTruncateCB) (
                                                                                           ReorderBuffer *rb,
@@ -537,12 +511,6 @@ struct ReorderBuffer
         */
        HTAB       *by_txn;
 
-       /*
-        * relfilenode => XID lookup table for sequences created in a transaction
-        * (also includes altered sequences, which assigns new relfilenode)
-        */
-       HTAB       *sequences;
-
        /*
         * Transactions that could be a toplevel xact, ordered by LSN of the first
         * record bearing that xid.
@@ -573,7 +541,6 @@ struct ReorderBuffer
        ReorderBufferApplyTruncateCB apply_truncate;
        ReorderBufferCommitCB commit;
        ReorderBufferMessageCB message;
-       ReorderBufferSequenceCB sequence;
 
        /*
         * Callbacks to be called when streaming a transaction at prepare time.
@@ -593,7 +560,6 @@ struct ReorderBuffer
        ReorderBufferStreamCommitCB stream_commit;
        ReorderBufferStreamChangeCB stream_change;
        ReorderBufferStreamMessageCB stream_message;
-       ReorderBufferStreamSequenceCB stream_sequence;
        ReorderBufferStreamTruncateCB stream_truncate;
 
        /*
@@ -669,10 +635,6 @@ void               ReorderBufferQueueChange(ReorderBuffer *, TransactionId,
 void           ReorderBufferQueueMessage(ReorderBuffer *, TransactionId, Snapshot snapshot, XLogRecPtr lsn,
                                                                          bool transactional, const char *prefix,
                                                                          Size message_size, const char *message);
-void           ReorderBufferQueueSequence(ReorderBuffer *rb, TransactionId xid,
-                                                                          Snapshot snapshot, XLogRecPtr lsn, RepOriginId origin_id,
-                                                                          RelFileNode rnode, bool transactional, bool created,
-                                                                          ReorderBufferTupleBuf *tuplebuf);
 void           ReorderBufferCommit(ReorderBuffer *, TransactionId,
                                                                XLogRecPtr commit_lsn, XLogRecPtr end_lsn,
                                                                TimestampTz commit_time, RepOriginId origin_id, XLogRecPtr origin_lsn);
@@ -720,7 +682,4 @@ void                ReorderBufferSetRestartPoint(ReorderBuffer *, XLogRecPtr ptr);
 
 void           StartupReorderBuffer(void);
 
-bool           ReorderBufferSequenceIsTransactional(ReorderBuffer *rb,
-                                                                                                RelFileNode rnode, bool created);
-
 #endif
index c95d44b3db929d219ab47bbe17b93cdd07d69f75..4117fc27c9a5bc104556df8feff178a1af3cc57a 100644 (file)
@@ -46,7 +46,6 @@ CREATE TRANSFORM FOR int LANGUAGE SQL (
 SET client_min_messages = 'ERROR';
 CREATE PUBLICATION addr_pub FOR TABLE addr_nsp.gentable;
 CREATE PUBLICATION addr_pub_schema FOR ALL TABLES IN SCHEMA addr_nsp;
-CREATE PUBLICATION addr_pub_schema2 FOR ALL SEQUENCES IN SCHEMA addr_nsp;
 RESET client_min_messages;
 CREATE SUBSCRIPTION regress_addr_sub CONNECTION '' PUBLICATION bar WITH (connect = false, slot_name = NONE);
 WARNING:  tables were not subscribed, you will have to run ALTER SUBSCRIPTION ... REFRESH PUBLICATION to subscribe the tables
@@ -429,8 +428,7 @@ WITH objects (type, name, args) AS (VALUES
                                ('transform', '{int}', '{sql}'),
                                ('access method', '{btree}', '{}'),
                                ('publication', '{addr_pub}', '{}'),
-                               ('publication namespace', '{addr_nsp}', '{addr_pub_schema,t}'),
-                               ('publication namespace', '{addr_nsp}', '{addr_pub_schema2,s}'),
+                               ('publication namespace', '{addr_nsp}', '{addr_pub_schema}'),
                                ('publication relation', '{addr_nsp, gentable}', '{addr_pub}'),
                                ('subscription', '{regress_addr_sub}', '{}'),
                                ('statistics object', '{addr_nsp, gentable_stat}', '{}')
@@ -494,9 +492,8 @@ SELECT (pg_identify_object(addr1.classid, addr1.objid, addr1.objsubid)).*,
  subscription              |            | regress_addr_sub  | regress_addr_sub                                                     | t
  publication               |            | addr_pub          | addr_pub                                                             | t
  publication relation      |            |                   | addr_nsp.gentable in publication addr_pub                            | t
- publication namespace     |            |                   | addr_nsp in publication addr_pub_schema type t                       | t
- publication namespace     |            |                   | addr_nsp in publication addr_pub_schema2 type s                      | t
-(51 rows)
+ publication namespace     |            |                   | addr_nsp in publication addr_pub_schema                              | t
+(50 rows)
 
 ---
 --- Cleanup resources
@@ -509,7 +506,6 @@ drop cascades to server integer
 drop cascades to user mapping for regress_addr_user on server integer
 DROP PUBLICATION addr_pub;
 DROP PUBLICATION addr_pub_schema;
-DROP PUBLICATION addr_pub_schema2;
 DROP SUBSCRIPTION regress_addr_sub;
 DROP SCHEMA addr_nsp CASCADE;
 NOTICE:  drop cascades to 14 other objects
index 0308e40ba6cdabb4b49d16c3b4094d74a4451a40..4d24d772bde5ffc198262d484ca427c1738576c7 100644 (file)
@@ -30,20 +30,20 @@ ERROR:  conflicting or redundant options
 LINE 1: ...ub_xxx WITH (publish_via_partition_root = 'true', publish_vi...
                                                              ^
 \dRp
-                                                            List of publications
-        Name        |          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------+--------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- testpib_ins_trunct | regress_publication_user | f          | f             | t       | f       | f       | f         | f         | f
- testpub_default    | regress_publication_user | f          | f             | f       | t       | f       | f         | f         | f
+                                              List of publications
+        Name        |          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------+--------------------------+------------+---------+---------+---------+-----------+----------
+ testpib_ins_trunct | regress_publication_user | f          | t       | f       | f       | f         | f
+ testpub_default    | regress_publication_user | f          | f       | t       | f       | f         | f
 (2 rows)
 
-ALTER PUBLICATION testpub_default SET (publish = 'insert, update, delete, sequence');
+ALTER PUBLICATION testpub_default SET (publish = 'insert, update, delete');
 \dRp
-                                                            List of publications
-        Name        |          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------+--------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- testpib_ins_trunct | regress_publication_user | f          | f             | t       | f       | f       | f         | f         | f
- testpub_default    | regress_publication_user | f          | f             | t       | t       | t       | f         | t         | f
+                                              List of publications
+        Name        |          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------+--------------------------+------------+---------+---------+---------+-----------+----------
+ testpib_ins_trunct | regress_publication_user | f          | t       | f       | f       | f         | f
+ testpub_default    | regress_publication_user | f          | t       | t       | t       | f         | f
 (2 rows)
 
 --- adding tables
@@ -61,9 +61,6 @@ CREATE TABLE testpub_tbl2 (id serial primary key, data text);
 ALTER PUBLICATION testpub_foralltables ADD TABLE testpub_tbl2;
 ERROR:  publication "testpub_foralltables" is defined as FOR ALL TABLES
 DETAIL:  Tables cannot be added to or dropped from FOR ALL TABLES publications.
--- fail - can't add a table using ADD SEQUENCE command
-ALTER PUBLICATION testpub_foralltables ADD SEQUENCE testpub_tbl2;
-ERROR:  object type does not match type expected by command
 -- fail - can't drop from all tables publication
 ALTER PUBLICATION testpub_foralltables DROP TABLE testpub_tbl2;
 ERROR:  publication "testpub_foralltables" is defined as FOR ALL TABLES
@@ -90,10 +87,10 @@ RESET client_min_messages;
 -- should be able to add schema to 'FOR TABLE' publication
 ALTER PUBLICATION testpub_fortable ADD ALL TABLES IN SCHEMA pub_test;
 \dRp+ testpub_fortable
-                                              Publication testpub_fortable
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                                Publication testpub_fortable
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables:
     "public.testpub_tbl1"
 Tables from schemas:
@@ -102,20 +99,20 @@ Tables from schemas:
 -- should be able to drop schema from 'FOR TABLE' publication
 ALTER PUBLICATION testpub_fortable DROP ALL TABLES IN SCHEMA pub_test;
 \dRp+ testpub_fortable
-                                              Publication testpub_fortable
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                                Publication testpub_fortable
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables:
     "public.testpub_tbl1"
 
 -- should be able to set schema to 'FOR TABLE' publication
 ALTER PUBLICATION testpub_fortable SET ALL TABLES IN SCHEMA pub_test;
 \dRp+ testpub_fortable
-                                              Publication testpub_fortable
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                                Publication testpub_fortable
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "pub_test"
 
@@ -137,10 +134,10 @@ ERROR:  relation "testpub_nopk" is not part of the publication
 -- should be able to set table to schema publication
 ALTER PUBLICATION testpub_forschema SET TABLE pub_test.testpub_nopk;
 \dRp+ testpub_forschema
-                                             Publication testpub_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables:
     "pub_test.testpub_nopk"
 
@@ -162,10 +159,10 @@ Publications:
     "testpub_foralltables"
 
 \dRp+ testpub_foralltables
-                                            Publication testpub_foralltables
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | t          | f             | t       | t       | f       | f         | f         | f
+                              Publication testpub_foralltables
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | t          | t       | t       | f       | f         | f
 (1 row)
 
 DROP TABLE testpub_tbl2;
@@ -177,545 +174,24 @@ CREATE PUBLICATION testpub3 FOR TABLE testpub_tbl3;
 CREATE PUBLICATION testpub4 FOR TABLE ONLY testpub_tbl3;
 RESET client_min_messages;
 \dRp+ testpub3
-                                                  Publication testpub3
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                                    Publication testpub3
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables:
     "public.testpub_tbl3"
     "public.testpub_tbl3a"
 
 \dRp+ testpub4
-                                                  Publication testpub4
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                                    Publication testpub4
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables:
     "public.testpub_tbl3"
 
 DROP TABLE testpub_tbl3, testpub_tbl3a;
 DROP PUBLICATION testpub3, testpub4;
---- adding sequences
-CREATE SEQUENCE testpub_seq0;
-CREATE SEQUENCE pub_test.testpub_seq1;
-SET client_min_messages = 'ERROR';
-CREATE PUBLICATION testpub_forallsequences FOR ALL SEQUENCES WITH (publish = 'sequence');
-RESET client_min_messages;
-ALTER PUBLICATION testpub_forallsequences SET (publish = 'insert, sequence');
-CREATE SEQUENCE testpub_seq2;
--- fail - can't add to for all sequences publication
-ALTER PUBLICATION testpub_forallsequences ADD SEQUENCE testpub_seq2;
-ERROR:  publication "testpub_forallsequences" is defined as FOR ALL SEQUENCES
-DETAIL:  Sequences cannot be added to or dropped from FOR ALL SEQUENCES publications.
--- fail - can't drop from all sequences publication
-ALTER PUBLICATION testpub_forallsequences DROP SEQUENCE testpub_seq2;
-ERROR:  publication "testpub_forallsequences" is defined as FOR ALL SEQUENCES
-DETAIL:  Sequences cannot be added to or dropped from FOR ALL SEQUENCES publications.
--- fail - can't add to for all sequences publication
-ALTER PUBLICATION testpub_forallsequences SET SEQUENCE pub_test.testpub_seq1;
-ERROR:  publication "testpub_forallsequences" is defined as FOR ALL SEQUENCES
-DETAIL:  Sequences cannot be added to or dropped from FOR ALL SEQUENCES publications.
--- fail - can't add schema to 'FOR ALL SEQUENCES' publication
-ALTER PUBLICATION testpub_forallsequences ADD ALL SEQUENCES IN SCHEMA pub_test;
-ERROR:  publication "testpub_forallsequences" is defined as FOR ALL SEQUENCES
-DETAIL:  Sequences from schema cannot be added to, dropped from, or set on FOR ALL SEQUENCES publications.
--- fail - can't drop schema from 'FOR ALL SEQUENCES' publication
-ALTER PUBLICATION testpub_forallsequences DROP ALL SEQUENCES IN SCHEMA pub_test;
-ERROR:  publication "testpub_forallsequences" is defined as FOR ALL SEQUENCES
-DETAIL:  Sequences from schema cannot be added to, dropped from, or set on FOR ALL SEQUENCES publications.
--- fail - can't set schema to 'FOR ALL SEQUENCES' publication
-ALTER PUBLICATION testpub_forallsequences SET ALL SEQUENCES IN SCHEMA pub_test;
-ERROR:  publication "testpub_forallsequences" is defined as FOR ALL SEQUENCES
-DETAIL:  Sequences from schema cannot be added to, dropped from, or set on FOR ALL SEQUENCES publications.
-SET client_min_messages = 'ERROR';
-CREATE PUBLICATION testpub_forsequence FOR SEQUENCE testpub_seq0;
-RESET client_min_messages;
--- should be able to add schema to 'FOR SEQUENCE' publication
-ALTER PUBLICATION testpub_forsequence ADD ALL SEQUENCES IN SCHEMA pub_test;
-\dRp+ testpub_forsequence
-                                            Publication testpub_forsequence
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
-Sequences:
-    "public.testpub_seq0"
-Sequences from schemas:
-    "pub_test"
-
--- fail - can't add sequence from the schema we already added
-ALTER PUBLICATION testpub_forsequence ADD SEQUENCE pub_test.testpub_seq1;
-ERROR:  cannot add relation "pub_test.testpub_seq1" to publication
-DETAIL:  Sequence's schema "pub_test" is already part of the publication or part of the specified schema list.
--- fail - can't add sequence using ADD TABLE command
-ALTER PUBLICATION testpub_forsequence ADD TABLE pub_test.testpub_seq1;
-ERROR:  object type does not match type expected by command
--- should be able to drop schema from 'FOR SEQUENCE' publication
-ALTER PUBLICATION testpub_forsequence DROP ALL SEQUENCES IN SCHEMA pub_test;
-\dRp+ testpub_forsequence
-                                            Publication testpub_forsequence
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
-Sequences:
-    "public.testpub_seq0"
-
--- should be able to set schema to 'FOR SEQUENCE' publication
-ALTER PUBLICATION testpub_forsequence SET ALL SEQUENCES IN SCHEMA pub_test;
-\dRp+ testpub_forsequence
-                                            Publication testpub_forsequence
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
-Sequences from schemas:
-    "pub_test"
-
-SET client_min_messages = 'ERROR';
-CREATE PUBLICATION testpub_forschema FOR ALL SEQUENCES IN SCHEMA pub_test;
-RESET client_min_messages;
--- fail - can't create publication with schema and sequence of the same schema
-CREATE PUBLICATION testpub_for_seq_schema FOR ALL SEQUENCES IN SCHEMA pub_test, SEQUENCE pub_test.testpub_seq1;
-ERROR:  cannot add relation "pub_test.testpub_seq1" to publication
-DETAIL:  Sequence's schema "pub_test" is already part of the publication or part of the specified schema list.
--- fail - can't add a sequence of the same schema to the schema publication
-ALTER PUBLICATION testpub_forschema ADD SEQUENCE pub_test.testpub_seq1;
-ERROR:  cannot add relation "pub_test.testpub_seq1" to publication
-DETAIL:  Sequence's schema "pub_test" is already part of the publication or part of the specified schema list.
--- fail - can't drop a sequence from the schema publication which isn't in the
--- publication
-ALTER PUBLICATION testpub_forschema DROP SEQUENCE pub_test.testpub_seq1;
-ERROR:  relation "testpub_seq1" is not part of the publication
--- should be able to set sequence to schema publication
-ALTER PUBLICATION testpub_forschema SET SEQUENCE pub_test.testpub_seq1;
-\dRp+ testpub_forschema
-                                             Publication testpub_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
-Sequences:
-    "pub_test.testpub_seq1"
-
-SELECT pubname, puballtables, puballsequences FROM pg_publication WHERE pubname = 'testpub_forallsequences';
-         pubname         | puballtables | puballsequences 
--------------------------+--------------+-----------------
- testpub_forallsequences | f            | t
-(1 row)
-
-\d+ pub_test.testpub_seq1
-                       Sequence "pub_test.testpub_seq1"
-  Type  | Start | Minimum |       Maximum       | Increment | Cycles? | Cache 
---------+-------+---------+---------------------+-----------+---------+-------
- bigint |     1 |       1 | 9223372036854775807 |         1 | no      |     1
-Publications:
-    "testpub_forallsequences"
-    "testpub_forschema"
-    "testpub_forsequence"
-
-\dRp+ testpub_forallsequences
-                                          Publication testpub_forallsequences
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | t             | t       | f       | f       | f         | t         | f
-(1 row)
-
-DROP SEQUENCE testpub_seq0, pub_test.testpub_seq1, testpub_seq2;
-DROP PUBLICATION testpub_forallsequences, testpub_forsequence, testpub_forschema;
--- publication testing multiple sequences at the same time
-CREATE SEQUENCE testpub_seq1;
-CREATE SEQUENCE testpub_seq2;
-SET client_min_messages = 'ERROR';
-CREATE PUBLICATION testpub_multi FOR SEQUENCE testpub_seq1, testpub_seq2;
-RESET client_min_messages;
-\dRp+ testpub_multi
-                                               Publication testpub_multi
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
-Sequences:
-    "public.testpub_seq1"
-    "public.testpub_seq2"
-
-DROP PUBLICATION testpub_multi;
-DROP SEQUENCE testpub_seq1;
-DROP SEQUENCE testpub_seq2;
--- Publication mixing tables and sequences
-SET client_min_messages = 'ERROR';
-CREATE PUBLICATION testpub_mix;
-RESET client_min_messages;
-CREATE SEQUENCE testpub_seq1;
-CREATE SEQUENCE pub_test.testpub_seq2;
-ALTER PUBLICATION testpub_mix ADD SEQUENCE testpub_seq1, TABLE testpub_tbl1;
-\dRp+ testpub_mix
-                                                Publication testpub_mix
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
-Tables:
-    "public.testpub_tbl1"
-Sequences:
-    "public.testpub_seq1"
-
-ALTER PUBLICATION testpub_mix ADD ALL SEQUENCES IN SCHEMA pub_test, ALL TABLES IN SCHEMA pub_test;
-\dRp+ testpub_mix
-                                                Publication testpub_mix
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
-Tables:
-    "public.testpub_tbl1"
-Tables from schemas:
-    "pub_test"
-Sequences:
-    "public.testpub_seq1"
-Sequences from schemas:
-    "pub_test"
-
-ALTER PUBLICATION testpub_mix DROP ALL SEQUENCES IN SCHEMA pub_test;
-\dRp+ testpub_mix
-                                                Publication testpub_mix
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
-Tables:
-    "public.testpub_tbl1"
-Tables from schemas:
-    "pub_test"
-Sequences:
-    "public.testpub_seq1"
-
-ALTER PUBLICATION testpub_mix DROP ALL TABLES IN SCHEMA pub_test;
-\dRp+ testpub_mix
-                                                Publication testpub_mix
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
-Tables:
-    "public.testpub_tbl1"
-Sequences:
-    "public.testpub_seq1"
-
-DROP PUBLICATION testpub_mix;
-DROP SEQUENCE testpub_seq1;
-DROP SEQUENCE pub_test.testpub_seq2;
--- make sure we replicate only the correct relation type
-CREATE SCHEMA pub_test1;
-CREATE SEQUENCE pub_test1.test_seq1;
-CREATE TABLE pub_test1.test_tbl1 (a int primary key, b int);
-CREATE SCHEMA pub_test2;
-CREATE SEQUENCE pub_test2.test_seq2;
-CREATE TABLE pub_test2.test_tbl2 (a int primary key, b int);
-SET client_min_messages = 'ERROR';
-CREATE PUBLICATION testpub_schemas;
-RESET client_min_messages;
--- add tables from one schema, sequences from the other
-ALTER PUBLICATION testpub_schemas ADD ALL TABLES IN SCHEMA pub_test2;
-ALTER PUBLICATION testpub_schemas ADD ALL SEQUENCES IN SCHEMA pub_test1;
-\dRp+ testpub_schemas
-                                              Publication testpub_schemas
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
-Tables from schemas:
-    "pub_test2"
-Sequences from schemas:
-    "pub_test1"
-
-\dn+ pub_test1
-                            List of schemas
-   Name    |          Owner           | Access privileges | Description 
------------+--------------------------+-------------------+-------------
- pub_test1 | regress_publication_user |                   | 
-Publications:
-    "testpub_schemas" (sequences)
-
-\dn+ pub_test2
-                            List of schemas
-   Name    |          Owner           | Access privileges | Description 
------------+--------------------------+-------------------+-------------
- pub_test2 | regress_publication_user |                   | 
-Publications:
-    "testpub_schemas" (tables)
-
-\d+ pub_test1.test_seq1;
-                        Sequence "pub_test1.test_seq1"
-  Type  | Start | Minimum |       Maximum       | Increment | Cycles? | Cache 
---------+-------+---------+---------------------+-----------+---------+-------
- bigint |     1 |       1 | 9223372036854775807 |         1 | no      |     1
-Publications:
-    "testpub_schemas"
-
-\d+ pub_test1.test_tbl1;
-                               Table "pub_test1.test_tbl1"
- Column |  Type   | Collation | Nullable | Default | Storage | Stats target | Description 
---------+---------+-----------+----------+---------+---------+--------------+-------------
- a      | integer |           | not null |         | plain   |              | 
- b      | integer |           |          |         | plain   |              | 
-Indexes:
-    "test_tbl1_pkey" PRIMARY KEY, btree (a)
-
-\d+ pub_test2.test_seq2;
-                        Sequence "pub_test2.test_seq2"
-  Type  | Start | Minimum |       Maximum       | Increment | Cycles? | Cache 
---------+-------+---------+---------------------+-----------+---------+-------
- bigint |     1 |       1 | 9223372036854775807 |         1 | no      |     1
-
-\d+ pub_test2.test_tbl2;
-                               Table "pub_test2.test_tbl2"
- Column |  Type   | Collation | Nullable | Default | Storage | Stats target | Description 
---------+---------+-----------+----------+---------+---------+--------------+-------------
- a      | integer |           | not null |         | plain   |              | 
- b      | integer |           |          |         | plain   |              | 
-Indexes:
-    "test_tbl2_pkey" PRIMARY KEY, btree (a)
-Publications:
-    "testpub_schemas"
-
--- add the other object type from each schema
-ALTER PUBLICATION testpub_schemas ADD ALL TABLES IN SCHEMA pub_test1;
-ALTER PUBLICATION testpub_schemas ADD ALL SEQUENCES IN SCHEMA pub_test2;
-\dRp+ testpub_schemas
-                                              Publication testpub_schemas
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
-Tables from schemas:
-    "pub_test1"
-    "pub_test2"
-Sequences from schemas:
-    "pub_test1"
-    "pub_test2"
-
-\dn+ pub_test1
-                            List of schemas
-   Name    |          Owner           | Access privileges | Description 
------------+--------------------------+-------------------+-------------
- pub_test1 | regress_publication_user |                   | 
-Publications:
-    "testpub_schemas" (sequences)
-    "testpub_schemas" (tables)
-
-\dn+ pub_test2
-                            List of schemas
-   Name    |          Owner           | Access privileges | Description 
------------+--------------------------+-------------------+-------------
- pub_test2 | regress_publication_user |                   | 
-Publications:
-    "testpub_schemas" (tables)
-    "testpub_schemas" (sequences)
-
-\d+ pub_test1.test_seq1;
-                        Sequence "pub_test1.test_seq1"
-  Type  | Start | Minimum |       Maximum       | Increment | Cycles? | Cache 
---------+-------+---------+---------------------+-----------+---------+-------
- bigint |     1 |       1 | 9223372036854775807 |         1 | no      |     1
-Publications:
-    "testpub_schemas"
-
-\d+ pub_test1.test_tbl1;
-                               Table "pub_test1.test_tbl1"
- Column |  Type   | Collation | Nullable | Default | Storage | Stats target | Description 
---------+---------+-----------+----------+---------+---------+--------------+-------------
- a      | integer |           | not null |         | plain   |              | 
- b      | integer |           |          |         | plain   |              | 
-Indexes:
-    "test_tbl1_pkey" PRIMARY KEY, btree (a)
-Publications:
-    "testpub_schemas"
-
-\d+ pub_test2.test_seq2;
-                        Sequence "pub_test2.test_seq2"
-  Type  | Start | Minimum |       Maximum       | Increment | Cycles? | Cache 
---------+-------+---------+---------------------+-----------+---------+-------
- bigint |     1 |       1 | 9223372036854775807 |         1 | no      |     1
-Publications:
-    "testpub_schemas"
-
-\d+ pub_test2.test_tbl2;
-                               Table "pub_test2.test_tbl2"
- Column |  Type   | Collation | Nullable | Default | Storage | Stats target | Description 
---------+---------+-----------+----------+---------+---------+--------------+-------------
- a      | integer |           | not null |         | plain   |              | 
- b      | integer |           |          |         | plain   |              | 
-Indexes:
-    "test_tbl2_pkey" PRIMARY KEY, btree (a)
-Publications:
-    "testpub_schemas"
-
--- now drop the object type added first
-ALTER PUBLICATION testpub_schemas DROP ALL TABLES IN SCHEMA pub_test2;
-ALTER PUBLICATION testpub_schemas DROP ALL SEQUENCES IN SCHEMA pub_test1;
-\dRp+ testpub_schemas
-                                              Publication testpub_schemas
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
-Tables from schemas:
-    "pub_test1"
-Sequences from schemas:
-    "pub_test2"
-
-\dn+ pub_test1
-                            List of schemas
-   Name    |          Owner           | Access privileges | Description 
------------+--------------------------+-------------------+-------------
- pub_test1 | regress_publication_user |                   | 
-Publications:
-    "testpub_schemas" (tables)
-
-\dn+ pub_test2
-                            List of schemas
-   Name    |          Owner           | Access privileges | Description 
------------+--------------------------+-------------------+-------------
- pub_test2 | regress_publication_user |                   | 
-Publications:
-    "testpub_schemas" (sequences)
-
-\d+ pub_test1.test_seq1;
-                        Sequence "pub_test1.test_seq1"
-  Type  | Start | Minimum |       Maximum       | Increment | Cycles? | Cache 
---------+-------+---------+---------------------+-----------+---------+-------
- bigint |     1 |       1 | 9223372036854775807 |         1 | no      |     1
-
-\d+ pub_test1.test_tbl1;
-                               Table "pub_test1.test_tbl1"
- Column |  Type   | Collation | Nullable | Default | Storage | Stats target | Description 
---------+---------+-----------+----------+---------+---------+--------------+-------------
- a      | integer |           | not null |         | plain   |              | 
- b      | integer |           |          |         | plain   |              | 
-Indexes:
-    "test_tbl1_pkey" PRIMARY KEY, btree (a)
-Publications:
-    "testpub_schemas"
-
-\d+ pub_test2.test_seq2;
-                        Sequence "pub_test2.test_seq2"
-  Type  | Start | Minimum |       Maximum       | Increment | Cycles? | Cache 
---------+-------+---------+---------------------+-----------+---------+-------
- bigint |     1 |       1 | 9223372036854775807 |         1 | no      |     1
-Publications:
-    "testpub_schemas"
-
-\d+ pub_test2.test_tbl2;
-                               Table "pub_test2.test_tbl2"
- Column |  Type   | Collation | Nullable | Default | Storage | Stats target | Description 
---------+---------+-----------+----------+---------+---------+--------------+-------------
- a      | integer |           | not null |         | plain   |              | 
- b      | integer |           |          |         | plain   |              | 
-Indexes:
-    "test_tbl2_pkey" PRIMARY KEY, btree (a)
-
--- should fail (publication contains the whole schema)
-ALTER PUBLICATION testpub_schemas ADD TABLE pub_test1.test_tbl1;
-ERROR:  cannot add relation "pub_test1.test_tbl1" to publication
-DETAIL:  Table's schema "pub_test1" is already part of the publication or part of the specified schema list.
-ALTER PUBLICATION testpub_schemas ADD SEQUENCE pub_test2.test_seq2;
-ERROR:  cannot add relation "pub_test2.test_seq2" to publication
-DETAIL:  Sequence's schema "pub_test2" is already part of the publication or part of the specified schema list.
--- should work (different schema)
-ALTER PUBLICATION testpub_schemas ADD TABLE pub_test2.test_tbl2;
-ALTER PUBLICATION testpub_schemas ADD SEQUENCE pub_test1.test_seq1;
-\dRp+ testpub_schemas
-                                              Publication testpub_schemas
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
-Tables:
-    "pub_test2.test_tbl2"
-Tables from schemas:
-    "pub_test1"
-Sequences:
-    "pub_test1.test_seq1"
-Sequences from schemas:
-    "pub_test2"
-
-\d+ pub_test1.test_seq1;
-                        Sequence "pub_test1.test_seq1"
-  Type  | Start | Minimum |       Maximum       | Increment | Cycles? | Cache 
---------+-------+---------+---------------------+-----------+---------+-------
- bigint |     1 |       1 | 9223372036854775807 |         1 | no      |     1
-Publications:
-    "testpub_schemas"
-
-\d+ pub_test1.test_tbl1;
-                               Table "pub_test1.test_tbl1"
- Column |  Type   | Collation | Nullable | Default | Storage | Stats target | Description 
---------+---------+-----------+----------+---------+---------+--------------+-------------
- a      | integer |           | not null |         | plain   |              | 
- b      | integer |           |          |         | plain   |              | 
-Indexes:
-    "test_tbl1_pkey" PRIMARY KEY, btree (a)
-Publications:
-    "testpub_schemas"
-
-\d+ pub_test2.test_seq2;
-                        Sequence "pub_test2.test_seq2"
-  Type  | Start | Minimum |       Maximum       | Increment | Cycles? | Cache 
---------+-------+---------+---------------------+-----------+---------+-------
- bigint |     1 |       1 | 9223372036854775807 |         1 | no      |     1
-Publications:
-    "testpub_schemas"
-
-\d+ pub_test2.test_tbl2;
-                               Table "pub_test2.test_tbl2"
- Column |  Type   | Collation | Nullable | Default | Storage | Stats target | Description 
---------+---------+-----------+----------+---------+---------+--------------+-------------
- a      | integer |           | not null |         | plain   |              | 
- b      | integer |           |          |         | plain   |              | 
-Indexes:
-    "test_tbl2_pkey" PRIMARY KEY, btree (a)
-Publications:
-    "testpub_schemas"
-
--- now drop the explicitly added objects again
-ALTER PUBLICATION testpub_schemas DROP TABLE pub_test2.test_tbl2;
-ALTER PUBLICATION testpub_schemas DROP SEQUENCE pub_test1.test_seq1;
-\dRp+ testpub_schemas
-                                              Publication testpub_schemas
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
-Tables from schemas:
-    "pub_test1"
-Sequences from schemas:
-    "pub_test2"
-
-\d+ pub_test1.test_seq1;
-                        Sequence "pub_test1.test_seq1"
-  Type  | Start | Minimum |       Maximum       | Increment | Cycles? | Cache 
---------+-------+---------+---------------------+-----------+---------+-------
- bigint |     1 |       1 | 9223372036854775807 |         1 | no      |     1
-
-\d+ pub_test1.test_tbl1;
-                               Table "pub_test1.test_tbl1"
- Column |  Type   | Collation | Nullable | Default | Storage | Stats target | Description 
---------+---------+-----------+----------+---------+---------+--------------+-------------
- a      | integer |           | not null |         | plain   |              | 
- b      | integer |           |          |         | plain   |              | 
-Indexes:
-    "test_tbl1_pkey" PRIMARY KEY, btree (a)
-Publications:
-    "testpub_schemas"
-
-\d+ pub_test2.test_seq2;
-                        Sequence "pub_test2.test_seq2"
-  Type  | Start | Minimum |       Maximum       | Increment | Cycles? | Cache 
---------+-------+---------+---------------------+-----------+---------+-------
- bigint |     1 |       1 | 9223372036854775807 |         1 | no      |     1
-Publications:
-    "testpub_schemas"
-
-\d+ pub_test2.test_tbl2;
-                               Table "pub_test2.test_tbl2"
- Column |  Type   | Collation | Nullable | Default | Storage | Stats target | Description 
---------+---------+-----------+----------+---------+---------+--------------+-------------
- a      | integer |           | not null |         | plain   |              | 
- b      | integer |           |          |         | plain   |              | 
-Indexes:
-    "test_tbl2_pkey" PRIMARY KEY, btree (a)
-
-DROP PUBLICATION testpub_schemas;
-DROP TABLE pub_test1.test_tbl1, pub_test2.test_tbl2;
-DROP SEQUENCE pub_test1.test_seq1, pub_test2.test_seq2;
-DROP SCHEMA pub_test1, pub_test2;
 -- Tests for partitioned tables
 SET client_min_messages = 'ERROR';
 CREATE PUBLICATION testpub_forparted;
@@ -731,10 +207,10 @@ UPDATE testpub_parted1 SET a = 1;
 -- only parent is listed as being in publication, not the partition
 ALTER PUBLICATION testpub_forparted ADD TABLE testpub_parted;
 \dRp+ testpub_forparted
-                                             Publication testpub_forparted
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub_forparted
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables:
     "public.testpub_parted"
 
@@ -747,10 +223,10 @@ ALTER TABLE testpub_parted DETACH PARTITION testpub_parted1;
 UPDATE testpub_parted1 SET a = 1;
 ALTER PUBLICATION testpub_forparted SET (publish_via_partition_root = true);
 \dRp+ testpub_forparted
-                                             Publication testpub_forparted
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | t
+                               Publication testpub_forparted
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | t
 Tables:
     "public.testpub_parted"
 
@@ -779,10 +255,10 @@ SET client_min_messages = 'ERROR';
 CREATE PUBLICATION testpub5 FOR TABLE testpub_rf_tbl1, testpub_rf_tbl2 WHERE (c <> 'test' AND d < 5) WITH (publish = 'insert');
 RESET client_min_messages;
 \dRp+ testpub5
-                                                  Publication testpub5
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | f       | f       | f         | f         | f
+                                    Publication testpub5
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | f       | f       | f         | f
 Tables:
     "public.testpub_rf_tbl1"
     "public.testpub_rf_tbl2" WHERE ((c <> 'test'::text) AND (d < 5))
@@ -795,10 +271,10 @@ Tables:
 
 ALTER PUBLICATION testpub5 ADD TABLE testpub_rf_tbl3 WHERE (e > 1000 AND e < 2000);
 \dRp+ testpub5
-                                                  Publication testpub5
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | f       | f       | f         | f         | f
+                                    Publication testpub5
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | f       | f       | f         | f
 Tables:
     "public.testpub_rf_tbl1"
     "public.testpub_rf_tbl2" WHERE ((c <> 'test'::text) AND (d < 5))
@@ -814,10 +290,10 @@ Publications:
 
 ALTER PUBLICATION testpub5 DROP TABLE testpub_rf_tbl2;
 \dRp+ testpub5
-                                                  Publication testpub5
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | f       | f       | f         | f         | f
+                                    Publication testpub5
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | f       | f       | f         | f
 Tables:
     "public.testpub_rf_tbl1"
     "public.testpub_rf_tbl3" WHERE ((e > 1000) AND (e < 2000))
@@ -825,10 +301,10 @@ Tables:
 -- remove testpub_rf_tbl1 and add testpub_rf_tbl3 again (another WHERE expression)
 ALTER PUBLICATION testpub5 SET TABLE testpub_rf_tbl3 WHERE (e > 300 AND e < 500);
 \dRp+ testpub5
-                                                  Publication testpub5
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | f       | f       | f         | f         | f
+                                    Publication testpub5
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | f       | f       | f         | f
 Tables:
     "public.testpub_rf_tbl3" WHERE ((e > 300) AND (e < 500))
 
@@ -861,10 +337,10 @@ SET client_min_messages = 'ERROR';
 CREATE PUBLICATION testpub_syntax1 FOR TABLE testpub_rf_tbl1, ONLY testpub_rf_tbl3 WHERE (e < 999) WITH (publish = 'insert');
 RESET client_min_messages;
 \dRp+ testpub_syntax1
-                                              Publication testpub_syntax1
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | f       | f       | f         | f         | f
+                                Publication testpub_syntax1
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | f       | f       | f         | f
 Tables:
     "public.testpub_rf_tbl1"
     "public.testpub_rf_tbl3" WHERE (e < 999)
@@ -874,10 +350,10 @@ SET client_min_messages = 'ERROR';
 CREATE PUBLICATION testpub_syntax2 FOR TABLE testpub_rf_tbl1, testpub_rf_schema1.testpub_rf_tbl5 WHERE (h < 999) WITH (publish = 'insert');
 RESET client_min_messages;
 \dRp+ testpub_syntax2
-                                              Publication testpub_syntax2
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | f       | f       | f         | f         | f
+                                Publication testpub_syntax2
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | f       | f       | f         | f
 Tables:
     "public.testpub_rf_tbl1"
     "testpub_rf_schema1.testpub_rf_tbl5" WHERE (h < 999)
@@ -1196,10 +672,10 @@ CREATE PUBLICATION testpub_table_ins WITH (publish = 'insert, truncate');
 RESET client_min_messages;
 ALTER PUBLICATION testpub_table_ins ADD TABLE testpub_tbl5 (a);                -- ok
 \dRp+ testpub_table_ins
-                                             Publication testpub_table_ins
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | f       | f       | t         | f         | f
+                               Publication testpub_table_ins
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | f       | f       | t         | f
 Tables:
     "public.testpub_tbl5" (a)
 
@@ -1341,10 +817,10 @@ CREATE TABLE testpub_tbl_both_filters (a int, b int, c int, PRIMARY KEY (a,c));
 ALTER TABLE testpub_tbl_both_filters REPLICA IDENTITY USING INDEX testpub_tbl_both_filters_pkey;
 ALTER PUBLICATION testpub_both_filters ADD TABLE testpub_tbl_both_filters (a,c) WHERE (c != 1);
 \dRp+ testpub_both_filters
-                                            Publication testpub_both_filters
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                              Publication testpub_both_filters
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables:
     "public.testpub_tbl_both_filters" (a, c) WHERE (c <> 1)
 
@@ -1545,10 +1021,10 @@ ERROR:  relation "testpub_tbl1" is already member of publication "testpub_fortbl
 CREATE PUBLICATION testpub_fortbl FOR TABLE testpub_tbl1;
 ERROR:  publication "testpub_fortbl" already exists
 \dRp+ testpub_fortbl
-                                               Publication testpub_fortbl
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                                 Publication testpub_fortbl
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables:
     "pub_test.testpub_nopk"
     "public.testpub_tbl1"
@@ -1586,10 +1062,10 @@ Publications:
     "testpub_fortbl"
 
 \dRp+ testpub_default
-                                              Publication testpub_default
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | f         | t         | f
+                                Publication testpub_default
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | f         | f
 Tables:
     "pub_test.testpub_nopk"
     "public.testpub_tbl1"
@@ -1667,10 +1143,10 @@ REVOKE CREATE ON DATABASE regression FROM regress_publication_user2;
 DROP TABLE testpub_parted;
 DROP TABLE testpub_tbl1;
 \dRp+ testpub_default
-                                              Publication testpub_default
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | f         | t         | f
+                                Publication testpub_default
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | f         | f
 (1 row)
 
 -- fail - must be owner of publication
@@ -1680,20 +1156,20 @@ ERROR:  must be owner of publication testpub_default
 RESET ROLE;
 ALTER PUBLICATION testpub_default RENAME TO testpub_foo;
 \dRp testpub_foo
-                                                         List of publications
-    Name     |          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
--------------+--------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- testpub_foo | regress_publication_user | f          | f             | t       | t       | t       | f         | t         | f
+                                           List of publications
+    Name     |          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+-------------+--------------------------+------------+---------+---------+---------+-----------+----------
+ testpub_foo | regress_publication_user | f          | t       | t       | t       | f         | f
 (1 row)
 
 -- rename back to keep the rest simple
 ALTER PUBLICATION testpub_foo RENAME TO testpub_default;
 ALTER PUBLICATION testpub_default OWNER TO regress_publication_user2;
 \dRp testpub_default
-                                                           List of publications
-      Name       |           Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
------------------+---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- testpub_default | regress_publication_user2 | f          | f             | t       | t       | t       | f         | t         | f
+                                             List of publications
+      Name       |           Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+-----------------+---------------------------+------------+---------+---------+---------+-----------+----------
+ testpub_default | regress_publication_user2 | f          | t       | t       | t       | f         | f
 (1 row)
 
 -- adding schemas and tables
@@ -1709,19 +1185,19 @@ CREATE TABLE "CURRENT_SCHEMA"."CURRENT_SCHEMA"(id int);
 SET client_min_messages = 'ERROR';
 CREATE PUBLICATION testpub1_forschema FOR ALL TABLES IN SCHEMA pub_test1;
 \dRp+ testpub1_forschema
-                                             Publication testpub1_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub1_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "pub_test1"
 
 CREATE PUBLICATION testpub2_forschema FOR ALL TABLES IN SCHEMA pub_test1, pub_test2, pub_test3;
 \dRp+ testpub2_forschema
-                                             Publication testpub2_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub2_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "pub_test1"
     "pub_test2"
@@ -1735,44 +1211,44 @@ CREATE PUBLICATION testpub6_forschema FOR ALL TABLES IN SCHEMA "CURRENT_SCHEMA",
 CREATE PUBLICATION testpub_fortable FOR TABLE "CURRENT_SCHEMA"."CURRENT_SCHEMA";
 RESET client_min_messages;
 \dRp+ testpub3_forschema
-                                             Publication testpub3_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub3_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "public"
 
 \dRp+ testpub4_forschema
-                                             Publication testpub4_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub4_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "CURRENT_SCHEMA"
 
 \dRp+ testpub5_forschema
-                                             Publication testpub5_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub5_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "CURRENT_SCHEMA"
     "public"
 
 \dRp+ testpub6_forschema
-                                             Publication testpub6_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub6_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "CURRENT_SCHEMA"
     "public"
 
 \dRp+ testpub_fortable
-                                              Publication testpub_fortable
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                                Publication testpub_fortable
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables:
     "CURRENT_SCHEMA.CURRENT_SCHEMA"
 
@@ -1806,10 +1282,10 @@ ERROR:  schema "testpub_view" does not exist
 -- dropping the schema should reflect the change in publication
 DROP SCHEMA pub_test3;
 \dRp+ testpub2_forschema
-                                             Publication testpub2_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub2_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "pub_test1"
     "pub_test2"
@@ -1817,20 +1293,20 @@ Tables from schemas:
 -- renaming the schema should reflect the change in publication
 ALTER SCHEMA pub_test1 RENAME to pub_test1_renamed;
 \dRp+ testpub2_forschema
-                                             Publication testpub2_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub2_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "pub_test1_renamed"
     "pub_test2"
 
 ALTER SCHEMA pub_test1_renamed RENAME to pub_test1;
 \dRp+ testpub2_forschema
-                                             Publication testpub2_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub2_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "pub_test1"
     "pub_test2"
@@ -1838,10 +1314,10 @@ Tables from schemas:
 -- alter publication add schema
 ALTER PUBLICATION testpub1_forschema ADD ALL TABLES IN SCHEMA pub_test2;
 \dRp+ testpub1_forschema
-                                             Publication testpub1_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub1_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "pub_test1"
     "pub_test2"
@@ -1850,10 +1326,10 @@ Tables from schemas:
 ALTER PUBLICATION testpub1_forschema ADD ALL TABLES IN SCHEMA non_existent_schema;
 ERROR:  schema "non_existent_schema" does not exist
 \dRp+ testpub1_forschema
-                                             Publication testpub1_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub1_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "pub_test1"
     "pub_test2"
@@ -1862,10 +1338,10 @@ Tables from schemas:
 ALTER PUBLICATION testpub1_forschema ADD ALL TABLES IN SCHEMA pub_test1;
 ERROR:  schema "pub_test1" is already member of publication "testpub1_forschema"
 \dRp+ testpub1_forschema
-                                             Publication testpub1_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub1_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "pub_test1"
     "pub_test2"
@@ -1873,10 +1349,10 @@ Tables from schemas:
 -- alter publication drop schema
 ALTER PUBLICATION testpub1_forschema DROP ALL TABLES IN SCHEMA pub_test2;
 \dRp+ testpub1_forschema
-                                             Publication testpub1_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub1_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "pub_test1"
 
@@ -1884,10 +1360,10 @@ Tables from schemas:
 ALTER PUBLICATION testpub1_forschema DROP ALL TABLES IN SCHEMA pub_test2;
 ERROR:  tables from schema "pub_test2" are not part of the publication
 \dRp+ testpub1_forschema
-                                             Publication testpub1_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub1_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "pub_test1"
 
@@ -1895,29 +1371,29 @@ Tables from schemas:
 ALTER PUBLICATION testpub1_forschema DROP ALL TABLES IN SCHEMA non_existent_schema;
 ERROR:  schema "non_existent_schema" does not exist
 \dRp+ testpub1_forschema
-                                             Publication testpub1_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub1_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "pub_test1"
 
 -- drop all schemas
 ALTER PUBLICATION testpub1_forschema DROP ALL TABLES IN SCHEMA pub_test1;
 \dRp+ testpub1_forschema
-                                             Publication testpub1_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub1_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 (1 row)
 
 -- alter publication set multiple schema
 ALTER PUBLICATION testpub1_forschema SET ALL TABLES IN SCHEMA pub_test1, pub_test2;
 \dRp+ testpub1_forschema
-                                             Publication testpub1_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub1_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "pub_test1"
     "pub_test2"
@@ -1926,10 +1402,10 @@ Tables from schemas:
 ALTER PUBLICATION testpub1_forschema SET ALL TABLES IN SCHEMA non_existent_schema;
 ERROR:  schema "non_existent_schema" does not exist
 \dRp+ testpub1_forschema
-                                             Publication testpub1_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub1_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "pub_test1"
     "pub_test2"
@@ -1938,10 +1414,10 @@ Tables from schemas:
 -- removing the duplicate schemas
 ALTER PUBLICATION testpub1_forschema SET ALL TABLES IN SCHEMA pub_test1, pub_test1;
 \dRp+ testpub1_forschema
-                                             Publication testpub1_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub1_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "pub_test1"
 
@@ -2020,18 +1496,18 @@ SET client_min_messages = 'ERROR';
 CREATE PUBLICATION testpub3_forschema;
 RESET client_min_messages;
 \dRp+ testpub3_forschema
-                                             Publication testpub3_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub3_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 (1 row)
 
 ALTER PUBLICATION testpub3_forschema SET ALL TABLES IN SCHEMA pub_test1;
 \dRp+ testpub3_forschema
-                                             Publication testpub3_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                               Publication testpub3_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables from schemas:
     "pub_test1"
 
@@ -2041,20 +1517,20 @@ CREATE PUBLICATION testpub_forschema_fortable FOR ALL TABLES IN SCHEMA pub_test1
 CREATE PUBLICATION testpub_fortable_forschema FOR TABLE pub_test2.tbl1, ALL TABLES IN SCHEMA pub_test1;
 RESET client_min_messages;
 \dRp+ testpub_forschema_fortable
-                                         Publication testpub_forschema_fortable
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                           Publication testpub_forschema_fortable
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables:
     "pub_test2.tbl1"
 Tables from schemas:
     "pub_test1"
 
 \dRp+ testpub_fortable_forschema
-                                         Publication testpub_fortable_forschema
-          Owner           | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Sequences | Via root 
---------------------------+------------+---------------+---------+---------+---------+-----------+-----------+----------
- regress_publication_user | f          | f             | t       | t       | t       | t         | t         | f
+                           Publication testpub_fortable_forschema
+          Owner           | All tables | Inserts | Updates | Deletes | Truncates | Via root 
+--------------------------+------------+---------+---------+---------+-----------+----------
+ regress_publication_user | f          | t       | t       | t       | t         | f
 Tables:
     "pub_test2.tbl1"
 Tables from schemas:
@@ -2098,85 +1574,40 @@ CREATE SCHEMA sch1;
 CREATE SCHEMA sch2;
 CREATE TABLE sch1.tbl1 (a int) PARTITION BY RANGE(a);
 CREATE TABLE sch2.tbl1_part1 PARTITION OF sch1.tbl1 FOR VALUES FROM (1) to (10);
-CREATE SEQUENCE sch1.seq1;
-CREATE SEQUENCE sch2.seq2;
 -- Schema publication that does not include the schema that has the parent table
 CREATE PUBLICATION pub FOR ALL TABLES IN SCHEMA sch2 WITH (PUBLISH_VIA_PARTITION_ROOT=1);
-ALTER PUBLICATION pub ADD ALL SEQUENCES IN SCHEMA sch2;
 SELECT * FROM pg_publication_tables;
  pubname | schemaname | tablename  
 ---------+------------+------------
  pub     | sch2       | tbl1_part1
 (1 row)
 
-SELECT * FROM pg_publication_sequences;
- pubname | schemaname | sequencename 
----------+------------+--------------
- pub     | sch2       | seq2
-(1 row)
-
 DROP PUBLICATION pub;
 -- Table publication that does not include the parent table
 CREATE PUBLICATION pub FOR TABLE sch2.tbl1_part1 WITH (PUBLISH_VIA_PARTITION_ROOT=1);
-ALTER PUBLICATION pub ADD SEQUENCE sch2.seq2;
 SELECT * FROM pg_publication_tables;
  pubname | schemaname | tablename  
 ---------+------------+------------
  pub     | sch2       | tbl1_part1
 (1 row)
 
-SELECT * FROM pg_publication_sequences;
- pubname | schemaname | sequencename 
----------+------------+--------------
- pub     | sch2       | seq2
-(1 row)
-
 -- Table publication that includes both the parent table and the child table
 ALTER PUBLICATION pub ADD TABLE sch1.tbl1;
-ALTER PUBLICATION pub ADD SEQUENCE sch1.seq1;
 SELECT * FROM pg_publication_tables;
  pubname | schemaname | tablename 
 ---------+------------+-----------
  pub     | sch1       | tbl1
 (1 row)
 
-SELECT * FROM pg_publication_sequences;
- pubname | schemaname | sequencename 
----------+------------+--------------
- pub     | sch1       | seq1
- pub     | sch2       | seq2
-(2 rows)
-
 DROP PUBLICATION pub;
 -- Schema publication that does not include the schema that has the parent table
 CREATE PUBLICATION pub FOR ALL TABLES IN SCHEMA sch2 WITH (PUBLISH_VIA_PARTITION_ROOT=0);
-ALTER PUBLICATION pub ADD SEQUENCE sch1.seq1;
 SELECT * FROM pg_publication_tables;
  pubname | schemaname | tablename  
 ---------+------------+------------
  pub     | sch2       | tbl1_part1
 (1 row)
 
-SELECT * FROM pg_publication_sequences;
- pubname | schemaname | sequencename 
----------+------------+--------------
- pub     | sch1       | seq1
-(1 row)
-
-DROP PUBLICATION pub;
--- Sequence publication
-CREATE PUBLICATION pub FOR SEQUENCE sch2.seq2;
-SELECT * FROM pg_publication_tables;
- pubname | schemaname | tablename 
----------+------------+-----------
-(0 rows)
-
-SELECT * FROM pg_publication_sequences;
- pubname | schemaname | sequencename 
----------+------------+--------------
- pub     | sch2       | seq2
-(1 row)
-
 DROP PUBLICATION pub;
 -- Table publication that does not include the parent table
 CREATE PUBLICATION pub FOR TABLE sch2.tbl1_part1 WITH (PUBLISH_VIA_PARTITION_ROOT=0);
@@ -2186,26 +1617,14 @@ SELECT * FROM pg_publication_tables;
  pub     | sch2       | tbl1_part1
 (1 row)
 
-SELECT * FROM pg_publication_sequences;
- pubname | schemaname | sequencename 
----------+------------+--------------
-(0 rows)
-
 -- Table publication that includes both the parent table and the child table
 ALTER PUBLICATION pub ADD TABLE sch1.tbl1;
-ALTER PUBLICATION pub ADD ALL SEQUENCES IN SCHEMA sch2;
 SELECT * FROM pg_publication_tables;
  pubname | schemaname | tablename  
 ---------+------------+------------
  pub     | sch2       | tbl1_part1
 (1 row)
 
-SELECT * FROM pg_publication_sequences;
- pubname | schemaname | sequencename 
----------+------------+--------------
- pub     | sch2       | seq2
-(1 row)
-
 DROP PUBLICATION pub;
 DROP TABLE sch2.tbl1_part1;
 DROP TABLE sch1.tbl1;
@@ -2221,81 +1640,9 @@ SELECT * FROM pg_publication_tables;
  pub     | sch1       | tbl1
 (1 row)
 
-SELECT * FROM pg_publication_sequences;
- pubname | schemaname | sequencename 
----------+------------+--------------
-(0 rows)
-
-DROP PUBLICATION pub;
--- Schema publication
-CREATE PUBLICATION pub FOR SEQUENCE sch2.seq2;
-SELECT * FROM pg_publication_tables;
- pubname | schemaname | tablename 
----------+------------+-----------
-(0 rows)
-
-SELECT * FROM pg_publication_sequences;
- pubname | schemaname | sequencename 
----------+------------+--------------
- pub     | sch2       | seq2
-(1 row)
-
-DROP PUBLICATION pub;
--- Sequence publication
-CREATE PUBLICATION pub FOR ALL SEQUENCES IN SCHEMA sch2;
-SELECT * FROM pg_publication_tables;
- pubname | schemaname | tablename 
----------+------------+-----------
-(0 rows)
-
-SELECT * FROM pg_publication_sequences;
- pubname | schemaname | sequencename 
----------+------------+--------------
- pub     | sch2       | seq2
-(1 row)
-
-ALTER PUBLICATION pub ADD SEQUENCE sch1.seq1;
-SELECT * FROM pg_publication_tables;
- pubname | schemaname | tablename 
----------+------------+-----------
-(0 rows)
-
-SELECT * FROM pg_publication_sequences;
- pubname | schemaname | sequencename 
----------+------------+--------------
- pub     | sch1       | seq1
- pub     | sch2       | seq2
-(2 rows)
-
-ALTER PUBLICATION pub DROP SEQUENCE sch1.seq1;
-SELECT * FROM pg_publication_tables;
- pubname | schemaname | tablename 
----------+------------+-----------
-(0 rows)
-
-SELECT * FROM pg_publication_sequences;
- pubname | schemaname | sequencename 
----------+------------+--------------
- pub     | sch2       | seq2
-(1 row)
-
-ALTER PUBLICATION pub ADD ALL SEQUENCES IN SCHEMA sch1;
-SELECT * FROM pg_publication_tables;
- pubname | schemaname | tablename 
----------+------------+-----------
-(0 rows)
-
-SELECT * FROM pg_publication_sequences;
- pubname | schemaname | sequencename 
----------+------------+--------------
- pub     | sch1       | seq1
- pub     | sch2       | seq2
-(2 rows)
-
 RESET client_min_messages;
 DROP PUBLICATION pub;
 DROP TABLE sch1.tbl1;
-DROP SEQUENCE sch1.seq1, sch2.seq2;
 DROP SCHEMA sch1 cascade;
 DROP SCHEMA sch2 cascade;
 RESET SESSION AUTHORIZATION;
index db652ea8d8931e0cdb7235daf0c821da457bb843..f29375c2a9088180cabb02502376f0940b29d4f5 100644 (file)
@@ -1435,14 +1435,6 @@ pg_prepared_xacts| SELECT p.transaction,
    FROM ((pg_prepared_xact() p(transaction, gid, prepared, ownerid, dbid)
      LEFT JOIN pg_authid u ON ((p.ownerid = u.oid)))
      LEFT JOIN pg_database d ON ((p.dbid = d.oid)));
-pg_publication_sequences| SELECT p.pubname,
-    n.nspname AS schemaname,
-    c.relname AS sequencename
-   FROM pg_publication p,
-    LATERAL pg_get_publication_sequences((p.pubname)::text) gps(relid),
-    (pg_class c
-     JOIN pg_namespace n ON ((n.oid = c.relnamespace)))
-  WHERE (c.oid = gps.relid);
 pg_publication_tables| SELECT p.pubname,
     n.nspname AS schemaname,
     c.relname AS tablename
index 9d8323468d668e19c0c39ca64a3e3e72c6d123be..acd0468a9d9f7a5615080e80d84c20a8453ae1e9 100644 (file)
@@ -49,7 +49,6 @@ CREATE TRANSFORM FOR int LANGUAGE SQL (
 SET client_min_messages = 'ERROR';
 CREATE PUBLICATION addr_pub FOR TABLE addr_nsp.gentable;
 CREATE PUBLICATION addr_pub_schema FOR ALL TABLES IN SCHEMA addr_nsp;
-CREATE PUBLICATION addr_pub_schema2 FOR ALL SEQUENCES IN SCHEMA addr_nsp;
 RESET client_min_messages;
 CREATE SUBSCRIPTION regress_addr_sub CONNECTION '' PUBLICATION bar WITH (connect = false, slot_name = NONE);
 CREATE STATISTICS addr_nsp.gentable_stat ON a, b FROM addr_nsp.gentable;
@@ -199,8 +198,7 @@ WITH objects (type, name, args) AS (VALUES
                                ('transform', '{int}', '{sql}'),
                                ('access method', '{btree}', '{}'),
                                ('publication', '{addr_pub}', '{}'),
-                               ('publication namespace', '{addr_nsp}', '{addr_pub_schema,t}'),
-                               ('publication namespace', '{addr_nsp}', '{addr_pub_schema2,s}'),
+                               ('publication namespace', '{addr_nsp}', '{addr_pub_schema}'),
                                ('publication relation', '{addr_nsp, gentable}', '{addr_pub}'),
                                ('subscription', '{regress_addr_sub}', '{}'),
                                ('statistics object', '{addr_nsp, gentable_stat}', '{}')
@@ -220,7 +218,6 @@ SELECT (pg_identify_object(addr1.classid, addr1.objid, addr1.objsubid)).*,
 DROP FOREIGN DATA WRAPPER addr_fdw CASCADE;
 DROP PUBLICATION addr_pub;
 DROP PUBLICATION addr_pub_schema;
-DROP PUBLICATION addr_pub_schema2;
 DROP SUBSCRIPTION regress_addr_sub;
 
 DROP SCHEMA addr_nsp CASCADE;
index 96b02947fa260dd1da2aadd391b092ab3020c73e..8539110025e777771444437c373d686e967ea2b5 100644 (file)
@@ -27,7 +27,7 @@ CREATE PUBLICATION testpub_xxx WITH (publish_via_partition_root = 'true', publis
 
 \dRp
 
-ALTER PUBLICATION testpub_default SET (publish = 'insert, update, delete, sequence');
+ALTER PUBLICATION testpub_default SET (publish = 'insert, update, delete');
 
 \dRp
 
@@ -46,8 +46,6 @@ ALTER PUBLICATION testpub_foralltables SET (publish = 'insert, update');
 CREATE TABLE testpub_tbl2 (id serial primary key, data text);
 -- fail - can't add to for all tables publication
 ALTER PUBLICATION testpub_foralltables ADD TABLE testpub_tbl2;
--- fail - can't add a table using ADD SEQUENCE command
-ALTER PUBLICATION testpub_foralltables ADD SEQUENCE testpub_tbl2;
 -- fail - can't drop from all tables publication
 ALTER PUBLICATION testpub_foralltables DROP TABLE testpub_tbl2;
 -- fail - can't add to for all tables publication
@@ -106,199 +104,6 @@ RESET client_min_messages;
 DROP TABLE testpub_tbl3, testpub_tbl3a;
 DROP PUBLICATION testpub3, testpub4;
 
---- adding sequences
-CREATE SEQUENCE testpub_seq0;
-CREATE SEQUENCE pub_test.testpub_seq1;
-
-SET client_min_messages = 'ERROR';
-CREATE PUBLICATION testpub_forallsequences FOR ALL SEQUENCES WITH (publish = 'sequence');
-RESET client_min_messages;
-ALTER PUBLICATION testpub_forallsequences SET (publish = 'insert, sequence');
-
-CREATE SEQUENCE testpub_seq2;
--- fail - can't add to for all sequences publication
-ALTER PUBLICATION testpub_forallsequences ADD SEQUENCE testpub_seq2;
--- fail - can't drop from all sequences publication
-ALTER PUBLICATION testpub_forallsequences DROP SEQUENCE testpub_seq2;
--- fail - can't add to for all sequences publication
-ALTER PUBLICATION testpub_forallsequences SET SEQUENCE pub_test.testpub_seq1;
-
--- fail - can't add schema to 'FOR ALL SEQUENCES' publication
-ALTER PUBLICATION testpub_forallsequences ADD ALL SEQUENCES IN SCHEMA pub_test;
--- fail - can't drop schema from 'FOR ALL SEQUENCES' publication
-ALTER PUBLICATION testpub_forallsequences DROP ALL SEQUENCES IN SCHEMA pub_test;
--- fail - can't set schema to 'FOR ALL SEQUENCES' publication
-ALTER PUBLICATION testpub_forallsequences SET ALL SEQUENCES IN SCHEMA pub_test;
-
-SET client_min_messages = 'ERROR';
-CREATE PUBLICATION testpub_forsequence FOR SEQUENCE testpub_seq0;
-RESET client_min_messages;
--- should be able to add schema to 'FOR SEQUENCE' publication
-ALTER PUBLICATION testpub_forsequence ADD ALL SEQUENCES IN SCHEMA pub_test;
-\dRp+ testpub_forsequence
--- fail - can't add sequence from the schema we already added
-ALTER PUBLICATION testpub_forsequence ADD SEQUENCE pub_test.testpub_seq1;
--- fail - can't add sequence using ADD TABLE command
-ALTER PUBLICATION testpub_forsequence ADD TABLE pub_test.testpub_seq1;
--- should be able to drop schema from 'FOR SEQUENCE' publication
-ALTER PUBLICATION testpub_forsequence DROP ALL SEQUENCES IN SCHEMA pub_test;
-\dRp+ testpub_forsequence
--- should be able to set schema to 'FOR SEQUENCE' publication
-ALTER PUBLICATION testpub_forsequence SET ALL SEQUENCES IN SCHEMA pub_test;
-\dRp+ testpub_forsequence
-
-SET client_min_messages = 'ERROR';
-CREATE PUBLICATION testpub_forschema FOR ALL SEQUENCES IN SCHEMA pub_test;
-RESET client_min_messages;
--- fail - can't create publication with schema and sequence of the same schema
-CREATE PUBLICATION testpub_for_seq_schema FOR ALL SEQUENCES IN SCHEMA pub_test, SEQUENCE pub_test.testpub_seq1;
--- fail - can't add a sequence of the same schema to the schema publication
-ALTER PUBLICATION testpub_forschema ADD SEQUENCE pub_test.testpub_seq1;
--- fail - can't drop a sequence from the schema publication which isn't in the
--- publication
-ALTER PUBLICATION testpub_forschema DROP SEQUENCE pub_test.testpub_seq1;
--- should be able to set sequence to schema publication
-ALTER PUBLICATION testpub_forschema SET SEQUENCE pub_test.testpub_seq1;
-\dRp+ testpub_forschema
-
-SELECT pubname, puballtables, puballsequences FROM pg_publication WHERE pubname = 'testpub_forallsequences';
-\d+ pub_test.testpub_seq1
-\dRp+ testpub_forallsequences
-DROP SEQUENCE testpub_seq0, pub_test.testpub_seq1, testpub_seq2;
-DROP PUBLICATION testpub_forallsequences, testpub_forsequence, testpub_forschema;
-
-
--- publication testing multiple sequences at the same time
-CREATE SEQUENCE testpub_seq1;
-CREATE SEQUENCE testpub_seq2;
-
-SET client_min_messages = 'ERROR';
-CREATE PUBLICATION testpub_multi FOR SEQUENCE testpub_seq1, testpub_seq2;
-RESET client_min_messages;
-
-\dRp+ testpub_multi
-
-DROP PUBLICATION testpub_multi;
-DROP SEQUENCE testpub_seq1;
-DROP SEQUENCE testpub_seq2;
-
-
--- Publication mixing tables and sequences
-SET client_min_messages = 'ERROR';
-CREATE PUBLICATION testpub_mix;
-RESET client_min_messages;
-
-CREATE SEQUENCE testpub_seq1;
-CREATE SEQUENCE pub_test.testpub_seq2;
-
-ALTER PUBLICATION testpub_mix ADD SEQUENCE testpub_seq1, TABLE testpub_tbl1;
-\dRp+ testpub_mix
-
-ALTER PUBLICATION testpub_mix ADD ALL SEQUENCES IN SCHEMA pub_test, ALL TABLES IN SCHEMA pub_test;
-\dRp+ testpub_mix
-
-ALTER PUBLICATION testpub_mix DROP ALL SEQUENCES IN SCHEMA pub_test;
-\dRp+ testpub_mix
-
-ALTER PUBLICATION testpub_mix DROP ALL TABLES IN SCHEMA pub_test;
-\dRp+ testpub_mix
-
-DROP PUBLICATION testpub_mix;
-DROP SEQUENCE testpub_seq1;
-DROP SEQUENCE pub_test.testpub_seq2;
-
-
--- make sure we replicate only the correct relation type
-CREATE SCHEMA pub_test1;
-CREATE SEQUENCE pub_test1.test_seq1;
-CREATE TABLE pub_test1.test_tbl1 (a int primary key, b int);
-
-CREATE SCHEMA pub_test2;
-CREATE SEQUENCE pub_test2.test_seq2;
-CREATE TABLE pub_test2.test_tbl2 (a int primary key, b int);
-
-SET client_min_messages = 'ERROR';
-CREATE PUBLICATION testpub_schemas;
-RESET client_min_messages;
-
--- add tables from one schema, sequences from the other
-ALTER PUBLICATION testpub_schemas ADD ALL TABLES IN SCHEMA pub_test2;
-ALTER PUBLICATION testpub_schemas ADD ALL SEQUENCES IN SCHEMA pub_test1;
-
-\dRp+ testpub_schemas
-
-\dn+ pub_test1
-\dn+ pub_test2
-
-\d+ pub_test1.test_seq1;
-\d+ pub_test1.test_tbl1;
-
-\d+ pub_test2.test_seq2;
-\d+ pub_test2.test_tbl2;
-
--- add the other object type from each schema
-ALTER PUBLICATION testpub_schemas ADD ALL TABLES IN SCHEMA pub_test1;
-ALTER PUBLICATION testpub_schemas ADD ALL SEQUENCES IN SCHEMA pub_test2;
-
-\dRp+ testpub_schemas
-
-\dn+ pub_test1
-\dn+ pub_test2
-
-\d+ pub_test1.test_seq1;
-\d+ pub_test1.test_tbl1;
-
-\d+ pub_test2.test_seq2;
-\d+ pub_test2.test_tbl2;
-
--- now drop the object type added first
-ALTER PUBLICATION testpub_schemas DROP ALL TABLES IN SCHEMA pub_test2;
-ALTER PUBLICATION testpub_schemas DROP ALL SEQUENCES IN SCHEMA pub_test1;
-
-\dRp+ testpub_schemas
-
-\dn+ pub_test1
-\dn+ pub_test2
-
-\d+ pub_test1.test_seq1;
-\d+ pub_test1.test_tbl1;
-
-\d+ pub_test2.test_seq2;
-\d+ pub_test2.test_tbl2;
-
--- should fail (publication contains the whole schema)
-ALTER PUBLICATION testpub_schemas ADD TABLE pub_test1.test_tbl1;
-ALTER PUBLICATION testpub_schemas ADD SEQUENCE pub_test2.test_seq2;
-
--- should work (different schema)
-ALTER PUBLICATION testpub_schemas ADD TABLE pub_test2.test_tbl2;
-ALTER PUBLICATION testpub_schemas ADD SEQUENCE pub_test1.test_seq1;
-
-\dRp+ testpub_schemas
-
-\d+ pub_test1.test_seq1;
-\d+ pub_test1.test_tbl1;
-
-\d+ pub_test2.test_seq2;
-\d+ pub_test2.test_tbl2;
-
--- now drop the explicitly added objects again
-ALTER PUBLICATION testpub_schemas DROP TABLE pub_test2.test_tbl2;
-ALTER PUBLICATION testpub_schemas DROP SEQUENCE pub_test1.test_seq1;
-
-\dRp+ testpub_schemas
-
-\d+ pub_test1.test_seq1;
-\d+ pub_test1.test_tbl1;
-
-\d+ pub_test2.test_seq2;
-\d+ pub_test2.test_tbl2;
-
-DROP PUBLICATION testpub_schemas;
-DROP TABLE pub_test1.test_tbl1, pub_test2.test_tbl2;
-DROP SEQUENCE pub_test1.test_seq1, pub_test2.test_seq2;
-DROP SCHEMA pub_test1, pub_test2;
-
 -- Tests for partitioned tables
 SET client_min_messages = 'ERROR';
 CREATE PUBLICATION testpub_forparted;
@@ -1199,51 +1004,32 @@ CREATE SCHEMA sch1;
 CREATE SCHEMA sch2;
 CREATE TABLE sch1.tbl1 (a int) PARTITION BY RANGE(a);
 CREATE TABLE sch2.tbl1_part1 PARTITION OF sch1.tbl1 FOR VALUES FROM (1) to (10);
-CREATE SEQUENCE sch1.seq1;
-CREATE SEQUENCE sch2.seq2;
 -- Schema publication that does not include the schema that has the parent table
 CREATE PUBLICATION pub FOR ALL TABLES IN SCHEMA sch2 WITH (PUBLISH_VIA_PARTITION_ROOT=1);
-ALTER PUBLICATION pub ADD ALL SEQUENCES IN SCHEMA sch2;
 SELECT * FROM pg_publication_tables;
-SELECT * FROM pg_publication_sequences;
 
 DROP PUBLICATION pub;
 -- Table publication that does not include the parent table
 CREATE PUBLICATION pub FOR TABLE sch2.tbl1_part1 WITH (PUBLISH_VIA_PARTITION_ROOT=1);
-ALTER PUBLICATION pub ADD SEQUENCE sch2.seq2;
 SELECT * FROM pg_publication_tables;
-SELECT * FROM pg_publication_sequences;
 
 -- Table publication that includes both the parent table and the child table
 ALTER PUBLICATION pub ADD TABLE sch1.tbl1;
-ALTER PUBLICATION pub ADD SEQUENCE sch1.seq1;
 SELECT * FROM pg_publication_tables;
-SELECT * FROM pg_publication_sequences;
 
 DROP PUBLICATION pub;
 -- Schema publication that does not include the schema that has the parent table
 CREATE PUBLICATION pub FOR ALL TABLES IN SCHEMA sch2 WITH (PUBLISH_VIA_PARTITION_ROOT=0);
-ALTER PUBLICATION pub ADD SEQUENCE sch1.seq1;
-SELECT * FROM pg_publication_tables;
-SELECT * FROM pg_publication_sequences;
-
-DROP PUBLICATION pub;
--- Sequence publication
-CREATE PUBLICATION pub FOR SEQUENCE sch2.seq2;
 SELECT * FROM pg_publication_tables;
-SELECT * FROM pg_publication_sequences;
 
 DROP PUBLICATION pub;
 -- Table publication that does not include the parent table
 CREATE PUBLICATION pub FOR TABLE sch2.tbl1_part1 WITH (PUBLISH_VIA_PARTITION_ROOT=0);
 SELECT * FROM pg_publication_tables;
-SELECT * FROM pg_publication_sequences;
 
 -- Table publication that includes both the parent table and the child table
 ALTER PUBLICATION pub ADD TABLE sch1.tbl1;
-ALTER PUBLICATION pub ADD ALL SEQUENCES IN SCHEMA sch2;
 SELECT * FROM pg_publication_tables;
-SELECT * FROM pg_publication_sequences;
 
 DROP PUBLICATION pub;
 DROP TABLE sch2.tbl1_part1;
@@ -1256,36 +1042,10 @@ CREATE TABLE sch1.tbl1_part3 (a int) PARTITION BY RANGE(a);
 ALTER TABLE sch1.tbl1 ATTACH PARTITION sch1.tbl1_part3 FOR VALUES FROM (20) to (30);
 CREATE PUBLICATION pub FOR ALL TABLES IN SCHEMA sch1 WITH (PUBLISH_VIA_PARTITION_ROOT=1);
 SELECT * FROM pg_publication_tables;
-SELECT * FROM pg_publication_sequences;
-
-DROP PUBLICATION pub;
--- Schema publication
-CREATE PUBLICATION pub FOR SEQUENCE sch2.seq2;
-SELECT * FROM pg_publication_tables;
-SELECT * FROM pg_publication_sequences;
-
-DROP PUBLICATION pub;
--- Sequence publication
-CREATE PUBLICATION pub FOR ALL SEQUENCES IN SCHEMA sch2;
-SELECT * FROM pg_publication_tables;
-SELECT * FROM pg_publication_sequences;
-
-ALTER PUBLICATION pub ADD SEQUENCE sch1.seq1;
-SELECT * FROM pg_publication_tables;
-SELECT * FROM pg_publication_sequences;
-
-ALTER PUBLICATION pub DROP SEQUENCE sch1.seq1;
-SELECT * FROM pg_publication_tables;
-SELECT * FROM pg_publication_sequences;
-
-ALTER PUBLICATION pub ADD ALL SEQUENCES IN SCHEMA sch1;
-SELECT * FROM pg_publication_tables;
-SELECT * FROM pg_publication_sequences;
 
 RESET client_min_messages;
 DROP PUBLICATION pub;
 DROP TABLE sch1.tbl1;
-DROP SEQUENCE sch1.seq1, sch2.seq2;
 DROP SCHEMA sch1 cascade;
 DROP SCHEMA sch2 cascade;
 
diff --git a/src/test/subscription/t/030_sequences.pl b/src/test/subscription/t/030_sequences.pl
deleted file mode 100644 (file)
index 9ae3c03..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-
-# Copyright (c) 2021, PostgreSQL Global Development Group
-
-# This tests that sequences are replicated correctly by logical replication
-use strict;
-use warnings;
-use PostgreSQL::Test::Cluster;
-use PostgreSQL::Test::Utils;
-use Test::More;
-
-# Initialize publisher node
-my $node_publisher = PostgreSQL::Test::Cluster->new('publisher');
-$node_publisher->init(allows_streaming => 'logical');
-$node_publisher->start;
-
-# Create subscriber node
-my $node_subscriber = PostgreSQL::Test::Cluster->new('subscriber');
-$node_subscriber->init(allows_streaming => 'logical');
-$node_subscriber->start;
-
-# Create some preexisting content on publisher
-my $ddl = qq(
-       CREATE TABLE seq_test (v BIGINT);
-       CREATE SEQUENCE s;
-);
-
-# Setup structure on the publisher
-$node_publisher->safe_psql('postgres', $ddl);
-
-# Create some the same structure on subscriber, and an extra sequence that
-# we'll create on the publisher later
-$ddl = qq(
-       CREATE TABLE seq_test (v BIGINT);
-       CREATE SEQUENCE s;
-       CREATE SEQUENCE s2;
-);
-
-$node_subscriber->safe_psql('postgres', $ddl);
-
-# Setup logical replication
-my $publisher_connstr = $node_publisher->connstr . ' dbname=postgres';
-$node_publisher->safe_psql('postgres',
-       "CREATE PUBLICATION seq_pub");
-
-$node_publisher->safe_psql('postgres',
-       "ALTER PUBLICATION seq_pub ADD SEQUENCE s");
-
-$node_subscriber->safe_psql('postgres',
-       "CREATE SUBSCRIPTION seq_sub CONNECTION '$publisher_connstr' PUBLICATION seq_pub"
-);
-
-$node_publisher->wait_for_catchup('seq_sub');
-
-# Wait for initial sync to finish as well
-my $synced_query =
-  "SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('s', 'r');";
-$node_subscriber->poll_query_until('postgres', $synced_query)
-  or die "Timed out while waiting for subscriber to synchronize data";
-
-# Insert initial test data
-$node_publisher->safe_psql(
-       'postgres', qq(
-       -- generate a number of values using the sequence
-       INSERT INTO seq_test SELECT nextval('s') FROM generate_series(1,100);
-));
-
-$node_publisher->wait_for_catchup('seq_sub');
-
-# Check the data on subscriber
-my $result = $node_subscriber->safe_psql(
-       'postgres', qq(
-       SELECT * FROM s;
-));
-
-is( $result, '132|0|t',
-       'initial test data replicated');
-
-
-# advance the sequence in a rolled-back transaction - the rollback
-# does not wait for the replication, so we could see any intermediate state
-# so do something else after the test, to ensure we wait for everything
-$node_publisher->safe_psql(
-       'postgres', qq(
-       BEGIN;
-       INSERT INTO seq_test SELECT nextval('s') FROM generate_series(1,100);
-       ROLLBACK;
-       INSERT INTO seq_test VALUES (-1);
-));
-
-$node_publisher->wait_for_catchup('seq_sub');
-
-# Check the data on subscriber
-$result = $node_subscriber->safe_psql(
-       'postgres', qq(
-       SELECT * FROM s;
-));
-
-is( $result, '231|0|t',
-       'advance sequence in rolled-back transaction');
-
-
-# create a new sequence and roll it back - should not be replicated, due to
-# the transactional behavior
-$node_publisher->safe_psql(
-       'postgres', qq(
-       BEGIN;
-       CREATE SEQUENCE s2;
-       ALTER PUBLICATION seq_pub ADD SEQUENCE s2;
-       INSERT INTO seq_test SELECT nextval('s2') FROM generate_series(1,100);
-       ROLLBACK;
-));
-
-$node_publisher->wait_for_catchup('seq_sub');
-
-# Check the data on subscriber
-$result = $node_subscriber->safe_psql(
-       'postgres', qq(
-       SELECT * FROM s2;
-));
-
-is( $result, '1|0|f',
-       'create new sequence and roll it back');
-
-
-# create a new sequence, advance it in a rolled-back transaction, but commit
-# the create - the advance should be replicated nevertheless
-$node_publisher->safe_psql(
-       'postgres', qq(
-       BEGIN;
-       CREATE SEQUENCE s2;
-       ALTER PUBLICATION seq_pub ADD SEQUENCE s2;
-       SAVEPOINT sp1;
-       INSERT INTO seq_test SELECT nextval('s2') FROM generate_series(1,100);
-       ROLLBACK TO sp1;
-       COMMIT;
-));
-
-$node_publisher->wait_for_catchup('seq_sub');
-
-# Wait for sync of the second sequence we just added to finish
-$synced_query =
-  "SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('s', 'r');";
-$node_subscriber->poll_query_until('postgres', $synced_query)
-  or die "Timed out while waiting for subscriber to synchronize data";
-
-# Check the data on subscriber
-$result = $node_subscriber->safe_psql(
-       'postgres', qq(
-       SELECT * FROM s2;
-));
-
-is( $result, '132|0|t',
-       'create sequence, advance it in rolled-back transaction, but commit the create');
-
-
-# advance the new sequence in a transaction, and roll it back - the rollback
-# does not wait for the replication, so we could see any intermediate state
-# so do something else after the test, to ensure we wait for everything
-$node_publisher->safe_psql(
-       'postgres', qq(
-       BEGIN;
-       INSERT INTO seq_test SELECT nextval('s2') FROM generate_series(1,100);
-       ROLLBACK;
-       INSERT INTO seq_test VALUES (-1);
-));
-
-$node_publisher->wait_for_catchup('seq_sub');
-
-# Check the data on subscriber
-$result = $node_subscriber->safe_psql(
-       'postgres', qq(
-       SELECT * FROM s2;
-));
-
-is( $result, '231|0|t',
-       'advance the new sequence in a transaction and roll it back');
-
-
-# advance the sequence in a subtransaction - the subtransaction gets rolled
-# back, but commit the main one - the changes should still be replicated
-$node_publisher->safe_psql(
-       'postgres', qq(
-       BEGIN;
-       SAVEPOINT s1;
-       INSERT INTO seq_test SELECT nextval('s2') FROM generate_series(1,100);
-       ROLLBACK TO s1;
-       COMMIT;
-));
-
-$node_publisher->wait_for_catchup('seq_sub');
-
-# Check the data on subscriber
-$result = $node_subscriber->safe_psql(
-       'postgres', qq(
-       SELECT * FROM s2;
-));
-
-is( $result, '330|0|t',
-       'advance sequence in a subtransaction');
-
-
-done_testing();