pgl_ddl_deploy

pgl_ddl_deploy

pgl_ddl_deploy : automated ddl deployment using pglogical

Overview

IDExtensionPackageVersionCategoryLicenseLanguage
9520
pgl_ddl_deploy
pgl_ddl_deploy
2.2.1
ETL
MIT
C
AttributeHas BinaryHas LibraryNeed LoadHas DDLRelocatableTrusted
--s-d--
No
Yes
No
Yes
no
no
Relationships
Schemaspgl_ddl_deploy
Requires
pglogical
See Also
pglogical_origin
pglogical_ticker
ddlx
pg_permissions
pg_failover_slots
pgactive
wal2json
decoderbufs

Packages

TypeRepoVersionPG Major CompatibilityPackage PatternDependencies
EXT
PGDG
2.2.1
18
17
16
15
14
pgl_ddl_deploypglogical
RPM
PGDG
2.2.1
18
17
16
15
14
pgl_ddl_deploy_$vpglogical_$v
DEB
PGDG
2.2.1
18
17
16
15
14
postgresql-$v-pgl-ddl-deploypostgresql-$v-pglogical
Linux / PGPG18PG17PG16PG15PG14
el8.x86_64
MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
el8.aarch64
MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
el9.x86_64
MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.0
PGDG 2.2.0
el9.aarch64
MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
el10.x86_64
MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
el10.aarch64
MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
d12.x86_64
MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
d12.aarch64
MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
d13.x86_64
MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
d13.aarch64
MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
u22.x86_64
MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
u22.aarch64
MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
u24.x86_64
MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
u24.aarch64
MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PackageVersionOSORGSIZEFile URL
pgl_ddl_deploy_172.2.1el8.x86_64pgdg39.6 KiBpgl_ddl_deploy_17-2.2.1-2PGDG.rhel8.x86_64.rpm
pgl_ddl_deploy_172.2.1el8.aarch64pgdg39.7 KiBpgl_ddl_deploy_17-2.2.1-2PGDG.rhel8.aarch64.rpm
pgl_ddl_deploy_172.2.1el9.x86_64pgdg38.2 KiBpgl_ddl_deploy_17-2.2.1-2PGDG.rhel9.x86_64.rpm
pgl_ddl_deploy_172.2.1el9.aarch64pgdg38.2 KiBpgl_ddl_deploy_17-2.2.1-2PGDG.rhel9.aarch64.rpm
pgl_ddl_deploy_172.2.1el10.x86_64pgdg38.4 KiBpgl_ddl_deploy_17-2.2.1-3PGDG.rhel10.x86_64.rpm
pgl_ddl_deploy_172.2.1el10.aarch64pgdg38.7 KiBpgl_ddl_deploy_17-2.2.1-3PGDG.rhel10.aarch64.rpm
postgresql-17-pgl-ddl-deploy2.2.1d12.x86_64pgdg39.4 KiBpostgresql-17-pgl-ddl-deploy_2.2.1-2.pgdg120+1_amd64.deb
postgresql-17-pgl-ddl-deploy2.2.1d12.aarch64pgdg39.8 KiBpostgresql-17-pgl-ddl-deploy_2.2.1-2.pgdg120+1_arm64.deb
postgresql-17-pgl-ddl-deploy2.2.1d13.x86_64pgdg39.4 KiBpostgresql-17-pgl-ddl-deploy_2.2.1-2.pgdg130+2_amd64.deb
postgresql-17-pgl-ddl-deploy2.2.1d13.aarch64pgdg39.9 KiBpostgresql-17-pgl-ddl-deploy_2.2.1-2.pgdg130+2_arm64.deb
postgresql-17-pgl-ddl-deploy2.2.1u22.x86_64pgdg40.0 KiBpostgresql-17-pgl-ddl-deploy_2.2.1-2.pgdg22.04+1_amd64.deb
postgresql-17-pgl-ddl-deploy2.2.1u22.aarch64pgdg40.0 KiBpostgresql-17-pgl-ddl-deploy_2.2.1-2.pgdg22.04+1_arm64.deb
postgresql-17-pgl-ddl-deploy2.2.1u24.x86_64pgdg38.6 KiBpostgresql-17-pgl-ddl-deploy_2.2.1-2.pgdg24.04+1_amd64.deb
postgresql-17-pgl-ddl-deploy2.2.1u24.aarch64pgdg38.9 KiBpostgresql-17-pgl-ddl-deploy_2.2.1-2.pgdg24.04+1_arm64.deb
PackageVersionOSORGSIZEFile URL
pgl_ddl_deploy_162.2.1el8.x86_64pgdg39.6 KiBpgl_ddl_deploy_16-2.2.1-1PGDG.rhel8.x86_64.rpm
pgl_ddl_deploy_162.2.0el8.x86_64pgdg39.4 KiBpgl_ddl_deploy_16-2.2.0-1PGDG.rhel8.x86_64.rpm
pgl_ddl_deploy_162.2.1el8.aarch64pgdg39.6 KiBpgl_ddl_deploy_16-2.2.1-1PGDG.rhel8.aarch64.rpm
pgl_ddl_deploy_162.2.0el8.aarch64pgdg39.4 KiBpgl_ddl_deploy_16-2.2.0-1PGDG.rhel8.aarch64.rpm
pgl_ddl_deploy_162.2.1el9.x86_64pgdg38.1 KiBpgl_ddl_deploy_16-2.2.1-1PGDG.rhel9.x86_64.rpm
pgl_ddl_deploy_162.2.0el9.x86_64pgdg37.7 KiBpgl_ddl_deploy_16-2.2.0-1PGDG.rhel9.x86_64.rpm
pgl_ddl_deploy_162.2.1el9.aarch64pgdg38.1 KiBpgl_ddl_deploy_16-2.2.1-1PGDG.rhel9.aarch64.rpm
pgl_ddl_deploy_162.2.0el9.aarch64pgdg37.6 KiBpgl_ddl_deploy_16-2.2.0-1PGDG.rhel9.aarch64.rpm
pgl_ddl_deploy_162.2.1el10.x86_64pgdg38.4 KiBpgl_ddl_deploy_16-2.2.1-3PGDG.rhel10.x86_64.rpm
pgl_ddl_deploy_162.2.1el10.aarch64pgdg38.7 KiBpgl_ddl_deploy_16-2.2.1-3PGDG.rhel10.aarch64.rpm
postgresql-16-pgl-ddl-deploy2.2.1d12.x86_64pgdg39.4 KiBpostgresql-16-pgl-ddl-deploy_2.2.1-2.pgdg120+1_amd64.deb
postgresql-16-pgl-ddl-deploy2.2.1d12.aarch64pgdg39.8 KiBpostgresql-16-pgl-ddl-deploy_2.2.1-2.pgdg120+1_arm64.deb
postgresql-16-pgl-ddl-deploy2.2.1d13.x86_64pgdg39.4 KiBpostgresql-16-pgl-ddl-deploy_2.2.1-2.pgdg130+2_amd64.deb
postgresql-16-pgl-ddl-deploy2.2.1d13.aarch64pgdg39.9 KiBpostgresql-16-pgl-ddl-deploy_2.2.1-2.pgdg130+2_arm64.deb
postgresql-16-pgl-ddl-deploy2.2.1u22.x86_64pgdg40.0 KiBpostgresql-16-pgl-ddl-deploy_2.2.1-2.pgdg22.04+1_amd64.deb
postgresql-16-pgl-ddl-deploy2.2.1u22.aarch64pgdg40.0 KiBpostgresql-16-pgl-ddl-deploy_2.2.1-2.pgdg22.04+1_arm64.deb
postgresql-16-pgl-ddl-deploy2.2.1u24.x86_64pgdg38.5 KiBpostgresql-16-pgl-ddl-deploy_2.2.1-2.pgdg24.04+1_amd64.deb
postgresql-16-pgl-ddl-deploy2.2.1u24.aarch64pgdg38.9 KiBpostgresql-16-pgl-ddl-deploy_2.2.1-2.pgdg24.04+1_arm64.deb
PackageVersionOSORGSIZEFile URL
pgl_ddl_deploy_152.2.1el8.x86_64pgdg39.5 KiBpgl_ddl_deploy_15-2.2.1-1PGDG.rhel8.x86_64.rpm
pgl_ddl_deploy_152.2.0el8.x86_64pgdg39.3 KiBpgl_ddl_deploy_15-2.2.0-1PGDG.rhel8.x86_64.rpm
pgl_ddl_deploy_152.2.1el8.aarch64pgdg39.5 KiBpgl_ddl_deploy_15-2.2.1-1PGDG.rhel8.aarch64.rpm
pgl_ddl_deploy_152.2.0el8.aarch64pgdg39.3 KiBpgl_ddl_deploy_15-2.2.0-1PGDG.rhel8.aarch64.rpm
pgl_ddl_deploy_152.2.0el9.x86_64pgdg37.6 KiBpgl_ddl_deploy_15-2.2.0-1PGDG.rhel9.x86_64.rpm
pgl_ddl_deploy_152.2.1el9.aarch64pgdg38.0 KiBpgl_ddl_deploy_15-2.2.1-1PGDG.rhel9.aarch64.rpm
pgl_ddl_deploy_152.2.0el9.aarch64pgdg37.5 KiBpgl_ddl_deploy_15-2.2.0-1PGDG.rhel9.aarch64.rpm
pgl_ddl_deploy_152.2.1el10.x86_64pgdg38.3 KiBpgl_ddl_deploy_15-2.2.1-3PGDG.rhel10.x86_64.rpm
pgl_ddl_deploy_152.2.1el10.aarch64pgdg38.6 KiBpgl_ddl_deploy_15-2.2.1-3PGDG.rhel10.aarch64.rpm
postgresql-15-pgl-ddl-deploy2.2.1d12.x86_64pgdg39.0 KiBpostgresql-15-pgl-ddl-deploy_2.2.1-2.pgdg120+1_amd64.deb
postgresql-15-pgl-ddl-deploy2.2.1d12.aarch64pgdg39.4 KiBpostgresql-15-pgl-ddl-deploy_2.2.1-2.pgdg120+1_arm64.deb
postgresql-15-pgl-ddl-deploy2.2.1d13.x86_64pgdg39.0 KiBpostgresql-15-pgl-ddl-deploy_2.2.1-2.pgdg130+2_amd64.deb
postgresql-15-pgl-ddl-deploy2.2.1d13.aarch64pgdg39.4 KiBpostgresql-15-pgl-ddl-deploy_2.2.1-2.pgdg130+2_arm64.deb
postgresql-15-pgl-ddl-deploy2.2.1u22.x86_64pgdg39.6 KiBpostgresql-15-pgl-ddl-deploy_2.2.1-2.pgdg22.04+1_amd64.deb
postgresql-15-pgl-ddl-deploy2.2.1u22.aarch64pgdg39.5 KiBpostgresql-15-pgl-ddl-deploy_2.2.1-2.pgdg22.04+1_arm64.deb
postgresql-15-pgl-ddl-deploy2.2.1u24.x86_64pgdg38.3 KiBpostgresql-15-pgl-ddl-deploy_2.2.1-2.pgdg24.04+1_amd64.deb
postgresql-15-pgl-ddl-deploy2.2.1u24.aarch64pgdg38.6 KiBpostgresql-15-pgl-ddl-deploy_2.2.1-2.pgdg24.04+1_arm64.deb
PackageVersionOSORGSIZEFile URL
pgl_ddl_deploy_142.2.1el8.x86_64pgdg39.5 KiBpgl_ddl_deploy_14-2.2.1-1PGDG.rhel8.x86_64.rpm
pgl_ddl_deploy_142.2.0el8.x86_64pgdg39.3 KiBpgl_ddl_deploy_14-2.2.0-1PGDG.rhel8.x86_64.rpm
pgl_ddl_deploy_142.2.1el8.aarch64pgdg39.5 KiBpgl_ddl_deploy_14-2.2.1-1PGDG.rhel8.aarch64.rpm
pgl_ddl_deploy_142.2.0el8.aarch64pgdg39.3 KiBpgl_ddl_deploy_14-2.2.0-1PGDG.rhel8.aarch64.rpm
pgl_ddl_deploy_142.2.0el9.x86_64pgdg37.6 KiBpgl_ddl_deploy_14-2.2.0-1PGDG.rhel9.x86_64.rpm
pgl_ddl_deploy_142.2.1el9.aarch64pgdg38.0 KiBpgl_ddl_deploy_14-2.2.1-1PGDG.rhel9.aarch64.rpm
pgl_ddl_deploy_142.2.0el9.aarch64pgdg37.5 KiBpgl_ddl_deploy_14-2.2.0-1PGDG.rhel9.aarch64.rpm
pgl_ddl_deploy_142.2.1el10.x86_64pgdg38.3 KiBpgl_ddl_deploy_14-2.2.1-3PGDG.rhel10.x86_64.rpm
pgl_ddl_deploy_142.2.1el10.aarch64pgdg38.6 KiBpgl_ddl_deploy_14-2.2.1-3PGDG.rhel10.aarch64.rpm
postgresql-14-pgl-ddl-deploy2.2.1d12.x86_64pgdg39.0 KiBpostgresql-14-pgl-ddl-deploy_2.2.1-2.pgdg120+1_amd64.deb
postgresql-14-pgl-ddl-deploy2.2.1d12.aarch64pgdg39.4 KiBpostgresql-14-pgl-ddl-deploy_2.2.1-2.pgdg120+1_arm64.deb
postgresql-14-pgl-ddl-deploy2.2.1d13.x86_64pgdg38.9 KiBpostgresql-14-pgl-ddl-deploy_2.2.1-2.pgdg130+2_amd64.deb
postgresql-14-pgl-ddl-deploy2.2.1d13.aarch64pgdg39.4 KiBpostgresql-14-pgl-ddl-deploy_2.2.1-2.pgdg130+2_arm64.deb
postgresql-14-pgl-ddl-deploy2.2.1u22.x86_64pgdg39.6 KiBpostgresql-14-pgl-ddl-deploy_2.2.1-2.pgdg22.04+1_amd64.deb
postgresql-14-pgl-ddl-deploy2.2.1u22.aarch64pgdg39.5 KiBpostgresql-14-pgl-ddl-deploy_2.2.1-2.pgdg22.04+1_arm64.deb
postgresql-14-pgl-ddl-deploy2.2.1u24.x86_64pgdg38.3 KiBpostgresql-14-pgl-ddl-deploy_2.2.1-2.pgdg24.04+1_amd64.deb
postgresql-14-pgl-ddl-deploy2.2.1u24.aarch64pgdg38.6 KiBpostgresql-14-pgl-ddl-deploy_2.2.1-2.pgdg24.04+1_arm64.deb

Source

Install

Make sure PGDG repo available:

pig repo add pgdg -u    # add pgdg repo and update cache

Install this extension with pig:

pig install pgl_ddl_deploy;		# install via package name, for the active PG version

pig install pgl_ddl_deploy -v 17;   # install for PG 17
pig install pgl_ddl_deploy -v 16;   # install for PG 16
pig install pgl_ddl_deploy -v 15;   # install for PG 15
pig install pgl_ddl_deploy -v 14;   # install for PG 14

Create this extension with:

CREATE EXTENSION pgl_ddl_deploy CASCADE; -- requires pglogical

Usage

pgl_ddl_deploy: automated ddl deployment using pglogical

Transparent DDL replication for PostgreSQL 9.5+ supporting both pglogical and native logical replication. Automatically propagates DDL changes (CREATE TABLE, ALTER TABLE, etc.) to subscribers.

Enabling

CREATE EXTENSION pgl_ddl_deploy;

Configuration

Insert configuration into the pgl_ddl_deploy.set_configs table:

-- Replicate DDL for all user schemas and auto-add new tables
INSERT INTO pgl_ddl_deploy.set_configs (set_name, include_schema_regex, driver)
VALUES ('default', '.*', 'native'::pgl_ddl_deploy.driver);

-- Or with pglogical driver
INSERT INTO pgl_ddl_deploy.set_configs (set_name, include_schema_regex, driver)
VALUES ('default', '.*', 'pglogical'::pgl_ddl_deploy.driver);

-- Maintain only specific tables already in replication (ALTER TABLE only)
INSERT INTO pgl_ddl_deploy.set_configs (set_name, include_only_repset_tables, driver)
VALUES ('my_tables', TRUE, 'native'::pgl_ddl_deploy.driver);

Deploy Event Triggers

After configuring, deploy the event triggers:

SELECT pgl_ddl_deploy.deploy(set_config_id) FROM pgl_ddl_deploy.set_configs;

Key Configuration Options

  • driver: native or pglogical
  • set_name: publication name or pglogical replication set name
  • include_schema_regex: regex to match schemas for DDL replication
  • include_only_repset_tables: if true, only ALTER TABLE for tables already in replication
  • lock_safe_deployment: if true, DDL executes in a low lock_timeout loop on subscriber
  • allow_multi_statements: if true, multi-statement DDL can be propagated
  • queue_subscriber_failures: if true, failed DDL on subscriber is queued for retry
  • ddl_only_replication: replicate schema only without auto-adding tables to data replication

Monitoring

-- View unhandled DDL events
SELECT * FROM pgl_ddl_deploy.unhandled;

-- View failed subscriber DDL
SELECT * FROM pgl_ddl_deploy.subscriber_logs WHERE NOT succeeded;

-- Retry failed DDL on subscriber
SELECT pgl_ddl_deploy.retry_all_subscriber_logs();

Checking Resolved Schemas

SELECT pgl_ddl_deploy.resolved_regex_include_schemas(set_config_id)
FROM pgl_ddl_deploy.set_configs;
Last updated on