Postgresql中SAME数据库内单独模式的逻辑复制

2skhul33  于 2023-03-08  发布在  PostgreSQL
关注(0)|答案(1)|浏览(148)

作为参考,我使用的是PostgreSQL版本14.3
假设我有两个模式,X和Y,在X中有一个名为customer的表,它将被客户微服务访问,我希望Y能够真实的查看添加/更改/删除的数据,而无需访问该表。因此,我想设置从表X到表Y的逻辑复制。然而,我一辈子都想不出如何对同一数据库中的两个表执行此操作。为SEPARATE数据库执行复制非常简单,但是在同一个数据库中这样做似乎根本不受支持。这是我不能做的事情吗?
例如

CREATE SCHEMA X;

CREATE TABLE customer (
    customerstuff VARCHAR(50) NOT NULL
);

ALTER TABLE customer SET SCHEMA X;

CREATE SCHEMA Y;

CREATE TABLE customer (
    customerstuff VARCHAR(50) NOT NULL
);

ALTER TABLE customer SET SCHEMA Y;

现在,我有了X.客户和Y.客户,我希望X.客户的更改也出现在Y.客户中,所以我尝试做了如下操作:

CREATE PUBLICATION publicationname FOR TABLE X.customer

SELECT pg_create_logical_replication_slot('slot', 'pgoutput');

CREATE SUBSCRIPTION mysub
CONNECTION 'host=localhost port=5432 user=user password=pass dbname=db'
PUBLICATION publicationname
WITH (slot_name=slot, create_slot=false);

我发现,为了在同一个集群中创建订阅作为发布,我需要单独定义一个逻辑复制槽,并在创建订阅时使用它,但仍然没有复制表。我是否遗漏了什么,是否跳过了某个步骤,是否有可能?请告诉我。

v440hwme

v440hwme1#

逻辑复制的一个要求是方案、表和列在发布者和订户上具有相同的名称。因此,在同一数据库内进行逻辑复制是不可能的。请考虑注解中指出的替代方法(视图、实体化视图、触发器)。

相关问题