====== tips ======
===== SQLの実行時間を計測する =====
psqlでtimingコマンドを実行すると、SQLの実行時間を計測できる
DB=> \timing
Timing is on.
コマンドを実行した後、SQLを発行すると実行時間が出力される
===== Postgresqlでテーブルの存在確認 =====
SELECT relname FROM pg_class WHERE relkind = 'r' AND relname = 'テーブル名';
pg_classには、テーブルや その他の列を保持しているすべての情報が格納されているので、「relkind = ‘r’ 」でテーブルに限定する。
==== relkindの意味 ====
* r:通常のテーブル
* i:インデックス
* S:シーケンス
* v:ビュー
* c:複合型
* s:特別
* t:TOAST テーブル
===== 全テーブル行数の取得 =====
select relname, n_live_tup from pg_stat_user_tables where schemaname='public';
===== PostgreSQLをJail内で動かす =====
非推奨です
ホスト(親)側で以下の設定
jail_sysvipc_allow="YES"
すぐに動かすなら
# sysctl security.jail.sysvipc_allowed=1
allow.sysvipc=1;
===== ReadonlyのRole(ユーザ)の作成 =====
==== 構文 ====
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[, ...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
==== 実例 ====
GRANT SELECT ON ALL TABLES IN SCHEMA public TO RoleName;
===== Readonlyモード =====
インスタンス、DB、ユーザ単位で参照モードに設定することが可能
==== インスタンス ====
postgresql.conf
default_transaction_read_only=on
service postgresql restart
==== DB ====
alter database DB名 set default_transaction_read_only = on;
==== ユーザ ====
alter role role名 set default_transaction_read_only = on;
===== Roleの権限を表示 =====
SELECT rolname, relname, crud
FROM (SELECT r.oid, r.rolname, c.relname,
((CASE WHEN has_table_privilege(r.oid, c.oid, 'INSERT') THEN 'C' ELSE ' ' END) ||
(CASE WHEN has_table_privilege(r.oid, c.oid, 'SELECT') THEN 'R' ELSE ' ' END) ||
(CASE WHEN has_table_privilege(r.oid, c.oid, 'UPDATE') THEN 'U' ELSE ' ' END) ||
(CASE WHEN has_table_privilege(r.oid, c.oid, 'DELETE') THEN 'D' ELSE ' ' END)) AS crud
FROM pg_roles r, pg_class c
WHERE c.relkind = 'r'
AND r.rolcanlogin = true
AND relnamespace IN
(SELECT oid
FROM pg_namespace
WHERE nspname NOT IN ('pg_catalog','information_schema','pg_toast'))
) t
ORDER BY rolname, relname
;
こんな感じで表示される
rolname | relname | crud
----------------+-----------------+------
postgres | table_name | CRUD
admin | table_name | CRUD
readonly | table_name | R
===== ログの言語を英語にする =====
postgresql.confのlc_messages を変更すれば治る
lc_messages = 'ja_JP.UTF-8'
↓
lc_messages = 'C'
CentOSなどでインストールした場合、OSのロケールが日本語のためPostgreSQLのログ出力も日本語でインストールされている
==== 確認方法 ====
psqlで
postgres=# show lc_messages;
lc_messages
-------------
ja_JP.UTF-8
(1 行)
postgres=# show lc_messages;
lc_messages
-------------
C
(1 行)
===== バージョンの確認 =====
psqlコマンドを確認する
# psql --version
version関数で確認する方法
db01=# SELECT version();
===== CentOS7で9.6をインストール =====
標準では9.2
==== repository登録 ====
# yum -y localinstall https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
==== インストール ====
# yum install postgresql96-server