jikkenjo.netjikkenjo.net適当なことを書くか書かないかわからないメモ帳。メニューコンテンツへスキップ「Postgresql」カテゴリーアーカイブPostgreSQLでSQL発行時のエラー対応コメントを残すPostgreSQLでselect句に定数が含まれていた場合、下記エラーが出力されることがあります。後に続いて型を決めてやれば問題は解消します。::textの部分です。d_tableメモでした。bawPostgreSQLのpg_dumpで単一のfunctionのみ取得するコメントを残すpg_dumpでは-tオプションで単一または複数のtable/view/sequenceを指定して定義の抽出が可能ですが、functionの指定はできません。これを解決する、裏技チックな方法が英語ページにしか掲載されていなかったので、日本語ページの一人目になるべく本記事を執筆しました。function_define.dmp-sオプションでスキーマ(定義)のみを抽出します。(ここでいうスキーマとは、テーブルの完全修飾名の前半に使う名称(schema)ではないので注意。table)のことを指します。この注意事項は本家にも記されています。)これと–schemaオプションと混乱しないでください。”schema”という単語を異なる意味で使用しています。pg_dump結果をパイプでpg_restoreに繋いでいます。pg_restoreはcustom形式しか処理できないため、-Fcオプションを付与しています。(デフォルトはplainです。)-Pは名称を指定してcustomからfunctionの定義を取り出すことができます。pg_restoreは特に接続先データベースが指定されていない場合、標準出力にplain形式で吐き出すため、リダイレクトでファイルに出力しています。データベース名が指定された場合、pg_restoreはそのデータベースに接続し、アーカイブを直接そのデータベースにリストアします。データベース名が指定されなかった場合は、データベースを再構築するために必要となるSQLコマンドが含まれたスクリプトが作成されます(ファイルもしくは標準出力に書き出されます)。pg_restorefunctionに引数(args)がある場合、正しい引数の数だけ、型を指定してやる必要がありますので注意が必要です。不明の場合は下記コマンドで確認できるでしょう。私の環境では2回以上-Pを指定した場合、最後に指定したfunction以外が無視されました。そのため、下記のように工夫する必要があります。function_define.dmp最終的な出力ファイルを見ると、SETが重複して出力されていますが、特に弊害はありません。baw同じテーブル構造で違うスキーマにデータをコピーするコメントを残す違うschemaに存在する、同じ構造のtableに対して、pg_dumpでデータを抽出/挿入する方法を記します。最初にオチを言うと、\COPYを使用したほうが楽です。下記の通り、test1.testからtest2.testに対してデータをコピーします。対象テーブルに対して、pg_dumpをplainでダンプします。customで色々と試してみましたが、結局徒労に終わりました。--table=test1.testplainのため、中身はviで見ることができます。complete--スキーマが書かれている箇所を手で直してしまっても構いませんが、コマンドで自動化してしまいます。test.dmp念のため、diffで確認してみます。postgres後は普通にpsqlで流し込みます。--file=test.dmp下記の通り確認してみます。rows)最後に今回はpg_dumpにこだわってみたのですが、\COPYを使用するほうが楽だと思います。対象のテーブルをコマンド実行時に指定できますしね。