【PostgreSQL】psqlでのデータベース操作
PostgreSQLのCUIツールであるpsqlは、データベースを効率的に操作するための非常に強力な手段です。本記事ではCUI初心者やPostgreSQLの学習を始めたばかりの方を対象に、psqlの基本的な使い方や具体的なコマンド例を紹介します。
psqlとは
psqlは、PostgreSQLのCUI(文字ベースのユーザーインターフェース)ツールで、SQLコマンドを実行してデータベースを管理したり操作したりするために使用されます。軽量で高速、スクリプト化が可能という利点があり、PostgreSQLを効率よく操作するのに欠かせないツールです。
SQLコマンドの分類
SQLはRDBMSに対する標準の「問い合わせ言語」です。標準を完全に準拠しているRDBMSはありませんがPostgreSQLは下記の主要な部分に準拠しています。
- DDL(Data Definition Language)
データベースのテーブル等のオブジェクトを定義・変更します。- 主なコマンド
- CREATE
- ALTER
- DROP
- 主なコマンド
- DML(Data Manipulation Language)
データベース内のデータを操作します。データの挿入/追加/削除等を行います。- 主なコマンド
- SELECT
- INSERT
- UPDATE
- DELETE
- 主なコマンド
- DCL(Data Control Language)
データベースへのアクセス権限を制御します。トランザクション関連のコマンドも含まれます。
SQLコマンドの詳細は下記ブログを参照ください。
【参考ブログ】:データベースカテゴリ「PosygreSQL」
GUIとCUIの比較
PostgreSQLを操作するには、GUI(Graphical User Interface)とCUI(Character User Interface)の2つの方法があります。それぞれのメリットとデメリットを確認してみましょう。
GUI(pgAdmin4等)
- メリット
- 視覚的にデータを確認しやすい
- ボタン操作で機能を利用できるため初心者でも扱いやすい
- ER図やスキーマデザインツールなど、視覚化ツールが豊富
- デメリット
- 動作が重くなることがある
- 複雑な操作では効率が悪い場合がある
- CLIツール1に比べてスクリプトの自動化が難しい
CUI(例: psql等)
- メリット
- 軽量で高速に操作可能
- シェルスクリプトと組み合わせて操作を自動化できる
- ネットワーク経由でリモートのPostgreSQLに直接アクセス可能
- デメリット
- 初心者にとってはコマンドを覚える必要がある
- データの視覚化ができない
- GUIと比較して操作ミスが生じやすい
psqlの起動方法
代表的な2つの方法を紹介します。
スタートメニューからの起動
SQL Shell(psql)をクリックするとコマンドプロンプトが起動し、
①Server
②Database名
③Port番号
④Username
⑤Client Encording [SJIS]
を聞いてくるので適宜入力します。本例ではデータベース名以外はEnterを押下してでデフォルトを使用しています。接続が確立すると下図のように、接続プロンプト「sales_db=#」が表示されます。プロンプトの「=#」はスーパーユーザーで接続している事を示し、「=>」は一般ユーザーを示します。
ユーザー名とデータベース名を指定して起動
コマンドプロンプトから下図のように入力して接続します。このとき、ユーザー名にログイン属性が付与されていないとエラーメッセージが表示されて接続できません。
コマンド例):「psql -U ユーザー名 -d データベース名」 又は、「psql ユーザー名 データベース名」
psqlの基本コマンド
psqlコマンドオプション
psqlコマンドには様々なオプションを指定できます。ここでは、利用可能なオプションのいくつかを紹介します。
- -l
データベースの一覧を表示する
- -C ’コマンド’
引数で指定したコマンドを実行し結果を表示する - -f ファイ名
引数で指定したファイルの内容をSQLとして実行する - -h ホスト名
接続するPostgreSQLのホスト名を指定する
データベース接続後のバックスラッシュコマンド
データベース内のテーブルやインデックス等のオブジェクトを参照できるコマンドです。以下に例をし示します。
- \d
テーブル/インデックス/シーケンス/ビューの一覧を表示する
■バックスラッシュコマンド一覧
№ | コマンド | 機 能 |
---|---|---|
1 | \c | データベースの接続を変更する。 |
2 | \d | テーブル、ビュー、シーケンス、インデックスなどの詳細を表示する。 |
3 | \dt | テーブルの一覧を表示する。 |
4 | \dv | ビューの一覧を表示する。 |
5 | \di | インデックスの一覧を表示する。 |
6 | \ds | シーケンスの一覧を表示する。 |
7 | \df | 関数の一覧を表示する。 |
8 | \dn | 名前空間(スキーマ)の一覧を表示する。 |
9 | \l or \list | データベースの一覧を表示する。 |
10 | \i | ファイルからSQLコマンドを読み込んで実行する。 |
11 | \g | 現在のクエリを実行する。 |
12 | \q | psqlを終了する。 |
13 | \? | psqlのヘルプを表示する。 |
14 | \timing | コマンドの実行時間を表示する。 |
15 | \x | 拡張表示モードの切り替え。 |
psqlでSQLコマンドを実行する
先ずデータベースへ接続しテーブルの一覧を表示します。
C:\>psql sales_db postgres
psql (16.4)
"help"でヘルプを表示します。
sales_db=> \dt
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+------------+----------+----------
public | books | テーブル | postgres
public | bookstock | テーブル | postgres
public | customers | テーブル | postgres
public | customers2 | テーブル | postgres
public | customers3 | テーブル | postgres
public | sales | テーブル | postgres
(6 行)
sales_db=>
booksテーブルの構造と内容を参照してみます。3件のレコードが格納されているのが分かります。
sales_db=> \d books
テーブル"public.books"
列 | タイプ | 照合順序 | Null 値を許容 | デフォルト
------------+-----------------------------+----------+---------------+----------------------------------------
book_id | integer | | not null | nextval('books_book_id_seq'::regclass)
title | character varying(150) | | not null |
author | character varying(100) | | |
price | numeric(10,2) | | not null |
stock | integer | | | 0
created_at | timestamp without time zone | | | now()
インデックス:
"books_pkey" PRIMARY KEY, btree (book_id)
sales_db=> SELECT * FROM books;
book_id | title | author | price | stock | created_at
---------+-------------------+-----------+---------+-------+----------------------------
1 | PostgreSQL入門 | 鈴木 一郎 | 3000.00 | 2 | 2024-12-06 20:28:10.549144
3 | A5:SQL Mk-2の基礎 | 松原 正和 | 2800.00 | 10 | 2024-12-06 20:28:10.549144
6 | Python入門 | 田中 正 | 2500.00 | 5 | 2024-12-07 12:34:40.646229
(3 行)
sales_db=>
booksテーブルに1件のレコードを追加します。「books_id 9 psqlの基礎」が追加されました。
sales_db=# INSERT INTO public.books (
sales_db(# title, author, price, stock) VALUES (
sales_db(# 'psqlの基礎'::character varying, '山田 正'::character varying, '2600'::numeric, '5'::integer)
sales_db-# returning book_id;
book_id
---------
9
(1 行)
INSERT 0 1
sales_db=# SELECT * FROM books;
book_id | title | author | price | stock | created_at
---------+-------------------+-----------+---------+-------+----------------------------
1 | PostgreSQL入門 | 鈴木 一郎 | 3000.00 | 2 | 2024-12-06 20:28:10.549144
3 | A5:SQL Mk-2の基礎 | 松原 正和 | 2800.00 | 10 | 2024-12-06 20:28:10.549144
6 | Python入門 | 田中 正 | 2500.00 | 5 | 2024-12-07 12:34:40.646229
9 | psqlの基礎 | 山田 正 | 2600.00 | 5 | 2024-12-28 14:29:00.135625
(4 行)
sales_db=#
以上のように、psqlでバックスラッシュコマンドやSQLコマンドを使用できれば、GUIに比べ短時間で操作ができるようになります。
- CLI:(Command Line Interface ツール)は、コマンドラインインターフェイス上で動作するソフトウェアやツールのことを指します。 ↩︎
まとめ
各種コマンドを覚えてしまえば、psqlを使用した方が作業効率は格段に向上します。しかし誤りやすい面もあるので慎重に使用する必要があります。
頻繁にPostgreSQLを使用するならば、簡単なコマンドを徐々に覚えてpsqlを使用してみてはどうでしょうか? 業務効率は格段に向上していく筈です。