InfraLab
POSTGRESQL40 cmd

PostgreSQL 運用チート集

psql、ロール権限、DDL、EXPLAIN、インデックス、パーティション、pg_dump、レプリケーション、pg_stat 系、VACUUM をまとめた PostgreSQL 運用集。

更新日
2026-05-14
参照範囲
公式ドキュメント / man page / 主要ベンダーCLI
対象実装
主要 Linux / BSD / ネットワーク機器 CLI の一般的な実装
免責
OS とバージョン差分は実環境で確認してください。

40 / 40

CommandDescriptionExampleCopy
psql -h -U -dホスト・ユーザー・DB を指定して接続する。psql -h db.example.com -U appuser -d appdb
psql connection URIURI 形式で 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 hostsslTLS 接続だけを許可する。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 ginJSONB や配列検索向け 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 concurrentlyindex を無停止で再構築する。REINDEX INDEX CONCURRENTLY app.idx_orders_customer_created;
Related