【PostgreSQL】psqlでCLTからPostgreSQLへの接続・操作
こんにちは、技術部のTです。 これまでSQL実行時にはGUIツールを使用していましたが、業務でCLTから操作を行う機会があったので調べてみました。
psqlとは
ドキュメントには以下のように記載されています。
psqlとはPostgreSQLのターミナル型フロントエンドです。 対話的に問い合わせを入力し、それをPostgreSQLに対して発行して、結果を確認することができます。 また、ファイルから入力を読み込むことも可能です。 さらに、スクリプトの記述を簡便化したり、様々なタスクを自動化したりする、いくつものメタコマンドとシェルに似た各種の機能を備えています。
PostgreSQLへ接続する
psqlを使ってPostgreSQLへ接続するにはコマンドラインから以下のように実行します。
$ psql -h ホスト名 -p ポート番号 -U ロール名 -d データベース名
それぞれ入力すると以下の通りです。
$ psql -h localhost -p 5432 -U postgres -d postgres
SQLを実行する
接続ができたら「postgres=#」 の後にSQL文を入力して実行可能です。
$ postgres=# SQL文;
改行も可能でセミコロンを入力するまでSQLは実行されません。
便利な機能
メタコマンド
psql内で入力されたコマンドのうち、バックスラッシュで始まるものはpsql自身が実行するpsqlのメタコマンドとして扱われます。
以下メタコマンドの一部を紹介します。詳しくはドキュメントをご確認ください。
\q:psqlを終了してPostgreSQLとの接続を切断する
\l:データベースの一覧表示
\dt:テーブル一覧の表示
\i:ファイルを読み込んで処理を実行
\o:問い合わせ結果をファイルに出力
\pset format csv:実行結果をCSV形式で出力
\set:変数の設定
\if:条件分岐
\l:データベースの一覧表示
\dt:テーブル一覧の表示
\i:ファイルを読み込んで処理を実行
\o:問い合わせ結果をファイルに出力
\pset format csv:実行結果をCSV形式で出力
\set:変数の設定
\if:条件分岐
SQLファイルを読み込んで実行する
上記のメタコマンドやpsqlの-fオプションによってSQLファイルを読み込んで実行できます。
テーブル作成
$ postgres=# create table users (id integer, name character varying(10), age integer);
$ CREATE TABLE
SQLファイルの内容
select * from users;
insert into users values (1, '太郎', 30);
insert into users values (2, '二郎', 28);
insert into users values (3, '三郎', 26);
select * from users;
実行するコマンド
$ psql -h localhost -p 5433 -U postgres -d postgres -f C:\workdir\postgres\postgres.sql
実行結果
id | name | age
----+------+-----
(0 行)
INSERT 0 1
INSERT 0 1
INSERT 0 1
id | name | age
----+------+-----
1 | 太郎 | 30
2 | 二郎 | 28
3 | 三郎 | 26
(3 行)
また、シェルスクリプトのようにSQLファイル内で変数を使用したりif文での分岐も可能です。
SQLファイルの内容
\set age 28
select
exists(select 1 from users where age = :age) as is_user
\gset
\if :is_user
select name from users where age = :age;
\else
\echo 'is not user'
\endif
実行結果
name
------
二郎
(1 行)
最後に
簡易的な紹介となりましたので興味を持たれたら公式ドキュメントも確認してみてください。 最後までお読みいただきありがとうございました。
参考
https://www.postgresql.jp/document/14/html/app-psql.html
関連記事
- 2023-03-28
- テクノロジー