我有一个简单的2个CentOS服务器配置,使用postgresg -9.4来模拟postgresg -9.4中的FDW场景。
我使用fdw将一个简单的表与另一个服务器上的另一个数据库连接起来,从两端读取工作完美,问题是串行主键,它不同步;换句话说,如果我从原始表插入,在我从外表插入之后,它不会同步计数。
根据我从Nick Barnes得到的评论,是的,我确实需要保持两边的计数器同步,所以我做了一个函数,每次查询实际数据库的最新索引,这样就总是插入到正确的记录。我还不确定这是否会成功,但我很快就会让它在生产中使用。
我也遇到了同样的问题,并尝试了Negma在他的博客中建议的方法。此解决方案仅适用于只插入一行的情况。如果您在同一事务中插入更多行,select max(id)
将始终返回相同的id,并且您将获得不唯一的id。
我通过将id的类型从串行/整数更改为uuid来解决这个问题。然后你可以像Negma建议的那样做,但是使用pgcrypto EXTENSION的gen_random_uuid()。
所以在国外服务器上我做了:
ALTER TABLE tablename ALTER COLUMN columnname SET DEFAULT gen_random_uuid();
对于外表也是如此。