sql - Postgresql 复制槽错误 postgresql
问题描述
我使用 Postgresql 10。
我想将数据库“db”中的 2 个表复制到数据库“destination”中具有相同列的两个表。
将 postgresql.conf 中的 wal_level 值更改为逻辑值,并将 max_replication_slots 更改为 10
没有防火墙
我在数据库“db”中创建了发布
ALTER ROLE my_user WITH REPLICATION LOGIN PASSWORD 'my_password';
CREATE PUBLICATION my_publication;
ALTER PUBLICATION my_publication ADD TABLE table1;
ALTER PUBLICATION my_publication ADD TABLE table2;
我在数据库“目标”中创建了一个带有插槽的订阅,因为我想在同一台服务器中复制:
SELECT pg_create_logical_replication_slot('test_slot_v1', 'pgoutput');
CREATE SUBSCRIPTION my_subscription CONNECTION 'host=localhost port=5432 password=my_password user=my_user dbname=db' PUBLICATION my_publication WITH (slot_name=test_slot_v1, create_slot=false);
alter subscription my_subscription refresh publication ;
第一次复制有效。然后,当我更改一个 varchar 条目(不是 FK)的值时,该值不会被复制,并且我在 postgres 日志中出现以下错误:
2020-04-12 16:16:57.886 CEST [720474] 日志:订阅“my_subscription”的逻辑复制应用进程已启动 2020-04-12 16:16:57.888 CEST [720475] 错误:复制槽“test_slot_v1 “未在此数据库中创建 2020-04-12 16:16:57.889 CEST [720474] 错误:无法从 WAL 流中接收数据:错误:未在此数据库中创建复制槽“test_slot_v1” 2020-04- 12 16: 16: 57.890 CEST [712133] 日志:工作进程:订阅 245251(PID 720474)的逻辑复制工作者退出,退出代码为 1
我确定我在保存订阅的数据库“目标”中创建了插槽。
有任何想法吗 ?先感谢您。
解决方案
我将回答我的问题:Postgresql 希望在创建出版物的数据库“db”中创建插槽,而不是在创建订阅的数据库“目标”中创建插槽。
我做了什么 :
psql
\c destination
drop subscription my_subscription;
\q
psql
\c db
SELECT pg_create_logical_replication_slot('test_slot_v1', 'pgoutput');
\q
psql
\c destination
CREATE SUBSCRIPTION my_subscription CONNECTION 'host=localhost port=5432 password=my_password user=my_user dbname=db' PUBLICATION my_publication WITH (slot_name=test_slot_v1, create_slot=false);
似乎不需要这个命令:alter subscription my_subscription refresh publication;
推荐阅读
- microsoft-graph-api - graph api:如何访问或删除其他用户/应用程序创建的订阅表单?
- postgresql - Flyway:关系“flyway_schema_history”已经存在
- ios - 滚动到顶部时 UIScrollView 位置的 SwiftUI 口吃/闪烁
- simics - 当反汇编视图显示代码运行 64 位时,为什么 Simics 寄存器窗口显示 32 位寄存器?
- c# - 为什么 WPF 应用程序每次运行都需要管理权限?
- php - 使用 nginx 在 AWS Elastic Beanstalk 上将所有 URL 重写为 index.php
- python - 如何使用 Python 计算分类列的分组比例(在组比例内)?
- python - 我生成的 python-docx lambda 层有问题吗?或者我的 docx 生成器代码中有什么东西?
- java - Freemarker - 将一个对象打印到另一个对象中
- mysql - 安装后没有 MySQL 应用程序