PostgreSQLデータベースオブジェクトの作成スクリプトが必要です。
Pg_dumpにアクセスできません。したがって、SQLクエリですべてを取得する必要があります。どうすればこれができますか?
関数の定義を取得するには、pg_get_functiondef()
を使用します。
select pg_get_functiondef(oid)
from pg_proc
where proname = 'foo';
インデックス、ビュー、ルールなどの定義を取得するための同様の関数があります。詳細については、マニュアルを参照してください: http://www.postgresql.org/docs/current/static/functions-info.html
ユーザータイプの定義を取得するのは少し難しいです。そのためには、information_schema.attributes
をクエリする必要があります。
select attribute_name, data_type
from information_schema.attributes
where udt_schema = 'public'
and udt_name = 'footype'
order by ordinal_postion;
それから、create type
ステートメントを再アセンブルする必要があります。
詳細については、システムカタログのドキュメントを読む必要があります。 http://www.postgresql.org/docs/current/static/catalogs.html
ただし、同じ情報が返される場合は、information_schema
ビューを優先する必要があります。
psql -E
は、これらのクエリのクエストに役立ちます。
バックスラッシュコマンドの実行時にpsql
が使用するクエリを表示します-この関数の詳細については、\df+ myfunc
のように。
次に、pg_get_functiondefを使用した完全なサンプルクエリを示します。
WITH funcs AS (
SELECT
n.nspname AS schema
,proname AS sproc_name
,proargnames AS arg_names
,t.typname AS return_type
,d.description
,pg_get_functiondef(p.oid) as definition
FROM pg_proc p
JOIN pg_type t on p.prorettype = t.oid
JOIN pg_description d on p.oid = d.objoid
JOIN pg_namespace n on n.oid = p.pronamespace
WHERE n.nspname = 'some_schema_name_here'
)
SELECT *
FROM funcs
;;
明らかに、スキーマ名を指定する必要があります(または、そのスキーマを使用している場合は「public」)