POSTGRESQL40 cmd
PostgreSQL 運用チート集
psql、ロール権限、DDL、EXPLAIN、インデックス、パーティション、pg_dump、レプリケーション、pg_stat 系、VACUUM をまとめた PostgreSQL 運用集。
- 更新日
- 2026-05-14
- 参照範囲
- 公式ドキュメント / man page / 主要ベンダーCLI
- 対象実装
- 主要 Linux / BSD / ネットワーク機器 CLI の一般的な実装
- 免責
- OS とバージョン差分は実環境で確認してください。
40 / 40
| Command | Description | Example | Copy |
|---|---|---|---|
psql -h -U -d | ホスト・ユーザー・DB を指定して接続する。 | psql -h db.example.com -U appuser -d appdb | |
psql connection URI | URI 形式で TLS 付き接続する。 | psql "postgresql://appuser@db.example.com:5432/appdb?sslmode=require" | |
\l | データベース一覧を表示する。 | appdb=> \l | |
\du | ロール一覧と属性を表示する。 | appdb=> \du | |
\dt | テーブル一覧を表示する。 | appdb=> \dt public.* | |
\d+ table | テーブル定義とサイズを確認する。 | appdb=> \d+ public.orders | |
\x \timing | 拡張表示と実行時間表示を有効化する。 | appdb=> \x on
appdb=> \timing on | |
\watch | クエリを周期実行する。 | appdb=> SELECT now(), count(*) FROM jobs WHERE state = 'running';
appdb=> \watch 5 | |
CREATE ROLE | ログイン可能ロールを作成する。 | CREATE ROLE appuser LOGIN PASSWORD 'change-me'; | |
ALTER ROLE | ロールの既定設定を変更する。 | ALTER ROLE appuser SET statement_timeout = '5s'; | |
GRANT REVOKE | 権限を付与・剥奪する。 | GRANT SELECT, INSERT ON ALL TABLES IN SCHEMA public TO appuser;
REVOKE DELETE ON public.orders FROM appuser; | |
pg_hba.conf hostssl | TLS 接続だけを許可する。 | hostssl appdb appuser 10.0.0.0/8 scram-sha-256 | |
postgresql.conf memory | 主要メモリ設定を調整する。 | shared_buffers = 4GB
effective_cache_size = 12GB
work_mem = 64MB | |
CREATE SCHEMA | アプリ用スキーマを作成する。 | CREATE SCHEMA IF NOT EXISTS app AUTHORIZATION appuser; | |
CREATE TABLE | 主キー付きテーブルを作成する。 | CREATE TABLE app.orders (id bigserial PRIMARY KEY, customer_id bigint NOT NULL, created_at timestamptz NOT NULL DEFAULT now()); | |
ALTER TABLE ADD COLUMN | 列を追加する。 | ALTER TABLE app.orders ADD COLUMN status text NOT NULL DEFAULT 'pending'; | |
CREATE EXTENSION | 拡張を有効化する。 | CREATE EXTENSION IF NOT EXISTS pg_stat_statements; | |
EXPLAIN ANALYZE BUFFERS | 実行時間とバッファ使用量を確認する。 | EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM app.orders WHERE customer_id = 42; | |
EXPLAIN VERBOSE | 出力列や内部式を含めて計画を見る。 | EXPLAIN (VERBOSE, COSTS, SETTINGS) SELECT count(*) FROM app.orders; | |
statement_timeout | 重いクエリを安全に試す。 | SET statement_timeout = '3s'; SELECT * FROM app.events ORDER BY created_at DESC LIMIT 100; | |
CREATE INDEX btree | 等価・範囲検索向け btree index。 | CREATE INDEX CONCURRENTLY idx_orders_customer_created ON app.orders (customer_id, created_at DESC); | |
CREATE INDEX gin | JSONB や配列検索向け GIN index。 | CREATE INDEX CONCURRENTLY idx_events_payload_gin ON app.events USING gin (payload jsonb_path_ops); | |
CREATE INDEX gist | 幾何・範囲型向け GiST index。 | CREATE INDEX idx_bookings_period_gist ON app.bookings USING gist (period); | |
CREATE INDEX brin | 時系列巨大テーブル向け BRIN index。 | CREATE INDEX idx_logs_created_brin ON app.logs USING brin (created_at); | |
partial index | 条件付き index で小さく保つ。 | CREATE INDEX CONCURRENTLY idx_jobs_ready ON app.jobs (priority, id) WHERE state = 'ready'; | |
expression index | 式の結果に index を作る。 | CREATE INDEX CONCURRENTLY idx_users_lower_email ON app.users (lower(email)); | |
partition table | 月次レンジパーティションを作成する。 | CREATE TABLE app.logs_2026_05 PARTITION OF app.logs FOR VALUES FROM ('2026-05-01') TO ('2026-06-01'); | |
VACUUM ANALYZE | 不要タプル回収と統計更新を行う。 | VACUUM (ANALYZE, VERBOSE) app.orders; | |
autovacuum settings | テーブル単位で autovacuum を調整する。 | ALTER TABLE app.events SET (autovacuum_vacuum_scale_factor = 0.02, autovacuum_analyze_scale_factor = 0.01); | |
pg_dump custom | カスタム形式でバックアップする。 | pg_dump -h db.example.com -U postgres -d appdb -Fc -f appdb.dump | |
pg_restore jobs | 並列復元する。 | createdb appdb_restore && pg_restore -d appdb_restore -j 4 appdb.dump | |
pg_basebackup | 物理ベースバックアップを取得する。 | pg_basebackup -h primary.example.com -U repl -D /var/lib/postgresql/16/main -Fp -Xs -P -R | |
standby.signal | スタンバイとして起動する。 | touch /var/lib/postgresql/16/main/standby.signal | |
primary_conninfo | ストリーミングレプリカの接続先を設定する。 | primary_conninfo = 'host=primary.example.com port=5432 user=repl password=secret application_name=standby1' | |
pg_stat_replication | レプリケーション遅延を確認する。 | SELECT application_name, state, sync_state, write_lag, replay_lag FROM pg_stat_replication; | |
pg_stat_activity | 実行中セッションを確認する。 | SELECT pid, usename, state, wait_event_type, query FROM pg_stat_activity WHERE state <> 'idle'; | |
pg_stat_statements | 累積で重い SQL を探す。 | SELECT calls, mean_exec_time, rows, query FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 10; | |
pg_locks | ロック待ちを確認する。 | SELECT pid, locktype, relation::regclass, mode, granted FROM pg_locks WHERE NOT granted; | |
terminate backend | 問題セッションを終了する。 | SELECT pg_terminate_backend(12345); | |
reindex concurrently | index を無停止で再構築する。 | REINDEX INDEX CONCURRENTLY app.idx_orders_customer_created; |