web-dev-qa-db-ja.com

ネットワークのない2つの別々の場所から2つのpostgresデータベースを同期する

2つの異なるコンピューターで同じスキームを実行している2つのpostgresデータベースがありますが、読み取り/書き込み要求を処理する必要があるときにネットワーク接続が保証されていません。

2つの異なる場所で動作するため、両方でデータを更新し続けるために時々それらをマージするソリューションを見つけようとしています(2週間ごとにそれらを接続するか、フラッシュドライブにファイルを渡すことができます)。

私の主な懸念は、このデータベースがいくつかのテーブル(自動インクリメント主キー)で一意の値を持っていることです。これを処理する方法がわかりません。両方のデータベースが異なるデータに対して同じキーを作成するとどうなりますか?自動的にマージして、行われた変更を出力できるツールはありますか?

(問題がある場合は、postgres 10を使用して、ubuntu env。)

ありがとう

2
JLev

そのための良い方法は、1ではなく2の増分を持つシーケンスを使用することです。そうすることで、1つのサイトで、また他のサイトでも主キーが不均一になります。その後、心配することなくマージできます。

create sequence seq_uneven increment by 2 start with 1;
create sequence seq_even increment by 2 start with 2;

そして、あなたはseq_uneven 1つのサイトとseq_even もう一方の。

1
Arkhena

あなたの主な関心事への解決策は、少なくとも概念的にはかなり単純です。シーケンスベースの列をbigintまたはbigserialにしてから、シーケンスを離れたところから開始して、考えられる時間枠内で重複しないようにします。これらの値が請求書番号などとしてユーザーに公開される場合は、実際の時間枠内で重複しないように妥協する必要がある場合があります。

0
jjanes