Re: Support logical replication of DDLs

From: Zheng Li <zhengli10(at)gmail(dot)com>
To: Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>
Cc: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, Peter Smith <smithpb2250(at)gmail(dot)com>, Ajin Cherian <itsajin(at)gmail(dot)com>, vignesh C <vignesh21(at)gmail(dot)com>, li jie <ggysxcq(at)gmail(dot)com>, Dilip Kumar <dilipbalaut(at)gmail(dot)com>, "houzj(dot)fnst(at)fujitsu(dot)com" <houzj(dot)fnst(at)fujitsu(dot)com>, Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>, Japin Li <japinli(at)hotmail(dot)com>, rajesh singarapu <rajesh(dot)rs0541(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Support logical replication of DDLs
Date: 2023-02-15 22:16:05
Message-ID: CAAD30UL7nez+umBSoj8g8gSP6YK-c_HaT_+MO0+jvW70FAO4MA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-hackers

Hi

We have not discussed much about the ownership of replicated objects.
Currently, replicated
objects belong to the subscription owner. However, it makes sense to
allow replicated
objects to keep the same owner from the publisher for certain use
cases otherwise users
may need to run lots of ALTER TABLE/OBJ OWNER TO manually. This issue
has been raised in [1] and [2].

I've implemented a prototype to allow replicated objects to have the
same owner from the publisher in
v69-0008-Allow-replicated-objects-to-have-the-same-owner-from.patch.
This patch needs to be applied
on top of the v69 DDL replication patch set.

Specifically, the changes include:
1. Change event trigger functions to collect the current role in
CollectedCommand.

2. Change Deparser function deparse_utility_command to encode the
owner role in the top-level
json element such as {myowner:role_name, fmt:..., identity:...} of the
deparsed jsonb output.
Also change the function deparse_ddl_json_to_string to retrieve the
myowner element from
the jsonb string.

3. Introduce a new subscription option match_ddl_owner: when turned
on, the apply worker
will apply DDL messages in the role retrieved from the "myowner" field
of the deparsed
jsonb string. The default value of match_ddl_owner is off.

Here is an example,
publisher:
CREATE PUBLICATION mypub
FOR ALL TABLES with (ddl = 'all');
CREATE ROLE user1;

subscriber:
CREATE SUBSCRIPTION mysub
CONNECTION 'dbname=source_db host=localhost user=master port=5433'
PUBLICATION mypub with (match_ddl_owner=true);
CREATE ROLE user1;

publisher:
CREATE TABLE t1 (a int, b varchar);
GRANT ALL ON schema public TO user1;
SET SESSION AUTHORIZATION user1;
CREATE TABLE t2 (a int, b varchar);

subscriber:
\d
List of relations
Schema | Name | Type | Owner
--------+------+-------+----------------------
public | t1 | table | master
public | t2 | table | user1

Your feedback is appreciated,
Zane

[1] https://www.postgresql.org/message-id/CAGfChW4vxVCgWs2%3Db%2BSDag0j3G-3Aqw5XvKnHVAReB-iysyj%2Bg%40mail.gmail.com
[2] https://www.postgresql.org/message-id/CAAD30UKX%3DPbojrjU0webYy7Y9mz1HmDTM3dx_JJXpc%2BdXW-EQQ%40mail.gmail.com

Attachment Content-Type Size
v69-0001-Infrastructure-to-support-DDL-deparsing.patch application/octet-stream 40.9 KB
v69-0004-Introduce-the-test_ddl_deparse_regress-test-module.patch application/octet-stream 47.4 KB
v69-0005-DDL-messaging-infrastructure-for-DDL-replication.patch application/octet-stream 41.9 KB
v69-0002-Functions-to-deparse-Table-DDL-commands.patch application/octet-stream 131.4 KB
v69-0003-Support-DDL-deparse-of-the-rest-commands.patch application/octet-stream 201.0 KB
v69-0007-Document-DDL-replication-and-DDL-deparser.patch application/octet-stream 40.6 KB
v69-0008-Allow-replicated-objects-to-have-the-same-owner-from.patch application/octet-stream 53.8 KB
v69-0006-Support-DDL-replication.patch application/octet-stream 212.7 KB

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Laurenz Albe 2023-02-16 03:45:18 Re: Multi-column index: Which column order
Previous Message Ron 2023-02-15 16:20:31 Re: Multi-column index: Which column order

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2023-02-15 22:46:30 Re: [EXTERNAL] Re: [PATCH] Support using "all" for the db user in pg_ident.conf
Previous Message David G. Johnston 2023-02-15 21:37:52 Re: psql: Add role's membership options to the \du+ command