Re: Support logical replication of DDLs
Zheng Li <zhengli10@gmail.com>
From: Zheng Li <zhengli10@gmail.com>
To: Runqi Tian <runqidev@gmail.com>
Cc: vignesh C <vignesh21@gmail.com>, Ajin Cherian <itsajin@gmail.com>, Peter Smith <smithpb2250@gmail.com>, li jie <ggysxcq@gmail.com>, Dilip Kumar <dilipbalaut@gmail.com>,
Alvaro Herrera <alvherre@alvh.no-ip.org>, "houzj.fnst@fujitsu.com" <houzj.fnst@fujitsu.com>,
Amit Kapila <amit.kapila16@gmail.com>, Masahiko Sawada <sawada.mshk@gmail.com>, Japin Li <japinli@hotmail.com>, rajesh singarapu <rajesh.rs0541@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2023-03-12T15:24:13Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Add a run_as_owner option to subscriptions.
- 482675987bcd 16.0 cited
-
Refactor pgoutput_change().
- da324d6cd45b 16.0 cited
-
Print the correct aliases for DML target tables in ruleutils.
- df931e9ab35b 11.20 landed
- c8a5f1685fb7 15.3 landed
- 4efb4f0d4878 13.11 landed
- 3dd287c14fac 12.15 landed
- 393430f57544 16.0 landed
- 14345f3c6a7b 14.8 landed
-
Fix object identity string for transforms
- 9a312562314a 16.0 landed
-
Add grantable MAINTAIN privilege and pg_maintain role.
- 60684dd834a2 16.0 cited
-
Get rid of recursion-marker values in enum AlterTableType
- 840ff5f451cd 16.0 cited
-
Release cache tuple when no longer needed
- ed0fbc8e5ac9 15.0 cited
-
Empty search_path in logical replication apply worker and walsender.
- 11da97024abb 14.0 cited
-
Refactor format_type APIs to be more modular
- a26116c6cbf4 11.0 cited
-
Use wrappers of PG_DETOAST_DATUM_PACKED() more.
- 3a0d473192b2 10.0 cited
Attachments
- v79-0005-DDL-messaging-infrastructure-for-DDL-replication.patch (application/octet-stream) patch v79-0005
- v79-0002-Functions-to-deparse-Table-DDL-commands.patch (application/octet-stream) patch v79-0002
- v79-0001-Infrastructure-to-support-DDL-deparsing.patch (application/octet-stream) patch v79-0001
- v79-0003-Support-DDL-deparse-of-the-rest-commands.patch (application/octet-stream) patch v79-0003
- v79-0006-Support-DDL-replication.patch (application/octet-stream) patch v79-0006
- v79-0007-Document-DDL-replication-and-DDL-deparser.patch (application/octet-stream) patch v79-0007
- v79-0004-Introduce-the-test_ddl_deparse_regress-test-module.patch (application/octet-stream) patch v79-0004
- v79-0008-Allow-replicated-objects-to-have-the-same-owner-from.patch (application/octet-stream) patch v79-0008
On Fri, Mar 10, 2023 at 5:41 PM Runqi Tian <runqidev@gmail.com> wrote: > > Hi, > > I'm working on test coverage for the DDL deparser using the > test_ddl_deparse_regress test module. We’re focusing on table commands > as the first step in providing test coverage as proposed in [1], I > have constructed unit test cases by testing each clause in the syntax > and complex test cases by combining multiple clauses together. I found > about 20 test failures and they are marked TOFIX in the test script, Thanks for working on the test coverage for CREATE and ALTER TABLE. I've made fixes for some of the failures in the v79 patch set (0002, 0003 and 0004 are updated). The changes includes: 1. Fixed a syntax error caused by ON COMMIT clause placement in deparse_CreateStmt. 2. Fixed deparse_Seq_As and start using it in deparse_CreateSeqStmt, this issue is also reported in [1]. 3. Fixed a bug in append_not_present: the 'present: false' element can't be omitted even in non-verbose mode. It will cause syntax error on reformed command if 'present: false' element is missing but the fmt string indicates the corresponding object must be present. 4. Replaced if_not_exists with if_exists in deparse of AT_DropConstraint and AT_DropColumn. 5. Added missing CASCADE clause for AT_DropConstraint deparse. 6. Enabled the fixed test cases. There are still the following failing tests in create_table.sql and alter_table.sql, I'll continue to fix these: 1. Deparse of NOT NULL isn't working in deparse_ColumnDef_typed CREATE TABLE part9_partition_with_options_constraints PARTITION OF part9_parent_table_range ( id PRIMARY KEY, name WITH OPTIONS NOT NULL, CHECK (height > 0) ) FOR VALUES FROM (MINVALUE) TO (2); 2. ERROR: cannot drop index test_drop_column_name_key because constraint test_drop_column_name_key on table test_drop_column requires it CREATE TABLE test_drop_column( LIKE orders, UNIQUE (id), UNIQUE (name) ); CREATE TABLE foreign_table( id int REFERENCES test_drop_column (id), name varchar REFERENCES test_drop_column (name) ); ALTER TABLE test_drop_column DROP IF EXISTS name CASCADE; 3. Partitioned table deparsed but not replicated: CREATE TABLE test_detach_partition( LIKE orders ) PARTITION BY RANGE (id); 4. The old index name has already been replaced with the new one for deparse of ALTER TABLE ... ADD CONSTRAINT ... USING INDEX, need to save the original index name when collecting the command in the event trigger. CREATE TABLE test_add_constraint_using_index( id2 int, ); CREATE UNIQUE INDEX test_add_constraint_used_index2 ON test_add_constraint_using_index (id2); ALTER TABLE test_add_constraint_using_index ADD CONSTRAINT primary_constraint_using_index PRIMARY KEY USING INDEX test_add_constraint_used_index2; Regards, Zane [1] https://www.postgresql.org/message-id/OS3PR01MB6275FE40496DA47C0A3369289EB69%40OS3PR01MB6275.jpnprd01.prod.outlook.com