PostgreSQLに付属のコマンドラインツールのpsqlでは、-c
オプションを利用することで、データベースへの接続とコマンド実行を1つのコマンドにまとめて実行することできる。
% psql -h localhost -U postgres -c 'show shared_buffers;' shared_buffers ---------------- 128MB (1 row)
ただし、-c
オプションでは1つのコマンド文字列しか指定することができない。複数のコマンドを実行しようとすると、最後のコマンドのみが実行されてしまう。
% psql -h localhost -U postgres -c 'show shared_buffers; show work_mem;' work_mem ---------- 4MB (1 row)
解決法
複数行のコマンドを実行したいときは、-c
オプションではなく、EOF
を利用して入力すればよい(この方法はpsqlのドキュメントにも記載されている。*1)。
% psql -h localhost -U postgres << EOF heredoc> show shared_buffers; heredoc> show work_mem; heredoc> EOF shared_buffers ---------------- 128MB (1 row) work_mem ---------- 4MB (1 row)
もしくは、echo
を使って実行したいコマンドをpsqlにパイプで渡せばよい。
% echo 'show shared_buffers; show work_mem;' | psql -h localhost -U postgres shared_buffers ---------------- 128MB (1 row) work_mem ---------- 4MB (1 row)
*1:PostgreSQL 8.4以降のドキュメントには記載がある( https://www.postgresql.org/docs/8.4/app-psql.html )。