psql の主要機能(Ubuntu 上)
【概要】
psql は,PostgreSQL データベースを操作するコマンドラインツールである.本ページでは,Ubuntu 上での psql の起動・終了,ロール・テーブル空間・データベース・スキーマの管理,SQL の実行とファイル出力,データの入出力について解説する.Windows 上での操作は,別ページ »を参照.
【目次】
- 1. PostgreSQL のインストール手順
- 2. psql の基本操作ガイド
- 3. psql の起動と終了手順
- 4. PostgreSQL のロール管理
- 5. テーブル空間の管理
- 6. データベースの管理
- 7. スキーマの管理
- 8. デフォルト設定の構成
- 9. SQL の実行とファイル出力
- 10. psql の拡張オプション
- 11. テーブルデータの入出力
【関連する外部ページ】
- PostgreSQL 公式ページ: https://www.postgresql.org/
- カーネル設定: https://www.postgresql.jp/document/18/html/kernel-resources.html
- インストールガイド: https://www.postgresql.jp/document/18/html/installation.html
【サイト内の関連ページ】
1. PostgreSQL のインストール手順
- Windows 環境における PostgreSQL 18,pgAdmin 4,PostGIS 3 のインストール方法と psql によるデータベース操作: 別ページ »
- Ubuntu 環境での PostgreSQL 18,pgAdmin 4,PostGIS 3 のインストール手順: 別ページ »
2. psql の基本操作ガイド
- psql --version: psql のバージョン情報を表示
- psql: psql を起動
- \copy: テーブルデータのインポート・エクスポート
- \d, \d+: テーブルおよび関連情報を表示
- \db, \db+: テーブル空間の情報を表示
- \c: データベースへの接続と現在の接続状態を確認
- \l: データベース一覧を表示
- \q: psql を終了
3. psql の起動と終了手順
Ubuntu における psql の起動と終了方法
Ubuntu のサービスアカウント postgres と peer 認証を使い,PostgreSQL の psql を操作する.
- 「sudo -u postgres psql」コマンドを実行する.
sudo -u postgres psql
- 「\c」コマンドで,現在使用中のロール名とデータベース名を確認する.
\c
- 「\l」コマンドでデータベースの一覧を確認する.利用可能なデータベースが表示されることを確認する.
\l
- 「\q」コマンドで psql を終了する.
4. PostgreSQL のロール管理
ロール,既定データベース,現在のロールの確認方法
- 「sudo -u postgres psql」を実行する.
- 次のコマンドでロール一覧と現在の接続情報を確認する.
\c \du
新規ロールの作成とデータベース管理者権限の付与手順
次の手順で,新しいロールを作成し,PostgreSQL データベース管理者権限を付与する.
- ロール名: testuser
- パスワード: hoge$#34hoge5(実際の運用では,これとは異なる強固なパスワードを設定する)
- ロールの作成と確認手順
参考: https://www.postgresql.org/docs/current/sql-createrole.html
create role testuser with superuser createdb createrole login encrypted password 'hoge$#34hoge5'; \du \q
- 新規作成したロールでの動作確認
Ubuntu 環境では,次の「Ubuntu における追加設定」を確認する.
psql -U testuser -d postgres \q
Ubuntu における追加設定
パスワード認証を有効にするため,pg_hba.conf を編集する.設定ファイルの場所はバージョンにより異なる(例:/etc/postgresql/<バージョン>/main/pg_hba.conf).次の1行を追加する.現行の PostgreSQL では scram-sha-256 認証が既定であり,これを指定する(md5 を指定した場合も,パスワードが scram 形式で保存されていれば自動的に scram-sha-256 が使われる).
local all all scram-sha-256
pg_hba.conf の変更を反映するため,PostgreSQL サーバを再起動する.エラーメッセージが表示されないことを確認する(<バージョン>には,導入した PostgreSQL のメジャーバージョンを指定する).
sudo pg_ctlcluster <バージョン> main restart
sudo pg_ctlcluster <バージョン> main status
作成したロールで psql を起動し,「\c」コマンドで現在の接続情報を確認する.データベースは「-d postgres」オプションで postgres を指定する.
psql -U testuser -d postgres
\c
\q
ロールの削除方法
ロールを削除する場合は,psql で「drop role testuser;」コマンドを実行する.
5. テーブル空間の管理
テーブル空間の一覧表示
psql で「\db+」コマンドを実行し,テーブル空間の一覧を表示する.
\db+
Ubuntu でのテーブル空間作成手順
Ubuntu で次の仕様のテーブル空間を作成する.
- テーブル空間名: mytablespace
- 所有者: testuser
- 保存パス: /var/sqltable1
- テーブル空間の作成手順
次のコマンドを実行する.「sudo chown -R postgres /var/sqltable1」の postgres は,Ubuntu のサービスアカウント名である.
sudo mkdir /var/sqltable1 sudo chown -R postgres /var/sqltable1 sudo chmod 700 /var/sqltable1 psql -U testuser -d postgres create tablespace mytablespace owner testuser location '/var/sqltable1'; \q
- 設定の確認
psql -U testuser -d postgres \db+ \q
デフォルトテーブル空間の確認
空の場合は「pg_default」が使用される.
show default_tablespace;
デフォルトテーブル空間の変更方法
この設定は psql の終了時にリセットされる.
show default_tablespace;
set default_tablespace to mytablespace;
show default_tablespace;
一時テーブル用テーブル空間の確認
参考: https://www.postgresql.jp/document/18/html/manage-ag-tablespaces.html
show temp_tablespaces;
一時テーブル用テーブル空間の変更
一時テーブル用テーブル空間を次のように設定する.
- テーブル空間名: mytablespace
「set temp_tablespaces to ...;」で一時テーブル用テーブル空間を変更し,「show temp_tablespaces;」で設定を確認する.この設定は psql の終了時にリセットされる.
set temp_tablespaces to mytablespace;
show temp_tablespaces;
6. データベースの管理
データベース一覧の表示
「\l+」コマンドですべてのデータベースの詳細情報を確認できる.
\l+
新規データベースの作成手順
参考: https://www.postgresql.jp/document/18/html/manage-ag-createdb.html
次の仕様でデータベースを作成する.
- データベース名: mydb
- 所有者: testuser
- 使用テーブル空間: mytablespace
- 文字エンコーディング: UTF8
- データベースの作成
create database mydb owner testuser tablespace mytablespace encoding 'UTF8';
- 設定の確認
「-d mydb」で新規作成したデータベースを指定し,「\l+」ですべてのデータベースの詳細情報を確認する.
psql -U testuser -d mydb \l+
現在の接続データベースの確認
「\c」コマンドで,現在使用中のデータベース名とロール名を確認できる.
\c
接続データベースの切り替え
「\c mydb」コマンドで,使用するデータベースを mydb に切り替える.
\c
\c mydb
\c
7. スキーマの管理
スキーマ一覧の表示
「\dn+」コマンドですべてのスキーマの詳細情報を表示する.
\dn+
新規スキーマの作成手順
次の仕様でスキーマを作成する.
- スキーマ名: myschema
- 使用データベース: mydb
- 所有者: testuser
- スキーマの作成
create schema myschema;
- 設定の確認
「\dn+」ですべてのスキーマの詳細情報を確認する.
\dn+
現在のスキーマの確認
「show search_path;」コマンドで,現在のスキーマを表示する.
show search_path;
現在のスキーマの変更
「set search_path to myschema;」コマンドで,現在のスキーマを myschema に変更する.「show search_path;」コマンドで設定を確認する.この設定は psql の終了時にリセットされる.
show search_path;
set search_path to myschema;
show search_path;
8. デフォルト設定の構成
- デフォルトのロール名とデータベース名の設定
$HOME/.bashrc に次の2行を追加する.
export PGDATABASE=mydb export PGUSER=testuser
設定後,「source $HOME/.bashrc」を実行して反映させる.
- デフォルトのテーブル空間,一時テーブル用テーブル空間,スキーマの設定
$HOME/.psqlrc ファイルに次の3行を追加する(ファイルが存在しない場合は新規作成する).
set default_tablespace to mytablespace; set temp_tablespaces to mytablespace; set search_path to myschema;
9. SQL の実行とファイル出力
テーブルの定義とデータ登録
「\dt+」コマンドで,すべてのテーブルの詳細情報を表示する.
create table commodity (
type integer primary key not null,
name text not null,
price integer);
insert into commodity values( 1, 'apple', 50 );
insert into commodity values( 2, 'orange', 20 );
insert into commodity values( 3, 'strawberry', 100 );
insert into commodity values( 4, 'watermelon', 150 );
insert into commodity values( 5, 'melon', 200 );
insert into commodity values( 6, 'banana', 100 );
\dt+
SQL クエリの実行
select * from commodity;
実行結果の例:
type name price
---- ---------- -----
1 apple 50
2 orange 20
3 strawberry 100
4 watermelon 150
5 melon 200
6 banana 100
実行画面:
10. psql の拡張オプション
データベース一覧の取得
「psql -U testuser -l」コマンドでもデータベース一覧を表示できる.
SQL 実行結果のファイル出力
psql 起動時に「-L <ファイル名>」オプションを指定する.
SQL ファイルの実行
psql 起動時に「-f <ファイル名>」オプションを指定する.
11. テーブルデータの入出力
テーブルデータのインポート・エクスポートには,PostgreSQL の copy コマンドを使用する.Windows 環境でファイルを扱う際は,パス中のバックスラッシュに注意する.
- インポートの例
copy WORK from E'd:\\KEN_ALL_UTF8.csv' with csv;バックスラッシュを含むため,文字列の前にエスケープ文字列を示す「E」を付ける.
- エクスポートの例
copy ZIP2 to E'C:\\data\\zip.csv' with CSV;バックスラッシュを含むため,文字列の前にエスケープ文字列を示す「E」を付ける.出力先のディレクトリに書き込み権限がない場合,「ERROR: could not open file ... for writing: Permission denied」というエラーが発生するため注意する.