Postgres-9.4 で FDW シナリオをシミュレートするために、両方の postgres-9.4 を使用する単純な 2 つの CentOS サーバー構成があります。
fdw を使用して単純なテーブルを別のサーバー上の別のデータベースにリンクしました。読み取りは両端から完全に機能しました。問題はシリアル主キーにあり、同期していませんでした。つまり、元のテーブルから挿入した場合、外部テーブルから挿入した後、カウントは同期されません。およびその逆。
Postgres-9.4 で FDW シナリオをシミュレートするために、両方の postgres-9.4 を使用する単純な 2 つの CentOS サーバー構成があります。
fdw を使用して単純なテーブルを別のサーバー上の別のデータベースにリンクしました。読み取りは両端から完全に機能しました。問題はシリアル主キーにあり、同期していませんでした。つまり、元のテーブルから挿入した場合、外部テーブルから挿入した後、カウントは同期されません。およびその逆。
私も同じ問題を抱えていたので、Negma が彼のブログで提案したように試してみました。このソリューションは、1 行のみを挿入する場合にのみ機能します。同じトランザクションにさらに行を挿入すると、select max(id)
常に同じ ID が返され、一意の ID は取得されません。
IDのタイプをシリアル/整数からuuidに変更することでこれを解決しました。次に、Negma が提案したのと同じことを行うことができますが、pgcrypto EXTENSION の gen_random_uuid() を使用します。
したがって、外部サーバーで次のことを行いました。
ALTER TABLE tablename ALTER COLUMN columnname SET DEFAULT gen_random_uuid();
外部テーブルについても同様です。
Nick Barnes から得たコメントに基づいて、はい、両側のカウンターを同期して維持する必要があるため、常に実際のデータベースに最新のインデックスを照会する関数を作成しました。これにより、常に正しいインデックスに挿入されます。記録。これが生き残るかどうかはまだわかりませんが、すぐに本番環境で動作するようにします.
私はテーブルの例でそれについてここにブログを書きました。