Hologres は、メタデータ、統計情報、ロック情報、アクセス権限をクエリするための一連のシステムテーブルを提供します。このトピックでは、各システムテーブルの列と、それらに対して実行できる一般的な SQL クエリについて説明します。
概要
Hologres は、次の 2 種類のシステムテーブルを公開しています。
Hologres ネイティブテーブル (
hgプレフィックス付き):Hologres 専用に構築され、すべてのノードで共有される Hologres 固有のプロパティと統計情報をカバーします。PostgreSQL 互換テーブル (
pgプレフィックス付き、またはinformation_schema配下):PostgreSQL から継承されています。Hologres はスタンドアロンの PostgreSQL インスタンスではなく分散システムであるため、これらのテーブルの一部の列は Hologres には適用されません。
| テーブル | ソース | 説明 |
|---|---|---|
hologres.hg_table_properties | Hologres ネイティブ | 現在のデータベース内のすべてのテーブルのプロパティとインデックス。 |
hologres_statistic.hg_table_statistic | Hologres ネイティブ | すべてのノードで共有されるテーブルの統計情報。 |
pg_catalog.pg_tables | PostgreSQL 互換 | スキーマ、所有者、インデックス情報を含むテーブルのメタデータ。 |
pg_catalog.pg_locks | PostgreSQL 互換 | ランタイムロック情報。このテーブルを使用して、ブロックされた DDL 文やクエリを診断します。 |
pg_catalog.pg_class | PostgreSQL 互換 | リレーションのメタデータを含む PostgreSQL カタログテーブル。通常、他の pg_catalog テーブルと共に使用されます。 |
pg_catalog.pg_stats | PostgreSQL 互換 | シングルノード上の PostgreSQL プランナーによって使用される列レベルの統計情報。 |
pg_catalog.pg_roles | PostgreSQL 互換 | Hologres インスタンス内のロールとその権限。 |
information_schema.role_table_grants | PostgreSQL 互換 | テーブルとビューに対してロールに付与された権限。 |
システムテーブルの識別方法
Hologres のテーブルは、システムテーブルとユーザー作成テーブルの 2 つのカテゴリに分類されます。以下の方法で区別できます。
命名規則:テーブル名が
hgで始まるものは Hologres ネイティブのシステムテーブルです (例:hologres.hg_table_properties)。テーブル名がpgで始まるものは PostgreSQL 互換のシステムテーブルです (例:pg_catalog.pg_tables)。テーブル名がhgまたはpgで始まらないものはユーザー作成テーブルです。スキーマ:システムテーブルは
hologresやpg_catalogなどのスキーマに存在します。ユーザー作成テーブルは、デフォルトでpublicスキーマに存在します。所有者:
hg_dump_scriptを実行して、テーブルの DDL を表示します。ownerフィールドがシステムアカウントの場合、そのテーブルはシステムテーブルです。ownerフィールドが通常のユーザーアカウントの場合、そのテーブルはユーザー作成テーブルです。
-- システムテーブルの DDL を表示します。所有者はシステムアカウントです。
SELECT hg_dump_script('hologres.hg_table_properties');
-- ユーザー作成テーブルの DDL を表示します。所有者は現在のユーザーアカウントです。
SELECT hg_dump_script('public.my_table');hologres スキーマ配下のシステムテーブル (例:hologres.hg_table_properties) は、SELECT を使用して直接クエリすることはできません。hg_dump_script を使用してメタデータを表示してください。
制限事項
hgプレフィックス付きのテーブルは Hologres のシステムテーブルです。pgプレフィックス付きのテーブルは PostgreSQL のシステムテーブルです。V1.3.22 より前のバージョンの Hologres では、PostgreSQL のシステムテーブルを Hologres の内部テーブルと結合したり、PostgreSQL のシステムテーブルから Hologres の内部テーブルにデータをインポートしたりすることはできません。この制限を解除するには、V1.3.22 以降にアップグレードしてください。Hologres では、システムテーブルのオブジェクト識別子 (OID) フィールドは、テーブル、インデックス、ビューなどのリレーションを一意に識別します。Hologres は複数のフロントエンド (FE) ノードを持つ分散システムであるため、OID 値はノード間で異なる場合があります。OID 値を含むクエリ結果は、ノード間で一致しない場合があります。
hologres.hg_table_properties
このテーブルには、現在のデータベース内のすべてのテーブルに関する情報とプロパティが含まれています。
| 列 | 説明 |
|---|---|
table_namespace | テーブルを含むスキーマ。Hologres は 3 つのシステムスキーマを提供します:hologres (Hologres システムテーブル)、hologres_statistic (統計テーブル)、および pg_catalog (PostgreSQL メタデータテーブル)。 |
table_name | テーブル名。システムテーブルには、hologres.hg_insert_progress_stats、hologres.hg_table_properties、hologres.hg_table_group_properties、hologres_statistic.hg_table_statistic、pg_catalog.pg_stat_activity が含まれます。 |
property_key | プロパティ名。有効な値:table_id、clustering_index_id、clustering_index_name、lifecycle_in_days (TTL; -1 は永続的に有効であることを意味します)、storage_format (行指向テーブルの場合は sst、V0.10 以降の列指向テーブルの場合はデフォルトで orc)、table_group、schema_version、primary_key、orientation (V1.1 以降でサポートされる行列混在ストレージの場合は row、column、または row,column)、distribution_key、dictionary_encoding_columns、bitmap_columns、clustering_key、create_time、last_ddl_time、storage_mode (標準ストレージの場合は hot、低頻度アクセス (IA) ストレージの場合は cold)。 |
property_value | プロパティの値。 |
pg_catalog.pg_tables
このテーブルには、ユーザー作成テーブルとシステムテーブルを含むすべてのテーブルのメタデータが含まれています。
| 列 | 説明 |
|---|---|
schemaname | テーブルを含むスキーマ。Hologres は 3 つのシステムスキーマを提供します:hologres、pg_catalog、information_schema。 |
tablename | テーブル名。 |
tableowner | テーブルの所有者。holo_admin はシステムテーブルを所有しており、この値は変更できません。簡易権限モデル (SPM) またはスキーマレベルの簡易権限モデル (SLPM) が有効になっているアカウントは、developer と表示されます。 |
tablespace | Hologres では該当なし。 |
hasindexes | true テーブルにインデックスがある、またはあった場合。 |
hasrules | true、テーブルに書き換えルールがある、またはあった場合。 |
hastriggers | true。 |
rowsecurity | Hologres では該当なし。 |
pg_catalog.pg_locks
このテーブルはランタイムロック情報を表示します。このテーブルをクエリして、ロックが DDL 文やクエリをブロックしているかどうかを判断します。
| 列 | 説明 |
|---|---|
locktype | ロック可能なオブジェクトのタイプ。有効な値:relation (テーブルロック) と advisory (DDL ロック)。PostgreSQL のロックタイプ extend、page、tuple、transactionid、virtualxid、object、userlock は Hologres では適用されません。 |
database | ロックされたオブジェクトを含むデータベースの OID。 |
relation | ロックされたテーブルの OID。オブジェクトがテーブルまたはテーブルの一部でない場合は Null。 |
virtualxid | ロックの仮想トランザクション ID。オブジェクトが仮想トランザクション ID でない場合は Null。 |
transactionid | トランザクション ID。オブジェクトがトランザクション ID でない場合は Null。 |
pid | ロックを保持または待機しているサーバープロセスのプロセス ID (PID)。この PID を使用して、pg_catalog.pg_stat_activity でプロセスを検索します。 |
mode | ロックモード:共有ロックまたは排他ロック。 |
granted | true、ロックが待機中の場合は false。 |
Hologres に適用されない列: page、tuple、classid、objid、objsubid、virtualtransaction、fastpath。
pg_catalog.pg_class
このテーブルには、すべてのリレーション (テーブル、インデックス、ビューなど) の PostgreSQL カタログ情報が含まれています。通常、他の pg_catalog テーブルと共にクエリされます。
Hologres は複数の FE ノードを持つ分散システムであるため、OID 値は通常ノードごとに異なります。OID を含むクエリ結果は、一貫性がない場合があります。
| 列 | 説明 |
|---|---|
oid | リレーションの一意の OID。 |
relname | リレーションの名前。 |
relnamespace | リレーションを含むスキーマの OID。 |
relowner | リレーションの所有者。 |
reltuples | プランナーによって使用される推定行数。VACUUM、ANALYZE、または DDL 文によって更新されます。Hologres では、この列は統計情報の行数を指定します。 |
relallvisible | プランナーによって使用される、すべて表示可能なページの推定数。VACUUM、ANALYZE、または DDL 文によって更新されます。Hologres では、この列は統計情報のバージョンを指定します。 |
relhasindex | true リレーションにインデックスがある、またはあった場合。 |
relisshared | true になります (例: pg_catalog.pg_database)。Hologres では適用されません。 |
relpersistence | テーブルの永続性:p (永続)、u (ログなし)、または t (一時)。 |
relkind | リレーションのタイプ:r (テーブル)、i (インデックス)、S (シーケンス)、v (ビュー)、m (マテリアライズドビュー)、c (複合型)、t (TOAST テーブル)、f (外部テーブル)。 |
relnatts | システム列を除くユーザー列の数。 |
relhaspkey | true。 |
relhassubclass | true。 |
relacl | リレーションのアクセス権限。 |
reloptions | テーブルのプロパティ。例:autovacuum_enabled=false は、テーブルに対して自動バキュームと自動アナライズが無効になっていることを示します。 |
Hologres に適用されない列: reltype、reloftype、relam、relfilenode、reltablespace、relpages、reltoastrelid、relchecks、relhasoids、relhasrules、relhastriggers、relispopulated、relreplident、relfrozenxid、relminmxid。
hologres_statistic.hg_table_statistic
このテーブルには、すべてのノードで共有される Hologres ネイティブの統計情報が含まれています。ANALYZE を実行したとき、または自動アナライズ機能が実行されたときに更新されます。
| 列 | 説明 |
|---|---|
unique_name | テーブルの一意の識別子。 |
schema_version | テーブルのスキーマバージョン。 |
statistic_version | 統計情報のバージョン。 |
statistics | 統計情報の内容。Base64 でエンコードされています。 |
schema_name | テーブルを含むスキーマ。 |
table_name | テーブル名。 |
total_rows | テーブルの総行数。 |
sample_rows | 統計情報収集のためにサンプリングされた行数。 |
nattr | テーブルの列数。 |
used_attrs | ANALYZE 文によって分析された列。 |
histogram_attrs | ヒストグラム統計が収集される列。 |
ndv_attrs | 個別値 (NDV) 統計が収集される列。 |
user_name | ANALYZE を実行した、または自動アナライズをトリガーしたユーザー。 |
analyze_timestamp | ANALYZE が実行された、または自動アナライズがトリガーされた時刻。 |
analyze_cost | ANALYZE または自動アナライズが完了するまでにかかった時間。 |
analyze_count | ANALYZE が実行された、または自動アナライズがトリガーされた回数。 |
pg_catalog.pg_stats
このテーブルには、シングルノードの PostgreSQL プランナーが使用する PostgreSQL の列レベルの統計情報が含まれています。
| 列 | 説明 |
|---|---|
schemaname | スキーマ名。 |
tablename | テーブル名。 |
attname | 列名。 |
inherited | true。 |
null_frac | この列で NULL 値を持つ行の割合。 |
avg_width | 列エントリの平均幅 (バイト単位)。 |
n_distinct | 正の場合は推定個別値の数。負の場合、その絶対値は個別値の総行数に対する比率です (個別値の数がテーブルとともに増加すると予想される場合に使用されます)。たとえば、-1 は一意の列を示します。 |
most_common_vals | 列内で最も一般的な値のリスト。十分に一般的な値がない場合は Null。 |
most_common_freqs | 最も一般的な値の出現頻度。出現回数を総行数で割って計算されます。most_common_vals が Null の場合は Null。 |
histogram_bounds | 列の値の範囲をほぼ等しいサイズのグループに分割する値。most_common_vals の値はこのヒストグラムから除外されます。 |
most_common_elems | 配列型の列値内で最も一般的な非 NULL の要素値。 |
most_common_elem_freqs | 最も一般的な要素値の出現頻度:各値のインスタンスを少なくとも 1 つ含む行の割合。most_common_elems が Null の場合は Null。 |
Hologres に適用されない列: correlation、elem_count_histogram。
pg_catalog.pg_roles
このテーブルは、Hologres インスタンス内のすべてのロールとその権限を一覧表示します。
| 列 | 説明 |
|---|---|
rolname | ロール名。 |
rolsuper | t、それ以外は f。 |
rolinherit | t、それ以外は f。 |
rolcreaterole | t、それ以外は f。 |
rolcreatedb | t、それ以外は f。 |
rolcanlogin | t、それ以外は f。 |
rolconnlimit | ロールが確立できる最大同時接続数。値が -1 の場合、Hologres では最大同時接続数は設定されていません。 |
oid | ロールの一意の OID。 |
Hologres に適用されない列: rolreplication、rolpassword、rolvaliduntil、rolbypassrls、rolconfig。
information_schema.role_table_grants
このテーブルは、Hologres インスタンス内のテーブルとビューに対してロールに付与された権限を一覧表示します。
| 列 | 説明 |
|---|---|
grantor | 権限を付与したロール。 |
grantee | 権限を受け取ったロール。 |
table_catalog | データベース名。 |
table_schema | スキーマ名。 |
table_name | テーブル名。 |
privilege_type | 付与された権限のタイプ。有効な値:SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、TRIGGER。 |
is_grantable | YES、それ以外は NO。 |
with_hierarchy | SELECT の場合は YES、それ以外は NO。 |
一般的な SQL クエリ
このセクションのすべてのクエリは、psql または PostgreSQL 互換のクライアントを使用して実行できます。
テーブルのプロパティとインデックスのクエリ
SELECT * FROM hologres.hg_table_properties WHERE table_name = '<table_name>';テーブルまたはビューの DDL の取得
-- テーブルの DDL を取得
SELECT hg_dump_script('<table_name>');
-- ビューの DDL を取得
SELECT hg_dump_script('<view_name>');クエリが失敗した場合は、まず hg_toolkit 拡張機能をインストールしてください。CREATE EXTENSION hg_toolkit;インスタンスエンドポイントのクエリ
SHOW hg_frontend_endpoints;現在のインスタンス内のすべてのデータベースの一覧表示
SELECT
d.datname AS "Name",
pg_catalog.pg_get_userbyid(d.datdba) AS "Owner",
pg_catalog.pg_encoding_to_char(d.encoding) AS "Encoding",
d.datcollate AS "Collate",
d.datctype AS "Ctype",
pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"
FROM pg_catalog.pg_database d
WHERE d.datname != 'postgres'
AND d.datname != 'template0'
AND d.datname != 'template1'
ORDER BY 1;現在のデータベース内のすべてのユーザーマッピングの一覧表示
SELECT
um.srvname AS "Server",
um.usename AS "User name"
FROM pg_catalog.pg_user_mappings um
WHERE um.srvname != 'query_log_store_server'
ORDER BY 1, 2;現在のデータベース内のすべてのスキーマの一覧表示
SELECT
n.nspname AS "Name",
pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner"
FROM pg_catalog.pg_namespace n
WHERE n.nspname !~ '^pg_'
AND n.nspname <> 'information_schema'
AND n.nspname != 'hologres'
AND n.nspname != 'hologres_sample'
AND n.nspname != 'hologres_statistic'
AND n.nspname !~ '^hg_'
AND n.nspname !~ '^holo_'
ORDER BY 1;現在のデータベース内のすべてのテーブル、外部テーブル、ビューの一覧表示
SELECT
n.nspname AS "Schema",
c.relname AS "Name",
CASE c.relkind
WHEN 'r' THEN 'table'
WHEN 'v' THEN 'view'
WHEN 'm' THEN 'materialized view'
WHEN 'i' THEN 'index'
WHEN 'S' THEN 'sequence'
WHEN 's' THEN 'special'
WHEN 'f' THEN 'foreign table'
WHEN 'p' THEN 'partitioned table'
WHEN 'I' THEN 'partitioned index'
END AS "Type",
pg_catalog.pg_get_userbyid(c.relowner) AS "Owner"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r', 'p', 'v', 'm', 'S', 'f', '')
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1, 2;現在のスキーマ内のすべてのテーブルと所有者の一覧表示 (システムテーブルを除く)
-- システムテーブルを含む
SELECT * FROM pg_tables;
-- システムテーブルを除く
SELECT
n.nspname AS "Schema",
c.relname AS "Name",
CASE c.relkind
WHEN 'r' THEN 'table'
WHEN 'v' THEN 'view'
WHEN 'm' THEN 'materialized view'
WHEN 'i' THEN 'index'
WHEN 'S' THEN 'sequence'
WHEN 's' THEN 'special'
WHEN 'f' THEN 'foreign table'
WHEN 'p' THEN 'partitioned table'
WHEN 'I' THEN 'partitioned index'
END AS "Type",
pg_catalog.pg_get_userbyid(c.relowner) AS "Owner"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r', 'p', 'v', 'm', 'S', 'f', '')
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1, 2;親テーブルの子テーブルの一覧表示
-- パーティションキー値あり
SELECT
c.oid::pg_catalog.regclass,
c.relkind,
pg_catalog.pg_get_expr(c.relpartbound, c.oid)
FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i
WHERE c.oid = i.inhrelid
AND i.inhparent::pg_catalog.regclass = '<parent_table_name>'::pg_catalog.regclass
ORDER BY pg_catalog.pg_get_expr(c.relpartbound, c.oid) = 'DEFAULT';
-- パーティションキー値なし
SELECT
nmsp_parent.nspname AS parent_schema,
parent.relname AS parent,
nmsp_child.nspname AS child_schema,
child.relname AS child
FROM pg_inherits
JOIN pg_class parent ON pg_inherits.inhparent = parent.oid
JOIN pg_class child ON pg_inherits.inhrelid = child.oid
JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace
JOIN pg_namespace nmsp_child ON nmsp_child.oid = child.relnamespace
WHERE parent.relname = '<parent_table_name>';作成時刻と親テーブルを含む子テーブルの一覧表示
SELECT
cn.nspname AS child_schema_name,
c.relname AS child_table_name,
pn.nspname AS parent_schema_name,
p.relname AS parent_table_name,
to_timestamp(cp.property_value::bigint) AS create_time
FROM pg_inherits i
LEFT JOIN pg_class p ON p.oid = i.inhparent
LEFT JOIN pg_namespace pn ON pn.oid = p.relnamespace
LEFT JOIN pg_class c ON c.oid = i.inhrelid
LEFT JOIN pg_namespace cn ON cn.oid = c.relnamespace
LEFT JOIN hologres.hg_table_properties cp
ON cp.property_key = 'create_time'
AND cp.table_namespace = pn.nspname
AND cp.table_name = c.relname;すべての外部テーブルとそれに対応する MaxCompute テーブルの一覧表示
SELECT
n.nspname,
c.relname,
s.srvname,
pg_catalog.array_to_string(
ARRAY(
SELECT pg_catalog.quote_ident(option_name) || ' ' || pg_catalog.quote_literal(option_value)
FROM pg_catalog.pg_options_to_table(ftoptions)
),
', '
)
FROM pg_catalog.pg_foreign_table f,
pg_catalog.pg_foreign_server s,
pg_catalog.pg_class c,
pg_catalog.pg_namespace n
WHERE s.oid = f.ftserver
AND c.oid = f.ftrelid
AND c.relnamespace = n.oid
AND n.nspname NOT IN ('hologres', 'hologres_statistic', 'pg_catalog', 'pg_toast');現在のデータベース内のすべてのビューの一覧表示
SELECT
n.nspname AS "Schema",
c.relname AS "Name",
CASE c.relkind
WHEN 'r' THEN 'table'
WHEN 'v' THEN 'view'
WHEN 'm' THEN 'materialized view'
WHEN 'i' THEN 'index'
WHEN 'S' THEN 'sequence'
WHEN 's' THEN 'special'
WHEN 'f' THEN 'foreign table'
WHEN 'p' THEN 'partitioned table'
WHEN 'I' THEN 'partitioned index'
END AS "Type",
pg_catalog.pg_get_userbyid(c.relowner) AS "Owner"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('v', '')
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1, 2;テーブルに依存するビューの検索
SELECT * FROM information_schema.view_table_usage WHERE table_name = '<table_name>';列コメントとテーブルコメントのクエリ
-- テーブルの列コメントをクエリ
SELECT
a.attname AS "Column",
pg_catalog.format_type(a.atttypid, a.atttypmod) AS "Type",
a.attnotnull AS "Nullable",
pg_catalog.col_description(a.attrelid, a.attnum) AS "Description"
FROM pg_catalog.pg_attribute a
WHERE a.attnum > 0
AND NOT a.attisdropped
AND a.attrelid = '<schema_name>.<table_name>'::regclass::oid
ORDER BY a.attnum;<schema_name>.<table_name> を実際のスキーマ名とテーブル名に置き換えます。
-- テーブルのコメントと関連メタデータ (所有者、サイズ) をクエリ
SELECT
n.nspname AS "Schema",
c.relname AS "Name",
CASE c.relkind
WHEN 'r' THEN 'table'
WHEN 'v' THEN 'view'
WHEN 'm' THEN 'materialized view'
WHEN 'i' THEN 'index'
WHEN 'S' THEN 'sequence'
WHEN 's' THEN 'special'
WHEN 'f' THEN 'foreign table'
WHEN 'p' THEN 'table'
WHEN 'I' THEN 'index'
END AS "Type",
pg_catalog.pg_get_userbyid(c.relowner) AS "Owner",
pg_catalog.pg_size_pretty(pg_catalog.pg_table_size(c.oid)) AS "Size",
pg_catalog.obj_description(c.oid, 'pg_class') AS "Description"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r', 'p', 'v', 'm', 'S', 'f', '')
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1, 2;-- 特定のテーブルのコメントをクエリ
SELECT pg_catalog.obj_description('<table_name>'::regclass::oid, 'pg_class') AS "Description";データベース内のすべてのユーザーとロールの一覧表示
SELECT
r.rolname,
r.rolsuper,
r.rolinherit,
r.rolcreaterole,
r.rolcreatedb,
r.rolcanlogin,
r.rolconnlimit,
r.rolvaliduntil,
ARRAY(
SELECT b.rolname
FROM pg_catalog.pg_auth_members m
JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
WHERE m.member = r.oid
) AS memberof,
r.rolreplication,
r.rolbypassrls
FROM pg_catalog.pg_roles r
WHERE r.rolname !~ '^pg_'
ORDER BY 1;データベース内のすべての拡張機能の一覧表示
SELECT
e.extname AS "Name",
e.extversion AS "Version",
n.nspname AS "Schema",
c.description AS "Description"
FROM pg_catalog.pg_extension e
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace
LEFT JOIN pg_catalog.pg_description c ON c.objoid = e.oid
AND c.classoid = 'pg_catalog.pg_extension'::pg_catalog.regclass
WHERE e.extname != 'hg_admin_cmd'
AND e.extname != 'holo_dump_stat'
AND e.extname != 'holo_funcs'
AND e.extname != 'holo_link'
AND e.extname != 'holo_system_admin'
AND e.extname != 'query_log'
AND e.extname != 'plpgsql'
ORDER BY 1;アカウントの権限の確認
SELECT * FROM pg_roles WHERE rolname = '<uid>';インスタンスのすべてのユーザーとその権限の一覧表示
SELECT
r.rolname,
r.rolsuper,
r.rolinherit,
r.rolcreaterole,
r.rolcreatedb,
r.rolcanlogin,
r.rolconnlimit,
r.rolvaliduntil,
ARRAY(
SELECT b.rolname
FROM pg_catalog.pg_auth_members m
JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
WHERE m.member = r.oid
) AS memberof,
r.rolreplication,
r.rolbypassrls
FROM pg_catalog.pg_roles r
WHERE r.rolname !~ '^pg_'
ORDER BY 1;ユーザーが権限を持つすべてのテーブルの一覧表示
SELECT
current_database()::information_schema.sql_identifier AS table_catalog,
nc.nspname::information_schema.sql_identifier AS table_schema,
c.relname::information_schema.sql_identifier AS table_name,
CASE
WHEN nc.oid = pg_my_temp_schema() THEN 'LOCAL TEMPORARY'::text
WHEN c.relkind = ANY (ARRAY['r'::"char", 'p'::"char"]) THEN 'BASE TABLE'::text
WHEN c.relkind = 'v'::"char" THEN 'VIEW'::text
WHEN c.relkind = 'f'::"char" THEN 'FOREIGN'::text
ELSE NULL::text
END::information_schema.character_data AS table_type,
CASE
WHEN (c.relkind = ANY (ARRAY['r'::"char", 'p'::"char"]))
OR (c.relkind = ANY (ARRAY['v'::"char", 'f'::"char"])
AND (pg_relation_is_updatable(c.oid::regclass, false) & 8) = 8)
THEN 'YES'::text
ELSE 'NO'::text
END::information_schema.yes_or_no AS is_insertable_into,
CASE
WHEN t.typname IS NOT NULL THEN 'YES'::text
ELSE 'NO'::text
END::information_schema.yes_or_no AS is_typed,
NULL::character varying::information_schema.character_data AS commit_action
FROM pg_namespace nc
JOIN pg_class c ON nc.oid = c.relnamespace
LEFT JOIN (pg_type t JOIN pg_namespace nt ON t.typnamespace = nt.oid) ON c.reloftype = t.oid
WHERE (c.relkind = ANY (ARRAY['r'::"char", 'v'::"char", 'f'::"char", 'p'::"char"]))
AND NOT pg_is_other_temp_schema(nc.oid)
AND (
pg_has_role('<user_id>', c.relowner, 'USAGE'::text)
OR has_table_privilege('<user_id>', c.oid, 'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text)
OR has_any_column_privilege('<user_id>', c.oid, 'SELECT, INSERT, UPDATE, REFERENCES'::text)
);<user_id> を実際のユーザー ID に置き換えます。
テーブルに対する権限を持つすべてのユーザーの一覧表示
SELECT rolname
FROM pg_roles
WHERE has_table_privilege(rolname, '<schema_name>.<table_name>',
'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER');<schema_name>.<table_name> を実際のスキーマ名とテーブル名に置き換えます。