问题:
在使用pg_basebackup搭建备节点时,由于pg_basebackup本身使用的是int整型来保存传输的数据大小,当传输的数据大于4G的话,整数就会溢出,进而报出:pg_basebackup: invalid tar block header size之类的错误.
 
解决:
在9.4版本之前(包括9.4,但直接查看9.4的代码,保存文件长度的变量是__int64的,可能是9.4之前的,也可能我看的已经打过补丁了)。如此不能直接使用pg_basebackup的p格式来搭建备节点,不过可以使用tar格式来搭建。
 
pg_basebackup -D $PGDATA  -Ft -z -P -v  -h ip -p 端口号 -U 复制账号
 
如此可以从主节点,将表空间,数据目录分别压缩传输过来,每个表空间都是单独一个压缩包,后面再分别在对应表空间解压即可。
但我现在遇到的问题并不是要传输的文件大于4G,而是很小的文件也无法使用pg_basebackup传输,虽然最后通过使用tar格式解决了数据同步问题,但问题原因扔不清楚,查阅邮件列表也只看到传输大文件时出现过该问题。
 
邮件列表谈及内容:
https://www.postgresql.org/message-id/flat/20140603163031.GR24145%40awork2.anarazel.de#[email protected]
 
希望有了解的告知原因。
05-25 19:37