diff options
author | Tomas Vondra <tomas.vondra@postgresql.org> | 2022-03-25 20:12:50 +0100 |
---|---|---|
committer | Tomas Vondra <tomas.vondra@postgresql.org> | 2022-03-25 21:07:17 +0100 |
commit | 05843b1aa49df2ecc9b97c693b755bd1b6f856a9 (patch) | |
tree | 95d7199c707bb21b8f5af3966b746d8a4249851d /src | |
parent | 174877f1e344812f620fd8891af97104d5dfca13 (diff) | |
download | postgresql-05843b1aa49df2ecc9b97c693b755bd1b6f856a9.tar.gz postgresql-05843b1aa49df2ecc9b97c693b755bd1b6f856a9.zip |
Minor improvements in sequence decoding code and docs
A couple minor comment improvements and code cleanups, based on
post-commit feedback to the sequence decoding patch.
Author: Amit Kapila, vignesh C
Discussion: https://postgr.es/m/aeb2ba8d-e6f4-5486-cc4c-0d4982c291cb@enterprisedb.com
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/catalog/pg_publication.c | 2 | ||||
-rw-r--r-- | src/backend/commands/publicationcmds.c | 23 | ||||
-rw-r--r-- | src/backend/replication/pgoutput/pgoutput.c | 4 |
3 files changed, 13 insertions, 16 deletions
diff --git a/src/backend/catalog/pg_publication.c b/src/backend/catalog/pg_publication.c index 5bcfc94e2ba..514a94796e1 100644 --- a/src/backend/catalog/pg_publication.c +++ b/src/backend/catalog/pg_publication.c @@ -193,7 +193,7 @@ AssertObjectTypeValid(char objectType) } /* - * Determine object type given the object type set for a schema. + * Determine object type matching a given a relkind value. */ char pub_get_object_type_for_relkind(char relkind) diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c index c6437799c53..e449e8e8f29 100644 --- a/src/backend/commands/publicationcmds.c +++ b/src/backend/commands/publicationcmds.c @@ -175,8 +175,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 **schemas) + List **tables_schemas, List **sequences_schemas) { ListCell *cell; PublicationObjSpec *pubobj; @@ -204,14 +203,12 @@ ObjectsInPublicationToOids(List *pubobjspec_list, ParseState *pstate, /* Filter out duplicates if user specifies "sch1, sch1" */ *tables_schemas = list_append_unique_oid(*tables_schemas, schemaid); - *schemas = list_append_unique_oid(*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); @@ -225,7 +222,6 @@ ObjectsInPublicationToOids(List *pubobjspec_list, ParseState *pstate, /* Filter out duplicates if user specifies "sch1, sch1" */ *tables_schemas = list_append_unique_oid(*tables_schemas, schemaid); - *schemas = list_append_unique_oid(*schemas, schemaid); break; case PUBLICATIONOBJ_SEQUENCES_IN_CUR_SCHEMA: search_path = fetch_search_path(false); @@ -239,7 +235,6 @@ ObjectsInPublicationToOids(List *pubobjspec_list, ParseState *pstate, /* 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 */ @@ -679,7 +674,6 @@ CreatePublication(ParseState *pstate, CreatePublicationStmt *stmt) List *sequences = NIL; List *tables_schemaidlist = NIL; List *sequences_schemaidlist = NIL; - List *schemaidlist = NIL; bool for_all_tables = false; bool for_all_sequences = false; @@ -706,6 +700,12 @@ CreatePublication(ParseState *pstate, CreatePublicationStmt *stmt) (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 */ @@ -782,8 +782,7 @@ CreatePublication(ParseState *pstate, CreatePublicationStmt *stmt) ObjectsInPublicationToOids(stmt->pubobjects, pstate, &tables, &sequences, &tables_schemaidlist, - &sequences_schemaidlist, - &schemaidlist); + &sequences_schemaidlist); /* FOR ALL TABLES IN SCHEMA requires superuser */ if (list_length(tables_schemaidlist) > 0 && !superuser()) @@ -1321,7 +1320,7 @@ CheckAlterPublication(AlterPublicationStmt *stmt, HeapTuple tup, 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 tables. */ + /* Check that user is allowed to manipulate the publication sequences. */ if (sequences && pubform->puballsequences) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), @@ -1462,14 +1461,12 @@ AlterPublication(ParseState *pstate, AlterPublicationStmt *stmt) List *sequences = NIL; List *tables_schemaidlist = NIL; List *sequences_schemaidlist = NIL; - List *schemaidlist = NIL; Oid pubid = pubform->oid; ObjectsInPublicationToOids(stmt->pubobjects, pstate, &tables, &sequences, &tables_schemaidlist, - &sequences_schemaidlist, - &schemaidlist); + &sequences_schemaidlist); CheckAlterPublication(stmt, tup, tables, tables_schemaidlist, diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index 4cdc698cbb3..292e7299d88 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -1804,7 +1804,8 @@ get_rel_sync_entry(PGOutputData *data, Relation relation) { Oid schemaId = get_rel_namespace(relid); List *pubids = GetRelationPublications(relid); - char objectType = pub_get_object_type_for_relkind(get_rel_relkind(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 @@ -1815,7 +1816,6 @@ get_rel_sync_entry(PGOutputData *data, Relation relation) 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. */ |