2017-10-24 14 views
2

私たちはpostgresデータベースにデータを格納するシステムを持っています。場合によっては、データベースのサイズが数GBに拡大しました。postgresでの遅延インデックス作成

このシステムをアップグレードすると、そのデータベースのデータがバックアップされ、最後にデータベースに復元されます。膨大な量のデータがあるため、インデックス作成は復元中に完了するまで(約30分)かかるため、アップグレードプロセスが遅れることがあります。

データコピーとインデックス作成を2段階に分ける方法はありますか?データをコピーしてアップグレードを完了し、後でインデックス作成を行い、後でバックグラウンドで実行できますか?

ありがとうございます!

答えて

3

pg_dumppg_restoreには組み込みの方法はありません。しかし、pg_restore-jオプションが多く役立ちます。

CREATE INDEX CONCURRENTLYがあります。しかしpg_restoreは使用していません。

FK制約に依存しないセカンダリインデックスを除くすべてのものを復元できるのは非常にいいです。その後、CREATE INDEX CONCURRENTLYを使用してそれらを個別のフェーズとして復元します。しかし、そのようなサポートは現在存在しません、あなたはそれを自分で書く必要があります。

しかし、pg_restoreによって使用される目次をフィルタリングすることができます。そのため、必要な作業を行うためのハッキングスクリプトを実行する可能性があります。

+0

バックアップされたデータを復元するのに 'psql'を使います。 'pg_restore'の' -j'オプションは 'psql'よりも比較的優れていますか?また、 'psql'は' CREATE INDEX CONCURRENTLY'を使用/サポートしていますか? – Maddy

+1

'psql'は通常、' pg_dump'が生成したものだけを実行し、 'pg_dump'はそれを作成する必要があります。いいえ、そうではありません。はい、 '-j'が助けになります。 'pg_dump -Fc'を使い、' pg_restore -j'と並行復元モードを使います。 –

+0

pg_dumpによって生成されたファイルから 'CREATE INDEX'コマンドを削除し、後で実行するために別のファイルに入れることはできますか?このアプローチはまったく機能しますか?注文に問題はありますか? – Maddy

関連する問題