Postgresデータベース内のすべての機能のバックアップを取得したいのですが、Postgresのみで機能のバックアップを取得するにはどうすればよいですか?
_pg_getfunctiondef
_;を使用します システム情報関数 を参照してください。 _pg_getfunctiondef
_はPostgreSQL 8.4で追加されました。
_SELECT pg_get_functiondef('proc_name'::regproc);
_
スキーマ内のすべての関数をダンプするには、_pg_catalog
_のシステムテーブルをクエリできます。 public
からすべてのものが必要かどうかを言う:
_SELECT pg_get_functiondef(f.oid)
FROM pg_catalog.pg_proc f
INNER JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid)
WHERE n.nspname = 'public';
_
上記を変更して、"_pg_
_で始まるスキーマを除くすべてのスキーマから"に変更するのは簡単です。
psql
では、これを次のコマンドでファイルにダンプできます。
_psql -At dbname > /path/to/output/file.sql <<"__END__"
... the above SQL ...
__END__
_
別のDBで出力を実行するには、次のようなものを使用します。
_psql -1 -v ON_ERROR_STOP -f /path/to/output/file.sql target_db_name
_
ただし、このようにDB間で関数を複製する場合は、関数定義の正式なコピーを、できればPostgreSQL拡張機能としてパッケージ化されたsvnやgitなどのリビジョン管理システムにSQLスクリプトとして保存することを検討してください。 パッケージ拡張 を参照してください。
関数のみをダンプするようにpg_dump
に伝えることはできません。ただし、データなしのダンプ(-s
)を作成し、復元時にフィルタリングすることができます。 -Fc
部分に注意してください。これにより、pg_restore
に適したファイルが生成されます。
まずダンプを取る:
pg_dump -U username -Fc -s -f dump_test your_database
次に、関数のリストを作成します。
pg_restore -l dump_test | grep FUNCTION > function_list
最後にそれらを復元します(-L
は上記で作成されたリストファイルを指定します):
pg_restore -U username -d your_other_database -L function_list dump_test