作为参考,我使用的是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);
我发现,为了在同一个集群中创建订阅作为发布,我需要单独定义一个逻辑复制槽,并在创建订阅时使用它,但仍然没有复制表。我是否遗漏了什么,是否跳过了某个步骤,是否有可能?请告诉我。
1条答案
按热度按时间v440hwme1#
逻辑复制的一个要求是方案、表和列在发布者和订户上具有相同的名称。因此,在同一数据库内进行逻辑复制是不可能的。请考虑注解中指出的替代方法(视图、实体化视图、触发器)。