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, mencakup properti dan 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 | Native 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 | Peran dan izinnya dalam sebuah instans Hologres. |
information_schema.role_table_grants | Kompatibel PostgreSQL | Izin yang diberikan kepada peran pada tabel dan tampilan. |
Cara mengidentifikasi tabel sistem
Tabel Hologres terbagi menjadi dua kategori: tabel sistem dan tabel yang dibuat pengguna. Gunakan metode berikut untuk membedakannya:
Konvensi penamaan: Nama tabel yang diawali dengan
hgadalah tabel sistem native Hologres (misalnya,hologres.hg_table_properties). Nama tabel yang diawali denganpgadalah tabel sistem kompatibel PostgreSQL (misalnya,pg_catalog.pg_tables). Tabel yang namanya tidak diawali denganhgataupgadalah tabel yang dibuat pengguna.Skema: Tabel sistem berada di skema seperti
hologresdanpg_catalog. Tabel yang dibuat pengguna secara default berada di skemapublic.Pemilik: Jalankan
hg_dump_scriptuntuk melihat DDL tabel. Jika bidangowneradalah akun sistem, maka tabel tersebut merupakan tabel sistem. Jika bidangowneradalah akun pengguna biasa, maka tabel tersebut merupakan tabel yang dibuat pengguna.
-- Lihat DDL tabel sistem. Pemiliknya adalah akun sistem.
SELECT hg_dump_script('hologres.hg_table_properties');
-- Lihat DDL tabel yang dibuat pengguna. Pemiliknya adalah akun pengguna saat ini.
SELECT hg_dump_script('public.my_table');Tabel sistem di bawah skema hologres (misalnya, hologres.hg_table_properties) tidak dapat dikueri langsung dengan SELECT. Gunakan hg_dump_script untuk melihat metadata-nya.
Batasan
Tabel yang diawali dengan
hgadalah tabel sistem Hologres. Tabel yang diawali denganpgadalah tabel sistem PostgreSQL. Di versi Hologres sebelum V1.3.22, Anda tidak dapat melakukan join antara tabel sistem PostgreSQL dengan tabel internal Hologres, dan Anda tidak dapat mengimpor data dari tabel sistem PostgreSQL ke tabel internal Hologres. Lakukan upgrade 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 merupakan sistem terdistribusi dengan beberapa node frontend (FE), nilai OID dapat berbeda antar node. Hasil kueri yang mencakup nilai OID mungkin tidak konsisten antar 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. 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 yang 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 yang 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 Akses Jarang (IA)). |
property_value | Nilai properti. |
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. 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 sedang 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. 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. 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 merupakan sistem terdistribusi dengan beberapa node FE, nilai OID biasanya berbeda antar node. Hasil kueri yang berisi OID mungkin tidak konsisten.
| Kolom | Deskripsi |
|---|---|
oid | OID unik dari relasi. |
relname | Nama relasi. |
relnamespace | OID skema yang berisi relasi. |
relowner | Pemilik relasi. |
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. |
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. |
schema_version | Versi skema tabel. |
statistic_version | Versi statistik. |
statistics | Konten statistik, dikodekan dalam Base64. |
schema_name | Skema yang berisi tabel. |
table_name | Nama tabel. |
total_rows | Jumlah total baris dalam tabel. |
sample_rows | Jumlah baris yang disampel untuk pengumpulan statistik. |
nattr | Jumlah kolom dalam tabel. |
used_attrs | Kolom yang dianalisis oleh pernyataan ANALYZE. |
histogram_attrs | Kolom yang dikumpulkan statistik histogramnya. |
ndv_attrs | Kolom yang dikumpulkan statistik nilai uniknya (NDV). |
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 | Pecahan baris yang memiliki nilai null di kolom ini. |
avg_width | Lebar rata-rata (dalam byte) entri kolom. |
n_distinct | Perkiraan jumlah nilai unik jika positif. Jika negatif, nilai absolutnya adalah rasio nilai unik terhadap jumlah total baris (digunakan ketika jumlah nilai unik diperkirakan bertambah seiring pertumbuhan tabel). Misalnya, -1 menunjukkan kolom unik. |
most_common_vals | Daftar nilai paling umum di kolom. 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: pecahan 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 peran dalam instans Hologres dan izinnya.
| Kolom | Deskripsi |
|---|---|
rolname | Nama peran. |
rolsuper | t jika peran memiliki hak istimewa superuser; f jika tidak. |
rolinherit | t jika peran mewarisi izin dari peran mana pun yang menjadi anggotanya; f jika tidak. |
rolcreaterole | t jika peran dapat membuat peran lain; f jika tidak. |
rolcreatedb | t jika peran dapat membuat database; f jika tidak. |
rolcanlogin | t jika peran dapat terhubung ke instans; f jika tidak. |
rolconnlimit | Jumlah maksimum koneksi bersamaan yang dapat dibuat oleh peran. Jika nilainya -1, jumlah maksimum koneksi bersamaan tidak dikonfigurasi di Hologres. |
oid | OID unik peran. |
Kolom yang tidak berlaku di Hologres: rolreplication, rolpassword, rolvaliduntil, rolbypassrls, rolconfig.
information_schema.role_table_grants
Tabel ini mencantumkan izin yang diberikan kepada peran pada tabel dan tampilan dalam instans Hologres.
| Kolom | Deskripsi |
|---|---|
grantor | Peran yang memberikan izin. |
grantee | Peran yang menerima izin. |
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 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 peran 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;Mencantumkan semua tabel yang izinnya dimiliki pengguna
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.