PostgreSQL - Slony>致命错误:重复键值违反唯一约束“sl_nodelock-pkey”

时间:2010-09-15 00:45:23

标签: database postgresql replication database-replication slony

只需在此处发布此内容即可帮助其他人:

我们前一次中断时遇到此错误,并尝试重新启动slon复制服务,因为复制并未真正将数据从MASTER复制到SLAVE:

FATAL  localListenThread: "select "_MY_DATABASE_copy".cleanupNodelock(); insert into "_MY_DATABASE_copy".sl_nodelock values (    1, 0, "pg_catalog".pg_backend_pid()); " - ERROR:  duplicate key value violates unique constraint "sl_nodelock-pkey"
DEBUG2 slon_abort() from pid=xxxx
DEBUG1 slon: shutdown requested

3 个答案:

答案 0 :(得分:2)

在我们的环境中,这是由于Postgres在slon守护进程之前停机而导致的中断(计划内或计划外)造成的。通常,重新启动slon不能解决错误。解决它的是:

  1. 停止引用失败/重新启动节点的所有窗口(如果您 可以,只需通过slon_kill停止所有的懒人;更简单)。
  2. 进入sl_nodelock     master数据库服务器上的表,并删除所有行     nl_nodeid对应于失败/重启节点。
  3. 开始任何     停止了懒人。

答案 1 :(得分:1)

好的,这就是我修复它的方法,但这不能保证它适用于所有人:

  • 检查slon进程。 ~# ps aux | grep slon
  • 然后杀死所有进程 运行slon replicatin服务 看起来像这样。

    ~# ps aux | grep slon
    root      8321     0.0  0.0   6528  1568 pts/2    S+   10:35   0:00 slon MY_SCHEMA dbname=MY_DATABASE user=postgres host=169.1.1.1 password=password
    

通常它有两个进程在后台运行,这是正常的,所以我们必须杀死这些进程。

~# kill -9 8321

然后再次运行你的slon replicatin服务脚本。


答案 2 :(得分:1)

我也遇到了这个错误,在我的情况下,应用了第三个修复。我们意外地在奴隶身上运行了一个'slon'进程。我们的解决方案是关闭该进程,然后重新启动主服务器上的“slon”进程。