问题标签 [logical-replication]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
337 浏览

postgresql - 在 Postgres 上运行自定义插件时出错,“输出插件必须声明 _PG_output_plugin_init 符号”

我正在尝试为逻辑复制创建一个自定义输出插件(Postgres 是 9.5.4 版本,我正在从 Windows 8/64 位机器构建项目 - 安装了 db 的同一台机器)。

我从示例 test_decoding 的代码开始,我试图简单地以新名称重建它并将其安装到 Postgres 中以查看模块是否工作。完成后,我将开始修改代码。

我的项目是在 Visual Studio 2013 中构建的,我采取的唯一步骤是将构建的程序集复制到 Postgres lib 文件夹下。当我运行命令时:

我收到一条错误消息:

输出插件必须声明 _PG_output_plugin_init 符号

在我的代码中,我将函数声明为 extern:

并且函数的主体在它下面的某个地方定义。

实际代码只是 test_decoding 示例的副本:https ://github.com/postgres/postgres/blob/REL9_5_STABLE/contrib/test_decoding/test_decoding.c

我不确定部署过程是否正常(只是复制 dll)或者是否还有其他步骤。任何人都可以解释一下吗?

0 投票
1 回答
1906 浏览

postgresql - Postgresql 10 逻辑复制 MultiMaster

是否可以将 Postgresql 10 逻辑复制用作多主机?我正在尝试使用 postgresql 10 安装两个 linux ubuntu 服务器,但是我发现的所有示例都将复制实现为主从,我需要进行复制以允许更改两个数据库(发布和订阅者)中的数据。

0 投票
1 回答
76 浏览

postgresql-10 - 如何快速启动逻辑复制?

我正在准备从 PG9.2 迁移到 10.4。数据库很大并且使用流式复制。计划是切换到逻辑复制。pg_upgrade 在主服务器上的工作时间非常合理,但由于有超过 100GB 的数据和大量索引,初始复制需要几个小时......

我想知道是否有一种快速启动复制的方法。据我了解,如果我 rsync 数据库存储,逻辑复制(发布 + 订阅)很可能会在开始之前截断表......有什么建议吗?

0 投票
1 回答
1053 浏览

postgresql - PostgreSQL 10 逻辑复制:双重条目或主键冲突

我已经使用 PostgreSQL 10 构建了一个主 -> 从设置,以将某些特定表中的数据同步到从机,这是公共系统。现在在整个过程中,我遇到了一些奇怪的行为:有些表根本不同步。

查看 PostgreSQL 日志,我遇到以下错误消息:

为了进一步分析,我在从机上删除了这个表的主键,在这种情况下,错误不再发生,但是现在我在表中得到了重复的条目。

防止重复条目的唯一方法是将主键放在适当的位置,但是同步将无法正常工作,因为它一直在恰好四个表上循环,永远不会移动到其余的表。

我已经检查了角色和所有者,并且设置正确。如前所述,如果没有主键,一切都会同步,不会引发错误,但会创建重复条目。

在这一点上我可能错过了什么吗?非常感谢。

0 投票
1 回答
1537 浏览

postgresql - Postgres Notify 不适用于逻辑复制

我正在使用逻辑复制将数据从 Postgres 10.4 复制到另一个 Postgres 10.4 实例。

订阅者有多个将事件记录到单个表的触发器。此表有一个触发器,它执行另一个函数(返回触发器)来为下游侦听器调用 NOTIFY。

审计表上的触发器如下所示:

通知下游定义:

使用日志记录,我能够证明这是触发。我还可以看到有数据使用:

问题是在我插入表(读作:逻辑复制之外)以使触发器触发之前,没有一个侦听器收到消息,然后侦听器接收到所有应该从逻辑复制发送的通知消息。

在我们转向逻辑复制之前,所有这些都运行良好(我们有一个已退役的本土解决方案,我对此一无所知)。

我没有收到任何可以给我任何线索的错误或奇怪的信息。我也发现了日志的详细程度,除了我添加到函数中以验证它们是否正在运行的日志语句之外,没有看到与通知相关的任何内容。

Stack Overflow 上某人的另一份报告:Notify From Trigger On PG Logical Replicated Table

问题:如何调试此问题?如何让听众接收消息而不手动插入一行让它们突然出现?

0 投票
0 回答
2063 浏览

postgresql - 当表不同步时在 postgres 中启动或重新启动逻辑复制

我在两个名为 test 的数据库中有一个表。我能够在源数据库中创建一行并将其复制到目标数据库中。但后来我删除了目标数据库中的行。我如何取回该行?如果每个表中有一百万行并且我想在两个表之间同步怎么办,因为无论出于何种原因,目标数据库中都有重复等。

这就是我所做的

选择 * FROM pg_stat_replication;

更改用户 sub247 登录连接限制 18;

在 SCHEMA public TO sub247 中的所有表上授予选择;

CREATE TABLE public.test ( 测试文本 COLLATE pg_catalog."default", test2 bigint ) WITH ( OIDS = FALSE ) TABLESPACE pg_default;

ALTER TABLE public.test OWNER 到 postgres;插入测试 (test,test2) 值 ('a',1)

更改表测试副本身份已满;为表测试创建发布 pub247b;

然后在目标数据库上

然后过了一段时间......从测试中删除。

现在,我如何再次同步目标数据库上的测试

0 投票
0 回答
609 浏览

postgresql - postgresql 逻辑复制流失败并显示“从副本读取时数据库连接失败”

嗨,我正在无限循环中连续读取逻辑复制流。我有另一个程序不断填充同一个数据库中的表。我注意到一段时间后(大约 5-10 分钟)。我总是得到例外

这是我的示例程序:

}

任何帮助表示赞赏!我正在使用 postgres JDBC 驱动程序 42.2.2。

0 投票
1 回答
337 浏览

postgresql - postgresql:逻辑复制是否包括回滚事务?

逻辑复制是否解析事务单元中的 WAL 文件?回滚事务呢?

而且,什么 API 可以在接收器端输入数据更改,而无需在 SQL 级别重放它们?就像 postgresql 的内置流复制接收器一样,无论是逻辑的还是物理的。

编辑

让我进一步澄清我的问题。

逻辑流式流程如下图所示:

postgresql 实例(发送方,使用特定输出插件创建插槽)--------流式协议----------> postgresql 实例(接收方,获取复制数据)

这里复制数据的格式由输出插件决定,我们假设它是纯文本。那么直截了当,我们可以把它当做 SQL 语句,在接收方 postgresql 中重放,但显然效率低下。是否有任何低级 API 来输入复制数据?

0 投票
0 回答
93 浏览

postgresql - 备用节点上的逻辑解码 - 有任何进展吗?

我读了这个问题: 在备用节点上进行逻辑解码,并检查了 PostgreSQL 文档和 PG 邮件列表,但我没有找到任何关于使用热备用副本作为主节点进行逻辑复制到其他数据库的可能性的最新信息。

此功能的实施是否有任何进展?非常感谢。

0 投票
2 回答
944 浏览

postgresql - PostgreSQL 11 中的逻辑复制和声明式分区

我有一个transactions包含 2 亿行的常规表。

我决定使用逻辑复制将此表转换为声明性分区。

我在 node1 上创建了一个出版物,如下所示:

当我尝试在 node2 上创建订阅时,如下所示:

返回此错误:

是否可以使用逻辑复制将常规表复制到声明性分区表?