本記事の内容
PostgresなDBに対して、スキーマ指定でDDL(SQLファイル)を流したいシーンがあったが、意外とスキーマ指定付きのパターンがネット情報に無かったので自分用にまとめたものです。
パターン1. psqlでスキーマ指定接続 & \iでSQLファイル実行
下記のようにpsql接続時にURL指定とし、optionsにてスキーマ(サーチパス)切り替えを行う
psql postgres://{user}@{host}?options=--search_path%3D{schema}
上記コマンド実行にてpsql接続後、下記のように \i にて実行したいコマンド(SQL)が記載されたファイルへのパスを与えればOK
\i {filepath}
パターン2. SQLファイル側にスキーマ指定しておく
これを回避したくないがために色々と情報を漁っていた...一応書いておきます。
SET search_path = {schema};
私が現在所属しているPJでは、実行したいSQLは自動生成されるため↑の情報が無い状態でSQLファイルが生成される。
よって、batファイルに上記のサーチパス切り替え&SQL実行のコマンドを閉じ込めることにした。
おまけ - Windows環境だとSJIS/UTF-8で文字化けしがち...対策はこれ
SQLファイルはUTF-8であるにも関わらず、Windowsにてpsql実行時にSJISにて読み込まれる(?)ため、文字化けが起きてしまい日本語コメントが入っている箇所などは上手く実行されない。
対策としては、SQLファイルの先頭にencoding UTF-8を指定する。
\encoding UTF-8