インフラエンジニアXの備忘

とある企業のシステム部門のインフラエンジニアです。忘れっぽい自分のメモ書きとしてこのブログを使用します。

Postgresqlコマンドメモ

Postgresql関連のコマンドメモ


■個別データベースvacuum

vacuumdb -v -z hogedb
オプション
-v 詳細を表示
-z analize


■全データベースvacuum

vacuumdb -a -z -h localhost
オプション
-a すべてのデータベース
-z analize
-h ホストを指定


■個別データベースdump

pg_dump hogedb > /tmp/hogedb.dump 取得先の領域やパーミッションに注意

dumpしてgzip圧縮
pg_dump hogedb | gzip - > /tmp/hogedb.out.gz


■個別データベースdumpファイルからのリストア

psql hogedb_dev < /tmp/hogedb.dump
cat /tmp/hogedb.dump | psql -f - hogedb_dev

圧縮したdumpファイルから個別リストア
zcat /tmp/hogedb.out.gz | psql -f - hogedb_dev


■全データベースdump

pg_dumpall > hoge.out

dumpallしてgzip圧縮
pg_dumpall -h localhost | gzip - > /tmp/dumpall.out.gz


■全データベースリストア

zcat /tmp/dumpall.out.gz | psql -f -


■DBをドロップ

dropdb hogedb


■DBを新規作成

createdb hogedb --encoding=EUC_JP
オプション
-E と --encoding=encodingは同じ


■DBを複製(ownerやencodingを含めてコピーする。)

createdb -T hogedb hogedb_dev
オプション
-T と --template=templateは同じ
DBのテンプレートを指定する。=コピーする。


■調査系のselect文

データベース毎のデータ容量を取得するコマンド
select datname, pg_size_pretty(pg_database_size(datname)) from pg_database;
    datname    | pg_size_pretty
---------------+----------------
 postgres      | 3824 kB
 template0     | 3656 kB
 testdb        | 4056 kB
 template1     | 3824 kB
 hogedb      | 1570 MB
(5 rows)


データベースのテーブル毎のデータ容量を取得するコマンド
SELECT relname, reltuples, (relpages / 128) as mbytes, (relpages * 8192.0 / (reltuples + 1e-10)) as average_row_size FROM pg_class ORDER BY mbytes DESC;


PostgreSQL全機能リファレンス (アドバンストリファレンスシリーズ)

PostgreSQL全機能リファレンス (アドバンストリファレンスシリーズ)