Re: Column Filtering in Logical Replication
Justin Pryzby <pryzby@telsasoft.com>
> + bool am_partition = false;
>...
> Assert(!isnull);
> lrel->relkind = DatumGetChar(slot_getattr(slot, 3, &isnull));
> Assert(!isnull);
> + am_partition = DatumGetChar(slot_getattr(slot, 4, &isnull));
I think this needs to be GetBool.
You should Assert(!isnull) like the others.
Also, I think it doesn't need to be initialized to "false".
> + /*
> + * Even if the user listed all columns in the column list, we cannot
> + * allow a column list to be specified when REPLICA IDENTITY is FULL;
> + * that would cause problems if a new column is added later, because
> + * that could would have to be included (because of being part of the
could would is wrong
> + /*
> + * Translate list of columns to attnums. We prohibit system attributes and
> + * make sure there are no duplicate columns.
> + *
> + */
extraneous line
> +/*
> + * Gets a list of OIDs of all column-partial publications of the given
> + * relation, that is, those that specify a column list.
I would call this a "partial-column" publication.
> + errmsg("cannot set REPLICA IDENTITY FULL when column-partial publications exist"));
> + * Check column-partial publications. All publications have to include all
same
> + /*
> + * Store the column names only if they are contained in column filter
period(.)
> + * LogicalRepRelation will only contain attributes corresponding to those
> + * specficied in column filters.
specified
> --- a/src/include/catalog/pg_publication_rel.h
> +++ b/src/include/catalog/pg_publication_rel.h
> @@ -31,6 +31,9 @@ CATALOG(pg_publication_rel,6106,PublicationRelRelationId)
> Oid oid; /* oid */
> Oid prpubid BKI_LOOKUP(pg_publication); /* Oid of the publication */
> Oid prrelid BKI_LOOKUP(pg_class); /* Oid of the relation */
> +#ifdef CATALOG_VARLEN
> + int2vector prattrs; /* Variable length field starts here */
> +#endif
The language in the pre-existing comments is better:
/* variable-length fields start here */
> @@ -791,12 +875,13 @@ fetch_remote_table_info(char *nspname, char *relname,
>
> ExecClearTuple(slot);
> }
> +
> ExecDropSingleTupleTableSlot(slot);
> + walrcv_clear_result(res);
> + pfree(cmd.data);
>
> lrel->natts = natt;
>
> - walrcv_clear_result(res);
> - pfree(cmd.data);
> }
The blank line after "lrel->natts = natt;" should be removed.
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Doc: Explain about Column List feature.
- f98d07424523 16.0 landed
- 25996a82a446 15.0 landed
-
Doc: fix column list vs. replica identity rules.
- 376af686111e 16.0 landed
- ab3131880d8a 15.0 landed
-
Prohibit combining publications with different column lists.
- fd0b9dcebda7 15.0 cited
-
Fix the check to limit sync workers.
- be46985bed8a 10.21 landed
- a90de822e483 11.16 landed
- 59348fbdeb7b 12.11 landed
- 82d4a17a1750 13.7 landed
- c9dea58e2702 14.3 landed
- dd4ab6fd6528 15.0 landed
-
Wait for subscription to sync in t/031_column_list.sql
- 404f49338fef 15.0 landed
-
Move prattrs to the pg_publication_rel section in docs
- 41b00f8e601f 15.0 landed
-
Allow specifying column lists for logical replication
- 923def9a533a 15.0 landed
-
Fix row filters with multiple publications
- 5a079662256e 15.0 landed
-
Fix publish_as_relid with multiple publications
- 27fafee72d17 13.7 landed
- 677a1dc0ca0f 14.3 landed
- c91f71b9dc91 15.0 landed
-
Add some additional tests for row filters in logical replication.
- ceb57afd3ce1 15.0 cited
-
Add index on pg_publication_rel.prpubid
- 025b920a3d45 15.0 landed
-
Avoid using DefElemAction in AlterPublicationStmt
- 9623d8999603 15.0 landed
-
Small cleanups related to PUBLICATION framework code
- c9105dd3660f 15.0 landed
-
Add PublicationTable and PublicationRelInfo structs
- 0c6828fa987b 15.0 landed
-
Fix various concurrency issues in logical replication worker launching
- de4389712206 10.0 cited