postgresql のストアドプロシージャを移行する

postgreSQL のデータをスキーマ間で移行する作業の時に調べ回ることになったのでメモ。

プロシージャ(かトリガのどちらか)の一覧は「\df」で取得できる所までは、まあ大丈夫とする。
実際のソースは「SELECT prcsrc FROM pg_proc WHERE prcname = 'procedure_name'」で取得できる。

とは言え、これではソースのみであり、完全な CREATE FUNCTION 文ではない。
そこで pg_dump を利用する。

スキーマをダンプする時にオブジェクトを一緒にダンプするように、次の SQL 文を使う。
pg_dump --schema-only --oids -Fp db_name > filename」(必要なら -h、-U、-p 等も使う)
これで希望の CREATE FUNCTION 文を入手できる。後はエディタでちゃっちゃと編集すればいい。

もしかすると、適当な空のテーブルを作っておいて「-t tablename」を指定すると、余計なスキーマ情報が入らないかもしれない。…と思って試してみたら駄目だった。

あとは psql で入って「\i filename」で読み込めば OK となる。