OSS-DB Silver
OSS-DBは色々なものがありますが、商用データベースとの連携に優れ、エンタープライズシステムでも多くの導入実績があるのが「PostgreSQL」です。
OSS-DB Silverは「PostgreSQL 11」に関する能力を問う資格です。
試験で問われる範囲は以下の通りです。
分類 | 説明 |
---|---|
一般知識(16%) | OSS-DBの一般的特徴、リレーショナルデータベースに関する一般知識 |
運用管理(52%) | インストール、ツールの使い方、設定ファイル、バックアップ方法、運用管理作業 |
開発/SQL (32%) | SQLコマンド、組み込み関数、トランザクションの概念 |
これらから50題出題され、65%程度の正答率で合格となります。
今回は運用管理の中から基本的な運用管理について説明します。
Sec 7. 基本的な運用管理
データベースユーザの追加/削除/変更
-
追加:
createuser
-
削除:
dropuser
-
変更:
ALTER USER
ALTER USER ユーザ名 [[WITH] SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | LOGIN | NOLOGIN | PASSWORD 'パスワード' | VAID UNTIL '日付'] ALTER USER ユーザ名 RENAME TO 新しいユーザ名
ALTER USER
はユーザの作成権限を持つユーザで実行する必要がある
VACUUM, ANALYZE
-
VACUUM
- 前提:PostgreSQLは複数のユーザからのトランザクションを同時に実行するため、MVCC(Multi-Version Concurrency Control)を実装している。PostgreSQLのMVCCでは追記型を採用しており、不要領域の回収が必要
- 補足:追記型は読み込みロックと書き込みロックが同時に発生しない形
- 途中でコミットされた場合に、ロックの獲得が競合しないようになっている反面、追記が行われる前のデータに関しては不要領域となる。
→これを解放するのがVACUUM
VACUUM [FULL] [VERBOSE] [テーブル名]
VACUUM
の実行中は、ほとんどのSQLを通常どおりに実行可能VACUUM FULL
を実行すると、テーブルの内容を新しいファイルに書き換えて、不要領域を物理的にディスクから削除する。
→実行中は、対象のテーブルを排他ロックするので他のクライアントからの処理はできない。VACUUM
でテーブルを指定しなかった場合は、データベース内の全てのテーブルに対して実行される。VERBOSE
を指定すると、実際に削除した領域などの詳細情報を見ることが可能。標準エラー出力に出力される。
-
ANALYZE
-
SQLはデータベースに格納されているデータの統計情報に基づいて実行される。
この統計情報を更新するのがANALYZE
-
ANALYZE [テーブル名]
-
特定の列を指定して実行可能。また、対象となるテーブルからランダムにサンプリングして統計情報を更新するため、巨大なテーブルであっても、短時間で解析可能。
-
-
VACUUM ANALYZE
-
VACUUM ANALYZE [テーブル名]
VACUUM
とANALYZE
を同時に実行する(テーブル名を省略した場合は全てのテーブルが対象となる)。 -
-
自動バキューム
- 定期的に行う訳ではなく、不要領域が増えた段階で実行
- postgresql.confの
autovacuum
で設定する
システム情報取得関数
version()
: サーバで稼働しているPostgreSQLのバージョンcurrent_database()
: 現在接続しているデータベースcurrent_user
,user
: 現在のユーザ(カッコは不要)
情報スキーマ、システムカタログ
-
情報スキーマ(
information_schema
):SQLの標準規格で規定- 例)
SELECT * FROM information_schema.enabled_roles; role_name --------------------------- hfuku pg_database_owner pg_read_all_data pg_write_all_data pg_monitor pg_read_all_settings pg_read_all_stats pg_stat_scan_tables pg_read_server_files pg_write_server_files pg_execute_server_program pg_signal_backend dbuser (13 rows)
-
システムカタログ(
pg_catalog
):データベース管理ソフトウェア固有- 例)
SELECT * FROM pg_roles WHERE rolcanlogin IS TRUE; rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig | oid ---------+----------+------------+---------------+-------------+-------------+----------------+--------------+-------------+---------------+--------------+-----------+------- user1 | t | t | t | t | t | t | -1 | ******** | | t | | 10 dbuser | f | t | t | t | t | f | -1 | ******** | | f | | 16384 (2 rows)
- PostgreSQLのシステムカタログには、通常先頭に「pg_」がつく
テーブル単位の権限
-
GRANT : テーブルの権限の設定に使用する
GRANT {{SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER } [, ...] | ALL [PRIVILEGES]} ON {[TABLE] テーブル名 [, ...]} TO {ユーザ名 | PUBLIC } [, ...] [WITH GRANT OPTION]
SELECT
権限を付加することで、COPY TO STDOUT
を使用できるようになる。
-
REVOKE : テーブルに設定されたアクセス権限を取り除く
REVOKE {{SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER } [, ...] | ALL [PRIVILEGES]} ON {[TABLE] テーブル名 [, ...]} TO {ユーザ名 | PUBLIC } [, ...]
-
\dp
,\z
: テーブルの権限の確認- どちらのコマンドも同様に各テーブルのアクセス権限を確認可能
- 表示される権限の種類
r
: SELECTw
: UPDATEa
: INSERTd
: DELETED
: TRUNCATE(全ての行の削除(テーブルを消せる訳ではない))x
: REFERRENCESt
: TRIGGER/yyyy
: この権限を設定したユーザ
コメント