トップページ > コンテンツ > データベース関連メモ > PostgreSQL

用語説明

WAL PostgreSQLの全ての更新ログ
LSN WALを識別する番号。xlogid+xrecoff
タイムラインIDはPoint In Time Recovery(PITR)を実現するために実装された仕組みで、PITRが実行されるたびに値が1ずつ大きくなり
CHECKPOINT WALの内容のうち、ディスクに書き込みを終えたポイント。復旧時はCHEKPOINT以前のWALは無視して復旧できる
OID オブジェクトID
XID トランザクションID

主なフォルダや設定ファイル構成例

ディレクトリ 説明
/var /lib /pgsql /data postgresql.conf postgresの設定ファイル。showコマンドで設定値を見ることができる。setコマンドで設定値を設定することもできる(一部パラメータのみ)
pg_hba.conf 認証情報を設定するファイル
recovery.conf リカバリを行う際に作成するファイル
pg_log ログファイルの格納場所。.historyはどのようにタイムラインが移動したかの記録
pg_xlog WALファイルの格納場所。
base データベース本体の在処。ディレクトリ名称はデータベースのOID
archives WALアーカイブの格納場所。pgsql.confのarchive_commandで指定

※バージョンとかで微妙にパスは異なる。/etc/postgres/バージョン/main/か/var/lib/下を見る感じが多い。

コマンド類

データベースクラスタ作成

データベースクラスタ構築(パッケージからインストール。systemd系) postgresql-setup --initdb $PGDATA(/var/lib/pgsql/data)が生成される。ロケールは無効、文字コードはutf8を使うことが多いかも
データベースクラスタ構築(ソースコードからinstall) initdb --encoding=UTF8 --no-locale データベースクラスタを作成する場所
データベースクラスタ構築(Ubuntuの場合) pg_createcluster --start Postgreバージョン クラスタ名 クラスタ一覧を見る時はpg_lsclusters。削除する場合はpg_dropcluster --stop Postgreバージョンクラスタ名

起動停止系

起動 pg_ctl start
停止 pg_ctl stop
利用開始 psql -U ユーザ名 複数のデータベースクラスタがある場合は--portでポート番号を切り替える
利用終了 ¥q;
sqlファイルを指定して実行 ¥i 実行したいsql;
または
psql -f

ユーザ操作

ユーザの作成 ¥create user ユーザ名;
ユーザの切替 ¥connect - ユーザ名;
ロール一覧の表示 ¥du;
作成したロールの確認 select * from pg_pgroles;

スキーマ・データベース操作

スキーマを指定 set search_path="hogehoge"
データベースを作成 create database データベース名 encoding '文字エンコード名'; create databaseのラッパーのcreatedbを使うこともある
データベースを選択 ¥c データベース名;
データベースを確認 psql -l
または
¥l;

テーブル操作

テーブル作成 create table(
カラム名 データ型,
カラム名 データ型
);
テーブル構造を見る ¥d;
テーブル一覧を見る ¥dt;
データ検索 select 探したいもの from テーブル名 条件等; 文字列は''で囲うと良い。また、テーブル名は大文字を含む場合は""で囲う必要がある。
テーブルへの権限付与 grant アクセスの種類(select等) on テーブル名 to ユーザ名
テーブルから権限剥奪 revoke アクセスの種類(select等) on テーブル名 from ユーザ名

データのインポート・エクスポート

CSVからデータ投入 ¥copy テーブル名(カラム1,カラム2,...) from 'csvファイル名' with csv
データをCSVに出力 ¥copy テーブル名 出力ファイル名.csv csv

トランザクション処理

トランザクションの開始 begin;
トランザクションのコミット commit;
トランザクション処理をキャンセルして終了 rolllback;またはabort;
行ロック(排他ロック) SQL文 for update;
行ロック(共有ロック) SQL文 for share;
テーブルロック lock table テーブル名;

レプリケーション関連

概要 実行サーバ コマンド
プライマリとスタンバイの識別 ps auxでwal senderが動いているのがプライマリ。wal receiverが動いてるのがスタンバイ
接続中のスタンバイの一覧とその状況を確認 プライマリ側 psql -x -c "select * from pg_stat_replication"
スタンバイ側 psql -x -c "select * from pg_stat_wal_receiver"
FOさせる プライマリ側(擬似故障) pg_ctl -m immediate stop
スタンバイ側 pg_ctl promote

WAL関連

WALのlocation確認 プライマリー側 psql -x -c "SELECT * FROM pg_current_xlog_location()"
スタンバイ側 psql -x -c "SELECT * FROM pg_last_xlog_receive_location()"
現在のWALファイル名確認 psql -x -c "SELECT pg_walfile_name(pg_current_wal_lsn());"
現在のLSN確認 psql -x -c "SELECT pg_current_wal_lsn();"
WALの中身確認 pg_waldump

運用メンテナンス

やりたいこと コマンド 備考
文字コードを修正 postgresql.confのlc_messageの記述を変更することで文字コードを修正できる。
不要領域の回収 vacuum
実行時間を調べる explain,explain analyze等

バックアップ・リストア

バックアップの種類 コマンド例 備考
論理バックアップ(SQLファイル保存) pgdump データベース名 > バックアップ名
論理リストア psql データベース名 < dumpファイル
物理オンラインバックアップ pg_basebackup -D 出力先 -F tar -z
稼働中状態の時に予めtar形式でバックアップを取っておく例
物理オンラインリストア 1.データベースクラスタの削除 rm -r /var/lib/pgsql/data/*
2.basebackupした内容を展開
(2行のうちどちらかを実行で/var/lib/pgsql/data/相当を復元)
tar xvfz tarファイル 予めtarでバックアップしたものを展開する場合(/var/lib/pgsql/data/相当が保存できる)
pg_basebackup -h プライマリサーバのIPアドレス -p ポート番号 -D データの場所 -U レプリケーション用ユーザ 稼働系からデータを持ってくる場合の例
3.basebackup時点の古いWALは削除 rm -rf /var/lib/pgsql/data/pg_wal/*
4,最新のWALファイルコピー cp -p 最新のアーカイブディレクトリ /var/lib/postgresql/pg_xlog
5.recovery.confの作成 vi /var/lib/pgsql/data/recovery.conf restore_commandでWALファイルを指定
6.DB再開 pg_ctl start
物理オフラインバックアップ tar zcf バックアップ名.tar.gz /var/lib/pgsql
物理オフラインリストア cd /
tar zxf バックアップファイル
※pg_basebackupの主なオプションついてはこちら参照。

pg_control ファイルの内容を表示する pg_controldata -D /var/lib/pgsql/data 以下のような情報が閲覧できる。
・WALの開始時点(CHECK POINT)
・タイムラインID
旧プライマリサーバと新プライマリサーバの差分を同期 pg_rewind 旧プライマリサーバが新スタンバイサーバとして追従する場合に使用する。Postgresql9.5以降。

その他

やりたいこと コマンド 備考
ヘルプを開く ¥h; postgres=#¥?
最終更新:2021年11月03日 19:38