TSMH’s blog

思考の跡を残す、個人のメモ

PostgreSQL 基本コマンド一覧

PostgreSQL 基本コマンド一覧(psql 辞書)

PostgreSQL🐘を触り始めたとき、
「とりあえずこれだけ分かれば作業できる」
という 基本コマンドを辞書形式でまとめました。

psql に入る

psql に接続

psql(PostgreSQLの対話型ツール)に接続します。
postgres はインストール時に作成されたユーザー名で、 この後パスワードの入力を求められます。

psql -U postgres
  • -U:接続するユーザー名を指定
  • 実行後、設定したパスワードを入力して接続
  • 接続できない場合は -h localhost -p 5432 を追加

データベース関連

データベース一覧を見る

\l

データベースを作成

新しいデータベースを作成します。

CREATE DATABASE sample_db;

データベースに接続(切り替え)

\c sample_db

現在接続中のDBを確認

SELECT current_database();

データベースを削除

DROP DATABASE sample_db;

※接続中のDBは削除できません。

ユーザー・権限

ユーザー一覧

\du

ユーザー作成

CREATE USER sample_user WITH PASSWORD 'password';

権限付与

GRANT ALL PRIVILEGES ON DATABASE sample_db TO sample_user;

テーブル関連

テーブル一覧

※ psql専用コマンド

\dt

テーブル作成

よく使うデータ型を含めたサンプルテーブルです。

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(255),
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
よく使うデータ型
  • SERIAL:自動採番の整数(主キーでよく使用)
  • INT:整数値
  • VARCHAR(n):文字列(最大 n 文字)
  • BOOLEAN:真偽値(true / false)
  • TIMESTAMP:日時
よく使う制約・DEFAULT
  • PRIMARY KEY:主キー(行を一意に識別する)
  • NOT NULL:NULL(未入力)を許可しない
  • DEFAULT TRUE:値が指定されなかった場合、true を自動で設定
  • DEFAULT CURRENT_TIMESTAMP:現在の日時を自動で設定

制約の指定例(複合UNIQUE)

複数のカラムの組み合わせで、重複を防ぎたい場合の例です。

CREATE TABLE attendees (
    id SERIAL PRIMARY KEY,
    event_id INT NOT NULL,
    email VARCHAR(255) NOT NULL,

    CONSTRAINT unique_event_email
        UNIQUE (event_id, email)
);
  • CONSTRAINT:制約に名前を付ける
  • UNIQUE (event_id, email):同じ組み合わせの重複を防ぐ

テーブル構造を見る

\d users

\d+ users を使うと、カラムのコメントやインデックスなど、
より詳細な情報を確認できます。

テーブル削除

DROP TABLE users;

データ操作(CRUD)

データ追加

INSERT INTO users (name, email)
VALUES ('Taro', 'taro@example.com');

データ取得

SELECT * FROM users;

条件付き取得

SELECT * FROM users WHERE id = 1;

データ更新

UPDATE users
SET name = 'Hanako'
WHERE id = 1;

データ削除

DELETE FROM users WHERE id = 1;

日時・現在時刻

現在時刻を取得

SELECT NOW();

今日の日付

SELECT CURRENT_DATE;

トランザクション

トランザクションは「データを守る保険」のようなものです。

取り消し(ROLLBACK)

BEGIN;
UPDATE users SET name = 'Test' WHERE id = 1;
ROLLBACK; -- 取り消し

確定(COMMIT)

BEGIN;
UPDATE users SET name = 'Test' WHERE id = 1;
COMMIT; -- 確定

便利コマンド

縦表示(結果が見づらい時)

\x

実行時間を表示

\timing

コマンド履歴を使う

  • / キー

\x\timing はトグル形式のため、
現在の状態を確認する専用コマンドはありません。
実行時のメッセージや SELECT の表示結果で確認します。

CSVのエクスポート(\copy)

\copy (SELECT * FROM users) TO 'users.csv' WITH CSV HEADER;

SELECT結果をCSVとして出力できます。
テストデータの確認や、データ共有時によく使います。

表示が長いときのページ操作(pager)

大量のSELECT結果などがページ送り表示になっている場合は、以下のキー操作が使えます。
※環境によっては pager が無効で、ページ送り自体が起きないことがあります。

  • space:次のページへ
  • b:前のページへ
  • G:一番下(最後のページ)へ
  • g:一番上へ
  • q:表示を終了して psql に戻る

pager の確認・切り替え

\pset pager
\pset pager on
\pset pager off

\? などのヘルプ表示では、ページ移動キーが効かないことがあります。

psql を終了する

\q

よくある注意点

  • \ で始まるのは psql専用コマンド
  • SQL文は ; が必要
  • exit では終了できない

困ったときのヘルプ

  • \?:psql専用コマンド(\l, \q など)の一覧・ヘルプ
  • \h:SQL文(SELECT, CREATE など)のヘルプ

「コマンドは合っているはずなのに…」という時は、
まずここを見ると解決することがあります。

公式ドキュメント / 参考リンク

PostgreSQL の公式ドキュメント(日本語版)は以下です。
基本コマンドだけでなく、SQL構文や関数、設定など幅広くカバーされています。

PostgreSQL 18 日本語ドキュメント(公式)

psql専用コマンドとSQL文の違い

項目 psql専用コマンド SQL文
開始記号 \(バックスラッシュ) なし
終了記号 改行(Enter) ;
主な用途 接続・一覧表示・設定 データ操作・定義
\dt, \c dbname, \q SELECT * FROM users;