プレーンなdumpファイルから特定条件のデータだけimportする
個人用メモ。
データ移行とかテスト用DB構築のため、dumpファイルを使うことが多いのですが、特定条件を満たすデータだけを移行したい場合があります。こんな場合の王道(?)は
- dumpファイルをimportして、いらないデータをDELETEする
かと思いますが、HDD容量とかの関係でできない場合もあります。
そんな時は、データを間引いたdumpファイルを作ってそれをimportするようにしています。dumpファイルは基本的にテキストなので、grepでパターンを指定してやれば目的のデータは抽出できます。あとは、dumpファイルのヘッダ(先頭からCOPYコマンドまで)を抽出データの先頭にコピーしてやればOK。ヘッダはこんな感じ。
-- -- PostgreSQL database dump -- SET client_encoding = 'EUC_JP'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; SET search_path = test, pg_catalog; -- -- Data for Name: sample_table; Type: TABLE DATA; Schema: test; Owner: test -- COPY sample_table (column1, column2, column3) FROM stdin;
コマンドでやると、こんな感じ。
$ head -n 17 sample_table.dmp > import_data.dmp $ grep -E "[パターン]" sample_table.dmp >> import_data.dmp $ psql -U xxxx test_db < import_data.dmp
PostgreSQLで「dumpファイル」とか「import」という言葉を使うかどうかは自信ないですが。。。