问题标签 [logical-decoding]

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 回答
158 浏览

postgresql - 从 PgQ 读取到 Apache Kafka 的最佳方式是什么?

我想从一个巨大的 PostgreSQL 数据库中的几个表中捕获数据更改。最初我计划使用Debezium的逻辑解码功能。但是这个解决方案有很大的开销,因为它需要解码整个 WAL。另一种解决方案使用触发器和PgQ。是否有任何通用方法可以将 PgQ 与 Kafka 或可能为此目的的 Kafka 连接器集成?

0 投票
3 回答
683 浏览

postgresql - PostgresQL:整个事务是否总是写入复制槽?

我创建了一个复制槽:

事务中的每个步骤在复制槽中都有自己的行。这是一个例子:

问题:
在事务生命周期的哪个时刻,事务步骤开始写入复制槽?

是否有可能在事务提交之前将事务步骤写入复制槽?

换句话说,是否有可能在任何给定时间只有一半事务被写入复制槽,如下所示:

非常感谢您对此的见解。

0 投票
1 回答
43 浏览

postgresql - 逻辑解码 - postgres - 多种输出格式

我一直在尝试使用 postgres 的逻辑解码来构建管道。但是,我有点困惑。请在下面找到我的问题

  1. 我已经建立了一个 pub-sub,我可以看到 2 个服务器之间的数据流动。但是,我还没有设置任何插槽。何时使用 create_replication_slots?
  2. 我期望在我已经实现的 2 台服务器之间复制表。但是,像旧值和新值这样的详细日志记录,我想存储在 S3 的文件中吗?我可以同时写入表和将详细的日志记录写入 s3 吗?
  3. 如果我在 server1 上有一个数据库 db1,在 server2 上有一个数据库 db2,我可以将它们放在 server3 上,数据库 server3.db1 连接到 server1.db1,server3.db2 连接到 server2.db2?

我正在使用 postgres10

请分享您对此的看法

0 投票
0 回答
43 浏览

exe - 如何解释可执行二进制文件

所有这些在 Unix 中没有扩展名的文件和在 Windows 中的“.exe”都是保持程序静态的好方法;我正在寻找的是对其二进制内容的解释。我的意思不是解码内容,而是以可靠的方式对其进行分组。

0 投票
0 回答
45 浏览

java - 将 0 到 255(1 字节)范围的 10 个不同值编码为 3 字节长度值并将其恢复为原始值

我需要解决问题:

我有 10 个不同的字节(2^8),每个字节的值范围是 0 到 255。它需要编码成 3-字节(2^24)的长度。稍后我需要从编码的 3 字节值中检索原始值。

我尝试了Cantor 和 Szuszik 函数,但编码值超过了 3 字节长度。

有没有其他替代方法可以解决数学或计算机科学/二进制逻辑中的这个问题?

0 投票
1 回答
352 浏览

postgresql - 如何在 postgres 上的级联备用服务器上进行逻辑复制?

是否可以在处于级联复制模式的备用服务器上启用逻辑复制?

0 投票
0 回答
48 浏览

postgresql - 流复制协议中的适当备用状态更新

问题是关于流复制协议。这非常简单,是为物理复制而设计的,能够:

  • 发送服务器状态 >Primary keepalive message
  • 接收副本状态 >Standby status update
  • 发送 WAL 数据 >XLogData

还有逻辑解码,使用相同的 XLogData 帧通过插件发送从 WAL 解码的数据,pglogical而不是原始 WAL。

Streaming Replication 希望我提交 Standby 状态更新,以释放资源并删除旧的 WAL,根据文档

最后一个 WAL 字节的位置 + 1 ...

pglogical在 XLogData 帧中使用自己的消息返回自己的 LSN 位置,但这些不可用。

当数据写入不同的数据库时,逻辑解码不起作用。并且插槽位置还需要更新,否则插槽将丢失。因此,唯一的方法是从 发送 LSN 位置Primary keepalive message,根据文档发送

服务器上 WAL 的当前结束。

这令人困惑。如果插槽在位置 100 并且服务器已经在位置 200 上怎么办?

所以,

在试验和检查 pg_recvlogical 的来源之后,明白了,这Primary keepalive message并不意味着“服务器上 WAL 的当前结束”,而是实际上从插槽位置逐渐增加到当前(pg_current_wal_lsn())服务器 LSN。中间有 XLogData 帧(如果有的话)。似乎,类似的消息是按 LSN 顺序接收的。

现在,问题:

Q1) 它是否记录在某处?

Q2) 这有意义吗?我是不是误会了什么?

Q3) 流式消息总是按 LSN 排序吗?

Q4) 可以提交职位Primary keepalive message吗?