アプリ版:「スタンプのみでお礼する」機能のリリースについて

postgresのdump & restoreで全体定義とインデックスを分離したいです。


やりたいことは以下です。
元のデータベースがあります。
ここから、
(1)インデックスを除く全体定義
(2)インデックス
を抜き出します。
別の環境に
(1)をリストアし、
データをCOPYし、
その後、(2)をリストアします。


全体定義をdumpし、
それをrestoreし、
そこにデータを突っ込むと速度が遅いので、インデックスだけ後で貼りたいのです。


何か良い方法はありませんか?

A 回答 (3件)

pg_dump --schema-only と --data-only で、スキーマとデータを分けてダンプしてはいかがでしょう?


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

参考URL:http://www.postgresql.jp/document/current/html/a …

この回答への補足

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

補足日時:2011/01/20 15:11
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2011/01/20 15:06

そういうことでしたら、


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/refer …
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2011/01/20 15:08

pg_dump, pg_restore すると table の作成、


data のコピー、index の作成という順序で
データベースがリストアされます。

これはお望みの手順そのままではありませんか。
一度 pg_restore が生成する sql を眺めて見られては
いかがでしょうか。

なお、pg_dump 時に --inserts を指定した場合は、
pg_restore 時に insert 文でデータが登録されます。
    • good
    • 0
この回答へのお礼

ありがとうございます。

>これはお望みの手順そのままではありませんか。

その手順で良いのですが、
インデックス以外の作成とインデックスの部分を分離したいというのが、この質問の胆の部分です。

テーブルは流用するが、データは別途加工したものを突っ込みたいという場合、
1)インデックス以外の作成
2)データの挿入
3)インデックスの作成
と、3段階になっている必要があります。

エディタで開いてsql を眺めて、手で分離するのではなく、何か自動的な方法はありませんか?


>insert 文でデータが登録されます。

insert 文は余計に速度が遅くなるので、今回の要件には合いません。

お礼日時:2010/12/27 09:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す