Hi Shlok.
Before this patch goes too far, I had a fundamental question.
I understand that sequences and tables are closely related; sequences
are just like a single-row table, but they have a RELKIND_SEQUENCE.
There is a lot of shared code internally, so I guess it is tempting to
specify both the published sequences and tables together in the System
Catalog 'pg_publication_rels'.
I'm just wondering whether that is really the best way to go?
Currently, pg_publication_rels has only tables. So they might be:
* only included tables -- from a publication using "FOR TABLE ..."
* only excluded tables -- from a publication using "FOR ALL TABLES
EXCEPT (TABLE ...)"
Because included/excluded tables cannot co-exist, we can easily know
the type of the CREATE/ALTER PUBLICATION command and the type of
'pg_publication_rels' content without digging deeper.
~~~
But introducing sequences introduces complexity. Now, AFAICT, we
cannot know what each row of 'pg_publication_rels' means without
inspecting the relation type of that row. e.g. now we have lots of
possible combinations like.
pg_publication_rels has:
* only included tables.
* only excluded tables.
* only excluded sequences.
* excluded tables and excluded sequences.
* included tables and excluded sequences.
Furthermore, there will be yet more combinations one day if the
individual "FOR SEQUENCE ..." syntax is implemented.
pg_publication_rels has:
* only included sequences
* included sequences and included tables
* included sequences and excluded tables
IIUC, it means that the SQL everywhere now requires joins and relkind
checks to identify the type.
~~
Furthermore, AFAICT, the 'pg_publication_rels' attributes 'prattrs'
and 'prquals' don't even have meaning for sequences. That's another
reason why it feels a bit like a square peg was jammed into a round
hole just because 'pg_publication_rels' was conveniently available.
~~
SUMMARY
Given:
* Option 1 = use 'pg_publication_rels' for both tables and sequences.
* Option 2 = use 'pg_publication_rels' just for tables and use a new
'pg_publication_seq' just for sequences.
I'm not convinced that the chosen way (Option 1) is better. Can you
explain why it is?
======
Kind Regards,
Peter Smith.
Fujitsu Australia