> Few comments: > 1) Here tab1 and tab2 are exactly the same tables, just check if the > table tab1 itself can be used for your tests. > @@ -24,20 +24,50 @@ $node_publisher->safe_psql('postgres', > "CREATE TABLE tab1 (a int PRIMARY KEY, b int GENERATED ALWAYS > AS (a * 2) STORED)" > ); > +$node_publisher->safe_psql('postgres', > + "CREATE TABLE tab2 (a int PRIMARY KEY, b int GENERATED ALWAYS > AS (a * 2) STORED)" > +);
On the subscription side the tables have different descriptions, so we need to have different tables on the publisher side. > 2) We can document that the include_generate_columns option cannot be > altered. > > 3) You can mention that include-generated-columns is true by default > and generated column data will be selected > +-- When 'include-generated-columns' is not set > +SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, > NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); > + data > +------------------------------------------------------------- > + BEGIN > + table public.gencoltable: INSERT: a[integer]:1 b[integer]:2 > + table public.gencoltable: INSERT: a[integer]:2 b[integer]:4 > + table public.gencoltable: INSERT: a[integer]:3 b[integer]:6 > + COMMIT > +(5 rows) > > 4) The comment seems to be wrong here, the comment says b will not be > replicated but b is being selected: > -- When 'include-generated-columns' = '1' the generated column 'b' > values will not be replicated > INSERT INTO gencoltable (a) VALUES (1), (2), (3); > SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, > NULL, 'include-xids', '0', 'skip-empty-xacts', '1', > 'include-generated-columns', '1'); > data > ------------------------------------------------------------- > BEGIN > table public.gencoltable: INSERT: a[integer]:1 b[integer]:2 > table public.gencoltable: INSERT: a[integer]:2 b[integer]:4 > table public.gencoltable: INSERT: a[integer]:3 b[integer]:6 > COMMIT > (5 rows) > > 5) Similarly here too the comment seems to be wrong, the comment says > b will not replicated but b is not being selected: > INSERT INTO gencoltable (a) VALUES (4), (5), (6); > -- When 'include-generated-columns' = '0' the generated column 'b' > values will be replicated > SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, > NULL, 'include-xids', '0', 'skip-empty-xacts', '1', > 'include-generated-columns', '0'); > data > ------------------------------------------------ > BEGIN > table public.gencoltable: INSERT: a[integer]:4 > table public.gencoltable: INSERT: a[integer]:5 > table public.gencoltable: INSERT: a[integer]:6 > COMMIT > (5 rows) > > 6) SUBOPT_include_generated_columns change it to SUBOPT_GENERATED to > keep the name consistent: > --- a/src/backend/commands/subscriptioncmds.c > +++ b/src/backend/commands/subscriptioncmds.c > @@ -72,6 +72,7 @@ > #define SUBOPT_FAILOVER 0x00002000 > #define SUBOPT_LSN 0x00004000 > #define SUBOPT_ORIGIN 0x00008000 > +#define SUBOPT_include_generated_columns 0x00010000 > > 7) The comment style seems to be inconsistent, both of them can start > in lower case > +-- check include-generated-columns option with generated column > +CREATE TABLE gencoltable (a int, b int GENERATED ALWAYS AS (a * 2) STORED); > +INSERT INTO gencoltable (a) VALUES (1), (2), (3); > +-- When 'include-generated-columns' is not set > +SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, > NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); > + data > +------------------------------------------------------------- > + BEGIN > + table public.gencoltable: INSERT: a[integer]:1 b[integer]:2 > + table public.gencoltable: INSERT: a[integer]:2 b[integer]:4 > + table public.gencoltable: INSERT: a[integer]:3 b[integer]:6 > + COMMIT > +(5 rows) > + > +-- When 'include-generated-columns' = '1' the generated column 'b' > values will not be replicated > > 8) This could be changed to remove the insert statements by using > pg_logical_slot_peek_changes: > -- When 'include-generated-columns' is not set > SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, > NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); > -- When 'include-generated-columns' = '1' the generated column 'b' > values will not be replicated > INSERT INTO gencoltable (a) VALUES (1), (2), (3); > SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, > NULL, 'include-xids', '0', 'skip-empty-xacts', '1', > 'include-generated-columns', '1'); > INSERT INTO gencoltable (a) VALUES (4), (5), (6); > -- When 'include-generated-columns' = '0' the generated column 'b' > values will be replicated > SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, > NULL, 'include-xids', '0', 'skip-empty-xacts', '1', > 'include-generated-columns', '0'); > to: > -- When 'include-generated-columns' is not set > SELECT data FROM pg_logical_slot_peek_changes('regression_slot', NULL, > NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); > -- When 'include-generated-columns' = '1' the generated column 'b' > values will not be replicated > SELECT data FROM pg_logical_slot_peek_changes('regression_slot', NULL, > NULL, 'include-xids', '0', 'skip-empty-xacts', '1', > 'include-generated-columns', '1'); > -- When 'include-generated-columns' = '0' the generated column 'b' > values will be replicated > SELECT data FROM pg_logical_slot_peek_changes('regression_slot', NULL, > NULL, 'include-xids', '0', 'skip-empty-xacts', '1', > 'include-generated-columns', '0'); > > 9) In commit message the option used is wrong > include_generated_columns should actually be > include-generated-columns: > Usage from test_decoding plugin: > SELECT data FROM pg_logical_slot_get_changes('slot2', NULL, NULL, > 'include-xids', '0', 'skip-empty-xacts', '1', > 'include_generated_columns','1'); All the comments are handled. Patch v8-0001 contains all the changes required. See [1] for the changes added. [1] https://www.postgresql.org/message-id/CAHv8Rj%2BAi0CgtXiAga82bWpWB8fVcOWycNyJ_jqXm788v3R8rQ%40mail.gmail.com Thanks and Regards, Shubham Khanna.