我有一个简单的 2 个 CentOS 服务器配置,使用两个 postgres-9.4 来模拟 Postgres-9.4 中的 FDW 场景。
我使用 fdw 将一个简单的表与另一台服务器上的另一个数据库链接起来,从两端读取工作正常,问题在于串行主键,它不同步;换句话说,如果我从原始表插入,从外部表插入后,它不会同步计数。反之亦然。
我有一个简单的 2 个 CentOS 服务器配置,使用两个 postgres-9.4 来模拟 Postgres-9.4 中的 FDW 场景。
我使用 fdw 将一个简单的表与另一台服务器上的另一个数据库链接起来,从两端读取工作正常,问题在于串行主键,它不同步;换句话说,如果我从原始表插入,从外部表插入后,它不会同步计数。反之亦然。
Based on the comment I got from Nick Barnes, yes I do need to keep up the counter on both sides in sync, so I made a Function that every time Queries the Actual Database for the latest index, so that is always inserts to the correct record. I am still not sure if this is going to survive, but I'll make it work production really soon.
I blogged about it here with a table example.
我遇到了同样的问题,并尝试了 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();
外表也是如此。