【发布时间】:2018-12-15 09:52:03
【问题描述】:
我仍然是 Postgresql 的新手,如果这是简单的无知,请原谅。
我根据集群实验室文档设置了一个活动/只读的 Postgres v9.4 起搏器集群。
我正在尝试验证两个数据库是否确实同步。我正在两台主机上进行转储并检查输出之间的差异。我正在使用的命令是:
pg_sql -U myuser mydb >dump-node-1.sql
Pacemaker 将数据库状态显示为“同步”,直接查询 Postgres 似乎也表明同步良好...(主机 .59 是我的只读备用节点)
psql -c "select client_addr,sync_state from pg_stat_replication;"
+---------------+------------+
| client_addr | sync_state |
+---------------+------------+
| 192.16.111.59 | sync |
+---------------+------------+
(1 row)
但是,当我在只读主机上进行转储时,我的所有表最终都为“public”。添加到名称的前面。所以主节点上的表 foo 转储为“foo”,而在只读节点上它转储为“public.foo”。我不明白为什么会这样……我在类似的设置中做了一个 9.2 Postgresql 集群,但没有看到这个问题。我在主节点的公共架构中没有表...
希望有人可以帮助我了解发生了什么。
非常感谢!
【问题讨论】:
-
什么是确切版本的Postgres安装在master和slave上? (
select version();) -
有区别。从站正在运行 9.4.15 (Debian 4.9.2-10),从站正在 x86_46 (Debian 4.9.2-10+deb8u1) 上运行 9.4.18。我们的环境是debian Jessie。谢谢“a_horse_with_no_name”...如果没有选择版本的差异,我不会明白这一点!
-
最新补丁版本中的一些安全更改影响了转储的编写方式。因此,与 9.4.15 相比,9.4.18 的行为有所不同。检查release notes
-
我已经运行了 apt-get dist-upgrade,但显然我和 dpkg 都没有重新启动 Postgres 守护进程。我以为它们都已经更新到 9.4.18,但是您的“选择版本();”确定了问题。我重新启动了 Postgres,现在转储是相同的。我会将此移至答案。
标签: postgresql pg-dump