• ベストアンサー

dumpでインデックスだけ抜きたい

postgresのdump & restoreで全体定義とインデックスを分離したいです。 やりたいことは以下です。 元のデータベースがあります。 ここから、 (1)インデックスを除く全体定義 (2)インデックス を抜き出します。 別の環境に (1)をリストアし、 データをCOPYし、 その後、(2)をリストアします。 全体定義をdumpし、 それをrestoreし、 そこにデータを突っ込むと速度が遅いので、インデックスだけ後で貼りたいのです。 何か良い方法はありませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • gacky-79
  • ベストアンサー率100% (14/14)
回答No.3

pg_dump --schema-only と --data-only で、スキーマとデータを分けてダンプしてはいかがでしょう? スキーマのほうにテーブルとインデックスの定義の両方が含まれてしまうため、テキストエディタ等で手作業で分離する必要がありますが、データを含んでいないのでファイルサイズも小さくなり、編集しやすくなるかと思います。

参考URL:
http://www.postgresql.jp/document/current/html/app-pgdump.html
ngwave
質問者

お礼

ありがとうございます。

ngwave
質問者

補足

--schema-onlyで抜いたヤツで作成した後、 システムスキーマから抜いたインデックスを削除&退避し、 データを入れ、 システムスキーマから抜いたインデックスを貼り直せばいけそうですね。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.2

そういうことでしたら、 pg_dump -Fc ... > dump.out のようにダンプしたデータを pg_restore -l dump.out >dump.list とします。 dump.list には、dumpしたデータの一覧が 記載されているので、不要な部分をコメントアウトして、 pg_restore -L dump.list dump.out ... のようにすると、必要なものを選択してリストアすることが できます。 うーむ、説明がへたですね。 わかってもらえるでしょうか。

参考URL:
http://www.postgresql.jp/document/pg732doc/reference/app-pgrestore.html
ngwave
質問者

お礼

ありがとうございます。

すると、全ての回答が全文表示されます。
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.1

pg_dump, pg_restore すると table の作成、 data のコピー、index の作成という順序で データベースがリストアされます。 これはお望みの手順そのままではありませんか。 一度 pg_restore が生成する sql を眺めて見られては いかがでしょうか。 なお、pg_dump 時に --inserts を指定した場合は、 pg_restore 時に insert 文でデータが登録されます。

ngwave
質問者

お礼

ありがとうございます。 >これはお望みの手順そのままではありませんか。 その手順で良いのですが、 インデックス以外の作成とインデックスの部分を分離したいというのが、この質問の胆の部分です。 テーブルは流用するが、データは別途加工したものを突っ込みたいという場合、 1)インデックス以外の作成 2)データの挿入 3)インデックスの作成 と、3段階になっている必要があります。 エディタで開いてsql を眺めて、手で分離するのではなく、何か自動的な方法はありませんか? >insert 文でデータが登録されます。 insert 文は余計に速度が遅くなるので、今回の要件には合いません。

すると、全ての回答が全文表示されます。

関連するQ&A