当前位置: 首页 > 工具软件 > Slony-I > 使用案例 >

Postgresql 数据复制工具Slony-I,Slonik 小工具的一点困惑

伯洋
2023-12-01

近期,利用Slony给系统布设了数从数据复制方案。在方案末尾,需要探究一下,主DB的表结构变化,是否会导致数据复制出现异常,以及如何应对。

果不其然,主DB中的原始数据表,增加了一个字段,就导致针对该表的复制/数据同步,戛然而止了。不过,不必惊慌,这与slony文档所说的,由于Slony核心机制是基于表上的触发器,因此并不负责表结构的搬家,因此表结构的同步需要自行完成,并且可以将DDL语句委托给slonik 的execute script命令来完成。

于是我翻找slonik 对于execute script的文档,试了之后竟然发现,永远只有一个结果,那就是语法错误。后来,我甚至对于slonik 本身都产生了怀疑。于是我打算用最简单的echo命令进行测试,竟然有如下结果(-v的目的是查看其版本,不幸的是,版本已经是最新的)

[postgres@CC75 qyuc]$ slonik -v
slonik version 2.1.4
[postgres@CC75 qyuc]$ 
[postgres@CC75 qyuc]$ slonik<<E
>  ECHO 'hello';

> E
<stdin>:1: ERROR: syntax error at or near ECHO
 

事已至此,让人大跌眼镜。slonik 为何连echo的命令都不支持了呢?(该命令自从1.0起就已经支持)。

到底是怎么回事?我先停下叙述,转身寻找答案。等有了眉目,再来续写此篇。(于2021.2.25 下午16:33,已经被此问题困扰了将近1天的时间)

以下是华丽的分割线


这部分内容添加于 2021.3.2 16:08 

重新认真地阅读了 Slony 的手册,Slonik 的文档以后,才发现遗漏了重要的一点内容。Slonik 的脚本语言,明确说了有两项内容是脚本执行的先决条件,原文是:

The following commands must appear as a "preamble" at the beginning of each slonik command script. 

SLONIK CLUSTER NAME --  preamble - identifying Slony-I cluster
SLONIK ADMIN CONNINFO --  preamble - identifying PostgreSQL database

至此,才明白,原来 每个脚本都必须明确 哪个集群,以及DB 怎么访问。OK,验证了之后,终于发现 echo 命令可以正常执行了。

好吧,那就继续 折腾 execute script 的命令,看看怎么才能在复制机制建立之后,更改复制表的表结构,并且能继续进行增量的复制。

(于 2021.3.2 16:14 )

 

 

 类似资料: