Hologres menyediakan serangkaian tabel sistem untuk mengkueri metadata, statistik, informasi lock, dan izin akses. Topik ini mencakup kolom-kolom setiap tabel sistem serta kueri SQL umum yang dapat Anda jalankan terhadapnya.
Ikhtisar
Hologres menyediakan dua kategori tabel sistem:
Tabel native Hologres (diawali dengan
hg): dirancang khusus untuk Hologres dan berisi properti serta statistik spesifik Hologres yang dibagikan di seluruh node.Tabel kompatibel PostgreSQL (diawali dengan
pgatau berada di bawahinformation_schema): diwarisi dari PostgreSQL. Beberapa kolom dalam tabel-tabel ini tidak berlaku di Hologres karena Hologres merupakan sistem terdistribusi, bukan instans PostgreSQL standalone.
| Tabel | Sumber | Deskripsi |
|---|---|---|
hologres.hg_table_properties | Natif Hologres | Properti dan indeks semua tabel di database saat ini. |
hologres_statistic.hg_table_statistic | Native Hologres | Statistik tabel yang dibagikan di seluruh node. |
pg_catalog.pg_tables | Kompatibel PostgreSQL | Metadata tabel, termasuk skema, pemilik, dan informasi indeks. |
pg_catalog.pg_locks | Kompatibel PostgreSQL | Informasi lock waktu proses. Gunakan tabel ini untuk mendiagnosis pernyataan DDL atau kueri yang diblokir. |
pg_catalog.pg_class | Kompatibel PostgreSQL | Tabel katalog PostgreSQL yang berisi metadata relasi. Biasanya digunakan bersama tabel pg_catalog lainnya. |
pg_catalog.pg_stats | Kompatibel PostgreSQL | Statistik tingkat kolom yang digunakan oleh planner PostgreSQL pada satu node. |
pg_catalog.pg_roles | Kompatibel PostgreSQL | Role dan izinnya dalam sebuah instans Hologres. |
information_schema.role_table_grants | Kompatibel PostgreSQL | Izin yang diberikan kepada role pada tabel dan tampilan. |
Batasan
Tabel yang diawali dengan
hgadalah tabel sistem Hologres, sedangkan yang diawali denganpgadalah tabel sistem PostgreSQL. Pada versi Hologres sebelum V1.3.22, Anda tidak dapat melakukan join antara tabel sistem PostgreSQL dengan tabel internal Hologres atau mengimpor data dari tabel sistem PostgreSQL ke tabel internal Hologres. Tingkatkan ke V1.3.22 atau versi yang lebih baru untuk menghapus batasan ini.Di Hologres, bidang object identifier (OID) dalam tabel sistem secara unik mengidentifikasi relasi seperti tabel, indeks, dan tampilan. Karena Hologres adalah sistem terdistribusi dengan beberapa node frontend (FE), nilai OID dapat berbeda antar node. Akibatnya, hasil kueri yang mencakup nilai OID mungkin tidak konsisten di berbagai node.
hologres.hg_table_properties
Tabel ini berisi informasi dan properti untuk semua tabel di database saat ini.
| Kolom | Deskripsi |
|---|---|
table_namespace | Skema yang berisi tabel tersebut. Hologres menyediakan tiga skema sistem: hologres (tabel sistem Hologres), hologres_statistic (tabel statistik), dan pg_catalog (tabel metadata PostgreSQL). |
table_name | Nama tabel. Tabel sistem meliputi: hologres.hg_insert_progress_stats, hologres.hg_table_properties, hologres.hg_table_group_properties, hologres_statistic.hg_table_statistic, dan pg_catalog.pg_stat_activity. |
property_key | Nama properti. Nilai yang valid: table_id, clustering_index_id, clustering_index_name, lifecycle_in_days (TTL; -1 berarti berlaku permanen), storage_format (sst untuk tabel berorientasi baris; orc secara default untuk tabel berorientasi kolom di V0.10 atau versi lebih baru), table_group, schema_version, primary_key, orientation (row, column, atau row,column untuk penyimpanan hibrida baris-kolom yang didukung di V1.1 dan versi lebih baru), distribution_key, dictionary_encoding_columns, bitmap_columns, clustering_key, create_time, last_ddl_time, storage_mode (hot untuk penyimpanan standar; cold untuk penyimpanan Infrequent Access (IA)). |
property_value | Nilai properti tersebut. |
pg_catalog.pg_tables
Tabel ini berisi metadata untuk semua tabel, termasuk tabel yang dibuat pengguna dan tabel sistem.
| Kolom | Deskripsi |
|---|---|
schemaname | Skema yang berisi tabel tersebut. Hologres menyediakan tiga skema sistem: hologres, pg_catalog, dan information_schema. |
tablename | Nama tabel. |
tableowner | Pemilik tabel. Tabel sistem dimiliki oleh holo_admin dan nilai ini tidak dapat diubah. Akun dengan model izin sederhana (SPM) atau model izin tingkat skema (SLPM) yang diaktifkan akan ditampilkan sebagai developer. |
tablespace | Tidak berlaku di Hologres. |
hasindexes | true jika tabel memiliki atau pernah memiliki indeks. |
hasrules | true jika tabel memiliki atau pernah memiliki aturan penulisan ulang. |
hastriggers | true jika tabel memiliki atau pernah memiliki pemicu. |
rowsecurity | Tidak berlaku di Hologres. |
pg_catalog.pg_locks
Tabel ini menampilkan informasi lock waktu proses. Kueri tabel ini untuk menentukan apakah suatu lock memblokir pernyataan DDL atau kueri.
| Kolom | Deskripsi |
|---|---|
locktype | Jenis objek yang dapat dilock. Nilai yang valid: relation (lock tabel) dan advisory (lock DDL). Jenis lock PostgreSQL extend, page, tuple, transactionid, virtualxid, object, dan userlock tidak berlaku di Hologres. |
database | OID database yang berisi objek yang dilock. |
relation | OID tabel yang dilock. Null jika objek bukan tabel atau bagian dari tabel. |
virtualxid | ID transaksi virtual dari lock tersebut. Null jika objek bukan ID transaksi virtual. |
transactionid | ID transaksi. Null jika objek bukan ID transaksi. |
pid | ID proses (PID) proses server yang memegang atau menunggu lock tersebut. Gunakan PID ini untuk mencari proses di pg_catalog.pg_stat_activity. |
mode | Mode lock: lock shared atau lock eksklusif. |
granted | true jika lock sedang dipegang; false jika lock sedang ditunggu. |
Columns not applicable in Hologres: page, tuple, classid, objid, objsubid, virtualtransaction, fastpath.
pg_catalog.pg_class
Tabel ini berisi informasi katalog PostgreSQL untuk semua relasi (tabel, indeks, tampilan, dan lainnya). Biasanya dikueri bersama tabel pg_catalog lainnya.
Karena Hologres adalah sistem terdistribusi dengan beberapa node FE, nilai OID biasanya berbeda di berbagai node. Hasil kueri yang berisi OID mungkin tidak konsisten.
| Kolom | Deskripsi |
|---|---|
oid | OID unik dari relasi tersebut. |
relname | Nama relasi tersebut. |
relnamespace | OID skema yang berisi relasi tersebut. |
relowner | Pemilik relasi tersebut. |
reltuples | Perkiraan jumlah baris yang digunakan oleh planner. Diperbarui oleh pernyataan VACUUM, ANALYZE, atau DDL. Di Hologres, kolom ini menentukan jumlah baris statistik. |
relallvisible | Perkiraan jumlah halaman all-visible yang digunakan oleh planner. Diperbarui oleh pernyataan VACUUM, ANALYZE, atau DDL. Di Hologres, kolom ini menentukan versi statistik. |
relhasindex | true jika relasi memiliki atau pernah memiliki indeks. |
relisshared | true jika tabel dibagikan di seluruh database dalam kluster (misalnya, pg_catalog.pg_database). Tidak berlaku di Hologres. |
relpersistence | Persistensi tabel: p (permanen), u (unlogged), atau t (temporary). |
relkind | Jenis relasi: r (tabel), i (indeks), S (sequence), v (tampilan), m (tampilan yang di-materialisasi), c (tipe komposit), t (tabel TOAST), f (tabel eksternal). |
relnatts | Jumlah kolom pengguna, tidak termasuk kolom sistem. |
relhaspkey | true jika relasi memiliki atau pernah memiliki primary key. |
relhassubclass | true jika relasi memiliki atau pernah memiliki tabel anak yang diwariskan. |
relacl | Izin akses untuk relasi tersebut. |
reloptions | Properti tabel. Misalnya, autovacuum_enabled=false menunjukkan bahwa auto-vacuum dan auto-analyze dinonaktifkan untuk tabel tersebut. |
Kolom yang tidak berlaku di Hologres: reltype, reloftype, relam, relfilenode, reltablespace, relpages, reltoastrelid, relchecks, relhasoids, relhasrules, relhastriggers, relispopulated, relreplident, relfrozenxid, relminmxid.
hologres_statistic.hg_table_statistic
Tabel ini berisi statistik native Hologres yang dibagikan di seluruh node. Tabel ini diperbarui ketika Anda menjalankan ANALYZE atau ketika fitur auto-analyze dijalankan.
| Kolom | Deskripsi |
|---|---|
unique_name | Pengenal unik tabel tersebut. |
schema_version | Versi skema tabel tersebut. |
statistic_version | Versi statistik. |
statistics | Konten statistik, dikodekan dalam Base64. |
schema_name | Skema yang berisi tabel tersebut. |
table_name | Nama tabel tersebut. |
total_rows | Jumlah total baris dalam tabel tersebut. |
sample_rows | Jumlah baris yang disampel untuk pengumpulan statistik. |
nattr | Jumlah kolom dalam tabel tersebut. |
used_attrs | Kolom yang dianalisis oleh pernyataan ANALYZE. |
histogram_attrs | Kolom yang dikumpulkan statistik histogramnya. |
ndv_attrs | Kolom yang dikumpulkan statistik nilai-distinct (NDV)-nya. |
user_name | Pengguna yang menjalankan ANALYZE atau memicu auto-analyze. |
analyze_timestamp | Waktu saat ANALYZE dijalankan atau auto-analyze dipicu. |
analyze_cost | Waktu yang dibutuhkan oleh ANALYZE atau auto-analyze untuk menyelesaikan. |
analyze_count | Jumlah kali ANALYZE dijalankan atau auto-analyze dipicu. |
pg_catalog.pg_stats
Tabel ini berisi statistik tingkat kolom PostgreSQL yang digunakan oleh planner PostgreSQL single-node.
| Kolom | Deskripsi |
|---|---|
schemaname | Nama skema. |
tablename | Nama tabel. |
attname | Nama kolom. |
inherited | true jika statistik mencakup subkolom yang diwariskan. |
null_frac | Bagian baris yang memiliki nilai null pada kolom ini. |
avg_width | Lebar rata-rata (dalam byte) entri kolom. |
n_distinct | Perkiraan jumlah nilai distinct jika positif. Jika negatif, nilai absolutnya adalah rasio nilai distinct terhadap jumlah total baris (digunakan ketika jumlah nilai distinct diperkirakan bertambah seiring pertumbuhan tabel). Misalnya, -1 menunjukkan kolom unik. |
most_common_vals | Daftar nilai paling umum dalam kolom tersebut. Null jika tidak ada nilai yang cukup umum. |
most_common_freqs | Frekuensi nilai paling umum, dihitung sebagai jumlah kemunculan dibagi jumlah total baris. Null jika most_common_vals null. |
histogram_bounds | Nilai yang membagi rentang nilai kolom menjadi kelompok-kelompok berukuran kira-kira sama. Nilai dalam most_common_vals dikecualikan dari histogram ini. |
most_common_elems | Nilai elemen non-null paling umum dalam nilai kolom bertipe array. |
most_common_elem_freqs | Frekuensi nilai elemen paling umum: bagian baris yang berisi setidaknya satu instance dari setiap nilai. Null jika most_common_elems null. |
Kolom yang tidak berlaku di Hologres: correlation, elem_count_histogram.
pg_catalog.pg_roles
Tabel ini mencantumkan semua role dalam sebuah instans Hologres beserta izinnya.
| Kolom | Deskripsi |
|---|---|
rolname | Nama role. |
rolsuper | t jika role memiliki hak istimewa superuser; f jika tidak. |
rolinherit | t jika role mewarisi izin dari role apa pun yang menjadi anggotanya; f jika tidak. |
rolcreaterole | t jika role dapat membuat role lain; f jika tidak. |
rolcreatedb | t jika role dapat membuat database; f jika tidak. |
rolcanlogin | t jika role dapat terhubung ke instans; f jika tidak. |
rolconnlimit | Jumlah maksimum koneksi bersamaan yang dapat dibuat oleh role tersebut. Jika nilainya -1, jumlah maksimum koneksi bersamaan tidak dikonfigurasi di Hologres. |
oid | OID unik dari role tersebut. |
Kolom yang tidak berlaku di Hologres: rolreplication, rolpassword, rolvaliduntil, rolbypassrls, rolconfig.
information_schema.role_table_grants
Tabel ini mencantumkan izin yang diberikan kepada role pada tabel dan tampilan dalam sebuah instans Hologres.
| Kolom | Deskripsi |
|---|---|
grantor | Role yang memberikan izin tersebut. |
grantee | Role yang menerima izin tersebut. |
table_catalog | Nama database. |
table_schema | Nama skema. |
table_name | Nama tabel. |
privilege_type | Jenis izin yang diberikan. Nilai yang valid: SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER. |
is_grantable | YES jika izin tersebut dapat diberikan kepada pihak lain; NO jika tidak. |
with_hierarchy | YES jika jenis izin adalah SELECT; NO jika tidak. |
Kueri SQL umum
Semua kueri dalam bagian ini dapat dijalankan menggunakan psql atau klien kompatibel PostgreSQL apa pun.
Kueri properti dan indeks tabel
SELECT * FROM hologres.hg_table_properties WHERE table_name = '<table_name>';Ambil DDL untuk tabel atau tampilan
-- Ambil DDL untuk tabel
SELECT hg_dump_script('<table_name>');
-- Ambil DDL untuk tampilan
SELECT hg_dump_script('<view_name>');Jika kueri gagal, instal ekstensi hg_toolkit terlebih dahulu:CREATE EXTENSION hg_toolkit;Kueri titik akhir instans
SHOW hg_frontend_endpoints;Daftar semua database dalam instans saat ini
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;Daftar semua pemetaan pengguna dalam database saat ini
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;Daftar semua skema dalam database saat ini
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;Daftar semua tabel, tabel eksternal, dan tampilan dalam database saat ini
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;Daftar semua tabel dan pemiliknya dalam skema saat ini (tidak termasuk tabel sistem)
-- Sertakan tabel sistem
SELECT * FROM pg_tables;
-- Kecualikan tabel sistem
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;Daftar tabel anak dari tabel induk
-- Dengan nilai kunci partisi
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';
-- Tanpa nilai kunci partisi
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>';Daftar tabel anak dengan waktu pembuatan dan tabel induk
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;Daftar semua tabel eksternal dan tabel MaxCompute yang sesuai
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');Daftar semua tampilan dalam database saat ini
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;Temukan tampilan yang bergantung pada tabel
SELECT * FROM information_schema.view_table_usage WHERE table_name = '<table_name>';Kueri komentar kolom dan komentar tabel
-- Kueri komentar kolom untuk tabel
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;Ganti <schema_name>.<table_name> dengan nama skema dan tabel yang sebenarnya.
-- Kueri komentar tabel dan metadata terkait (pemilik, ukuran)
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;-- Kueri komentar pada tabel tertentu
SELECT pg_catalog.obj_description('<table_name>'::regclass::oid, 'pg_class') AS "Description";Daftar semua pengguna dan role dalam database
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;Daftar semua ekstensi dalam database
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;Periksa izin akun
SELECT * FROM pg_roles WHERE rolname = '<uid>';Daftar semua pengguna instans dan izinnya
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;Daftar semua tabel di mana pengguna memiliki izin
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)
);Ganti <user_id> dengan ID pengguna yang sebenarnya.
Daftar semua pengguna yang memiliki izin pada tabel
SELECT rolname
FROM pg_roles
WHERE has_table_privilege(rolname, '<schema_name>.<table_name>',
'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER');Ganti <schema_name>.<table_name> dengan nama skema dan tabel yang sebenarnya.