【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:条件分岐

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

スーパーソフトウエアの採用情報

あなたが活躍できるフィールドと充実した育成環境があります

blank
blank