実際には簡単な質問ですが、私は決定的な回答は見つかりませんでした。シームレスにpostgresデータベースを更新します - スキーマ、名前の変更、方法
本番データベースfoo_prdと、古いものを置き換えると思われる同じサーバー上の同じfoo_newの新しいバージョンを想定します。 _prdから_newにシームレスに切り替える最もクリーンな方法は何ですか?
データベースの名前を変更すると、現在のユーザーをpidで切断する必要があります。これはいくつかの要求を取りやめ、プロセス中に新しいユーザーが接続する可能性があります。私は新しいデータベースのテーブルを異なるSCHEMAとして作成し、次にsearch_pathを変更することを考えていました。 "$user",prd
から"$user",new,prd
までです。
何かが間違っている可能性がありますか?より良い提案はありますか?間違ったアプローチを取っていますか?
名前の変更で実際に強制切断が必要なのかどうかはわかりません。私は(テストされていない)名前がすべての接続がなくなるまで待つと思う。もちろん、2つの名前の変更は1つのトランザクションで行う必要があります。 –
いいえ、エラーで失敗します。これは私がテストしたものです。 :) – relet
プロダクションの大きな変更を行う伝統的な方法は、スキーマとデータの更新をスクリプト化し、バックアップし、オフラインでテストし、既存のデータベースに適用することだと思います。これは、2つのデータセットを保持したり、古いデータベースをしばらく読み込み専用にする必要はありません。 – Tobu