PostgreSQL¶
Installation¶
Commands¶
- connect use database form psql
psql <DB_NAME>psql -U <USER_NAME> <DB_NAME>
- exit database
\q - list databases
\l - connect database
\c <DB_NAME>\connect <DB_NAME> - list tables
\d\dt - show shemas
\d <TABLE_NAME>\dn - show table permission
\z <TABLE_NAME> - show view
\dv - show view definition
select definition from pg_views where viewname = '<VIEW_NAME>'; - show current user
select current_user; - show user roles
\du - show user info
select * from pg_user; - grant access to user
grant select, insert, update, delete on <TABLE_NAME> to <USER_NAME>;
- revoke access to user
revoke select, insert, update, delete on <TABLE_NAME>from <USER_NAME>;
References¶
cache hit ratioがよくない¶
- まずは
postgresql.confまわりでtuningshared_buffers- 単位: 8KB
- 目安: 2GB以下: 全メモリの20%, 32GB以下: 全メモリの25%, 32GB以上: 8GB, 全メモリの 1/4 - 1/2
- OSの上限値 (shmmax) を上げないと増やせないのでOSをいじれないRDSではそんなに増やせない
work_mem- 単位: KB
- 目安: 最初は32MB程度から始め、log_temp_filesで吐かれたログを見つつ、倍々に増やしていく, work_mem * connection最大数 が 全メモリの1/4を超えないぐらいにしておく
maintenance_work_mem- 単位: KB
- 目安: システムメモリの10%。最大1GB, もしVACUUMの問題があればもっと大きく
effective_cache_size- 単位: 8KB
- 目安: 全メモリの 1/2 程度
- ref: PostgresのRDSチューニング - Qiita
- tuneしても即座にcache_hit ratioには反映されないので,
pg_stat_reset()を実行して統計情報をリセットする
zabbix=# select datname, blks_hit * 100.0 / (blks_read + blks_hit) AS cache_hit, stats_reset from pg_stat_database where datname = 'zabbix';
datname | cache_hit | stats_reset
---------+---------------------+-------------------------------
zabbix | 78.4450092005849089 | 2020-07-26 18:50:13.592914+09
(1 row)
zabbix=# select pg_stat_reset();
pg_stat_reset
---------------
(1 row)
zabbix=# select datname, blks_hit * 100.0 / (blks_read + blks_hit) AS cache_hit, stats_reset from pg_stat_database where datname = 'zabbix';
datname | cache_hit | stats_reset
---------+---------------------+-------------------------------
zabbix | 99.8402555910543131 | 2020-08-17 08:32:21.216764+09
(1 row)
backup¶
pg_dump -cU $POSTGRES_USER $POSTGRES_DB' > `date +%Y%m%d-%H%M%S`_`hostname`_pg_dump_${POSTGRES_DB}.sqlpg_dump -cU $POSTGRES_USER $POSTGRES_DB' | gzip > `date +%Y%m%d-%H%M%S`_`hostname`_pg_dump_${POSTGRES_DB}.sql.gzsudo -u postgres pg_dumpall > `date +%Y%m%d-%H%M%S`_`hostname`_pg_dump.sqlsudo -u postgres pg_dumpall | gzip > `date +%Y%m%d-%H%M%S`_`hostname`_pg_dump.sql.gz
restore¶
cat backup.sql | psql -U $POSTGRES_USER