From: | "Jonathan S(dot) Katz" <jkatz(at)postgresql(dot)org> |
---|---|
To: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, "houzj(dot)fnst(at)fujitsu(dot)com" <houzj(dot)fnst(at)fujitsu(dot)com> |
Cc: | Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, vignesh C <vignesh21(at)gmail(dot)com>, Robert Haas <robertmhaas(at)gmail(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, Peter Eisentraut <peter(dot)eisentraut(at)enterprisedb(dot)com> |
Subject: | Re: why can't a table be part of the same publication as its schema |
Date: | 2022-09-19 20:52:06 |
Message-ID: | 12f66d81-8675-dbf4-a770-4094d478551a@postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 9/19/22 11:16 AM, Alvaro Herrera wrote:
>
>> diff --git a/doc/src/sgml/logical-replication.sgml b/doc/src/sgml/logical-replication.sgml
>> index 1ae3287..0ab768d 100644
>> --- a/doc/src/sgml/logical-replication.sgml
>> +++ b/doc/src/sgml/logical-replication.sgml
>> @@ -1120,6 +1120,11 @@ test_sub=# SELECT * FROM child ORDER BY a;
>> </para>
>>
>> <para>
>> + Specifying a column list when the publication also publishes
>> + <literal>FOR ALL TABLES IN SCHEMA</literal> is not supported.
>> + </para>
>> +
>> + <para>
>> For partitioned tables, the publication parameter
>> <literal>publish_via_partition_root</literal> determines which column list
>> is used. If <literal>publish_via_partition_root</literal> is
>>
>> diff --git a/doc/src/sgml/ref/create_publication.sgml b/doc/src/sgml/ref/create_publication.sgml
>> index 0a68c4b..0ced7da 100644
>> --- a/doc/src/sgml/ref/create_publication.sgml
>> +++ b/doc/src/sgml/ref/create_publication.sgml
>> @@ -103,17 +103,17 @@ CREATE PUBLICATION <replaceable class="parameter">name</replaceable>
>> </para>
>>
>> <para>
>> + Specifying a column list when the publication also publishes
>> + <literal>FOR ALL TABLES IN SCHEMA</literal> is not supported.
>> + </para>
>>
>> @@ -733,6 +694,24 @@ CheckPubRelationColumnList(List *tables, const char *queryString,
>> continue;
>>
>> /*
>> + * Disallow specifying column list if any schema is in the
>> + * publication.
>> + *
>> + * XXX We could instead just forbid the case when the publication
>> + * tries to publish the table with a column list and a schema for that
>> + * table. However, if we do that then we need a restriction during
>> + * ALTER TABLE ... SET SCHEMA to prevent such a case which doesn't
>> + * seem to be a good idea.
>> + */
>> + if (publish_schema)
>> + ereport(ERROR,
>> + errcode(ERRCODE_INVALID_PARAMETER_VALUE),
>> + errmsg("cannot use publication column list for relation \"%s.%s\"",
>> + get_namespace_name(RelationGetNamespace(pri->relation)),
>> + RelationGetRelationName(pri->relation)),
>> + errdetail("Column list cannot be specified if any schema is part of the publication or specified in the list."));
>> +
>
> This seems a pretty arbitrary restriction. It feels like you're adding
> this restriction precisely so that you don't have to write the code to
> reject the ALTER .. SET SCHEMA if an incompatible configuration is
> detected. But we already have such checks in several cases, so I don't
> see why this one does not seem a good idea.
>
> The whole FOR ALL TABLES IN SCHEMA thing seems pretty weird in several
> aspects. Others have already commented about the syntax, which is
> unlike what GRANT uses; I'm also surprised that we've gotten away with
> it being superuser-only. Why are we building more superuser-only
> features in this day and age? I think not even FOR ALL TABLES should
> require superuser.
FYI, I've added this to the PG15 open items as there are some open
questions to resolve in this thread.
Jonathan
From | Date | Subject | |
---|---|---|---|
Next Message | Jacob Champion | 2022-09-19 21:05:39 | Re: Kerberos delegation support in libpq and postgres_fdw |
Previous Message | Dmitry Koval | 2022-09-19 20:42:38 | Re: Add SPLIT PARTITION/MERGE PARTITIONS commands |