问题标签 [pglogical]

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 投票
0 回答
178 浏览

postgresql - 当我们对模式进行更改时,pglogical 是否需要重新启动?

我们正在尝试将我们的 postgres 数据库从一项服务迁移到另一项服务(例如从 AWS RDS 到 Google Cloud)。我们使用了 Google 的内置数据库迁移服务 (DMS),它使用了pglogical扩展。

我们的源数据库在 postgres 9.6 中,我们开始将数据复制到另一个版本为 13 的 postgres。数据已成功复制,但由于没有primary_key约束,很少有表错过复制。如果不同步目标中的这些表,我们将无法使用目标数据库。我有以下问题,

  1. 具有 primary_key 约束的表已经同步,并且最新数据也会更新到目标,因为它是连续复制。单独添加 primary_key 会将数据复制到目标还是我们需要重新启动pglocical?我问这个是因为我们无法控制pglogicalGoogle 的 DMS 处理迁移过程。

  2. 我们无法从头开始重新启动,因为我们的数据库大小超过 2TB,这会消耗大量时间来复制数据。我知道我们可以手动复制这些表。还有其他更好的方法来解决这个问题吗?

重要提示:当使用 pglogical 复制进行逻辑同步时,是否建议更改架构?

0 投票
1 回答
105 浏览

postgresql - 可以使用 pglogical 将本地数据库迁移到 AWS RDS 吗?

我正在尝试以最少的停机时间将我的本地 postgres 12.4 数据库复制到 AWS RDS 13.2。我测试了 pglogical 以创建从我的源数据库到另一个 prem 主机的副本,发现 pglogical 需要超级用户角色,例如具有Replication属性的 postgres。我遵循了logical在目标 RDS 实例和本地源主机上设置配置的所有步骤(https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-from-postgresql-on-amazon-ec2-到-amazon-rds-for-postgresql-using-pglogical.html)。

我在创建订阅步骤中收到超时错误,并显示无法联系源的消息。我已在我的源 pg_hba.confg 中允许 RDS 端点的连接。

由于rds_superuser在 RDS 中并不是真正的超级用户,我想知道是否可以使用从本地复制到 RDS pglogical?有什么想法或以前的经验吗?感谢有人可以分享。

谢谢

0 投票
1 回答
66 浏览

postgresql - pglogical.replicate_ddl_command 报价处理

提供者在 OEL 7 postgres 12.4 上,订阅者在 RDS 13.2 上

只要命令的开头和结尾之间没有引号,pglogical.replicate_ddl_command 就可以正常工作。例如,下面工作正常

设置事件触发器以将此新创建的表添加到默认的 replication_set。

接下来,我们需要将表 foo 作为分区附加到表 order 中,这就是 FOR VALUES 中的引号成为问题的地方。

在与此相关的文档中找不到任何内容。请帮忙。

0 投票
1 回答
142 浏览

postgresql - 通过 ssh 隧道设置 pglogical,由对等方重置连接

我正在本地 PostgreSQL 10.14(发布者和 AWS RDS Postgresql 10.16(订阅者)之间设置 pglogical 复制,但是在设置订阅后,我只能重置连接。谁能发现我做错了什么?

网络设置:

我已验证 ssh 隧道正在工作:

  • 我可以使用连接到隧道的 psql 从 AWS 连接到本地 postgres
  • 使用 postgres_fwd 时,我什至可以从 AWS RDS 连接到本地 postgres

Pglogical 设置:
内部部署:

  • 使用 dsn 创建节点host=10.2.0.8 dbname=... user=... password=...

AWS:

  • 使用 dsn 创建节点host=db01.some.tld dbname=... user=... password=...
  • 使用 dsn 创建订阅host=10.2.0.8 dbname=... user=... password=...

一旦完成:

  • pglogical 进程同时在提供者和订阅者上运行
  • 但我遇到以下错误:AWS:

日志:无法从客户端接收数据:对等方重置连接
日志:客户端连接与打开的事务发生意外 EOF

现场:

日志:客户端连接上的意外 EOF 与打开的事务

我试过摆弄日志参数,但没有得到任何有用的东西。同样,我无法从 ssh 隧道日志中获得任何帮助。

知道我做错了什么吗?

0 投票
1 回答
224 浏览

postgresql - 现有数据集上的 Postgres 13 + pglogical 2.3.4

我在尝试在提供者和订阅者之间设置 pglogical 时遇到问题,两者已经有一些共同的数据。

这是一个最小的脚本来重现我正在尝试做的事情:

我认为将冲突解决设置为 'apply_remote' pglogical 会在 db2 上重新插入具有 PK 1 的现有行并使用 PK2 插入新行。但是 db2.table1 仍然是 PK 1 的单行。

Postgres 日志显示:

冲突结果设置:

我也尝试过:

在看到日志上的 COPY 失败并阅读该批处理将在内部使用 COPY 命令的文档后,我尝试禁用它:

它仍然没有工作

我做错了什么还是我误解了它应该如何工作?也许冲突解决仅在执行初始复制批处理后才适用?

注意:如果在初始复制后插入重复的行,它可以正常工作:

0 投票
1 回答
87 浏览

postgresql - 对 jsonB 列类型使用 pgLogical 行过滤器

我正在尝试复制包含 jsonB 列的表。我想使用行过滤来仅选择我需要的行。如何为 jsonB 定义行过滤器?

表人:

样本数据:

我尝试了以下方法,但它们不起作用:

我尝试的另一个选项:

0 投票
0 回答
74 浏览

google-cloud-platform - 什么是修改源数据库中的 pglogical / 数据库迁移服务 (GCP)?

我们正在使用 pglogical 扩展,使用数据库迁移服务将 PostgreSQL 数据库复制到 Google Cloud。我们能够成功进入连续复制阶段。问题在这之后。

在源数据库上运行一个系统,该系统在数据库中执行一些检查,特别是在“公共”模式中。此检查正在检测此架构中的更改并删除所有更改,因此,复制失败。您能给我有关在“公共”模式中执行 pglogical/数据库迁移服务的修改的信息吗?

提前致谢。

0 投票
0 回答
106 浏览

networking - Pglogical 错误:致命:没有用于来自主机“xxx”、用户“xxx”、SSL 的复制连接的 pg_hba.conf 条目

我有两个节点,node1(提供者),node2(订阅者)。在node2、订阅节点上设置PG逻辑时,运行时

我收到以下错误:

错误:无法在复制模式下连接到 postgresql 服务器:致命:没有用于来自主机“172.19.0.3”的复制连接的 pg_hba.conf 条目,用户“test”,SSL 关闭

两个节点都是 docker 节点,node1 是预期的提供者,docker inpect显示它的容器 ip 是 172.19.0.2。node2(我在其中运行 select pglogical.create_subscription)是订阅者节点,docker inspect显示其 ip 为 172.19.0.3。在 node1 的 pg_hba.conf 文件中,我在 IPv4 部分下有以下内容:

在 postgresql.conf 我有:

我不确定为什么我仍然会收到错误消息。

0 投票
0 回答
55 浏览

postgresql - PostgreSQL pglogical 复制填满磁盘空间

我尝试使用 pglogical 在 2 个 PG 服务器之间复制数据,在此过程中发现巨大的磁盘占用。这是详细信息

环境:

  • 来源 PG:

    • 服务器名称:pg-publisher。
    • IP地址:10.0.0.1
    • 整盘空间:3.5T
    • PG数据文件夹大小:2.2T
    • 最大桌子尺寸:
      • 表名 -> my_schema.logs
      • pg_table_size('logs') = 1.4T
    • PG正在运行,新数据不断进入并插入到包括表在内的logs表中。
  • 目的地PG:

    • 服务器名称:pg-subscriber
    • IP地址:10.0.0.2
    • 整盘空间:3T

我是如何设置复制的:

  • 在 pg-publisher 上

    • 创建节点:

    • 创建复制集

  • 在 pg 订阅者上

    • 创建节点

    • 创建订阅

); ```

确认

经过上述操作。我检查了两台服务器上的状态:

  • 在 pg 订阅者上。pglogical 复制处于initializing状态(来自pglogical.show_subscription_status()
  • 在 pg-publisher 上。复制槽已创建且未处于活动状态。这是意料之中的,因为有很多数据需要初始化。在达到状态之前它不会处于活动replicating状态

我的困惑

所有操作似乎都按预期工作。但 4 天后,我收到警报,发现可用磁盘空间pg-publisher减少了很多(减少了 20% 以上)。然后这是我发现的:

  • pglogical复制仍处于initializing状态 on pg-subscriber。在 pg-publisher 上,我检查了pg_stat_activity它,发现pglogical事件正在使用COPY命令复制最大的表my_schema.logs

  • PG数据的文件夹大小pg-publisher从2.2T增加到2.7T

我知道发布服务器会在达到replicating状态之前保留复制所需的 WAL 文件,这将占用磁盘空间。但我检查了pg_wal文件夹大小pg-publisher,发现它只有不到 20GB。但base文件夹增加到2.7T。我可以知道为什么会这样。命令是否COPY占用磁盘空间(我不这么认为,因为我发现它会复制到标准输出)还是有其他事情会导致它?

0 投票
0 回答
24 浏览

database - pg_logical 复制失败 - Postgresql 11.9

在 pglogical 复制方面需要一些帮助。以下是我的复制设置:

在 Publisher 端,节点创建成功。我对某些表的列应用了行过滤。就像是:

在订阅者端,节点创建成功。当我创建对发布者的订阅时,状态会pglogical.show_subscription_status()保持initializing一段时间,然后更改为down 我检查了订阅者数据库日志,我看到以下错误:

some_column我检查了 Publisher 并且 in中没有 NULL 值table_1table_1我还检查了出错的特定行,some_column's值为'f'。some_column是一列Boolean NOT NULL

有关如何解决此问题的任何建议?

谢谢。