Postgres 9.4 外部数据包装器 "FDW" 无法在不同端的插入之间发送串行数据类型

Postgres 9.4 Foreign Data wrapper "FDW" is unable to send serial data type between insertion from different ends

我有一个简单的 2 个 CentOS 服务器配置,同时使用 postgres-9.4 来模拟 Postgres-9.4 中的 FDW 场景。

我使用 fdw link 一个简单的 table 与另一个服务器上的另一个数据库,从两端读取工作完美,问题是串行主键,它不同步;换句话说,如果我从原始 table 插入,在我从外部 table 插入后,它不会同步计数。反之亦然。

根据我从 Nick Barnes 那里得到的评论,是的,我确实需要保持两边的计数器同步,所以我做了一个函数,每次查询实际数据库的最新索引,所以这是总是插入到正确的记录。 我仍然不确定这是否会继续存在,但我很快就会让它投入生产。

我在博客上写了 here 和一个 table 例子。

我遇到了同样的问题,并按照Negma在他的博客中建议的方法进行了尝试。此解决方案仅适用于仅插入一行的情况。如果您在同一个事务中插入更多行,select max(id) 将始终 return 相同的 ID,并且您将获得不唯一的 ID。

我通过将 id 的类型从 serial/integer 更改为 uuid 解决了这个问题。然后你可以按照 Negma 的建议做同样的事情,但是使用 pgcrypto EXTENSION 中的 gen_random_uuid() 。

所以在国外服务器我做了:

ALTER TABLE tablename ALTER COLUMN columnname SET DEFAULT gen_random_uuid();

国外也一样table。