系統(tǒng)表
本文將會(huì)為您介紹Hologres中的系統(tǒng)表以及每個(gè)表如何使用。
概述
Hologres系統(tǒng)表的組成如下表所示。
表名 | 使用場(chǎng)景 |
查看當(dāng)前數(shù)據(jù)庫(kù)下Hologres所有表以及表屬性。 | |
查看表、視圖等關(guān)系的信息。 | |
查看表的鎖信息。 | |
PostgreSQL原生元數(shù)據(jù)表,一般是結(jié)合其他PostgreSQL系統(tǒng)表一起使用,查看表關(guān)系等信息。 | |
Hologres的統(tǒng)計(jì)信息表,用于多節(jié)點(diǎn)共享統(tǒng)計(jì)信息存儲(chǔ)。 | |
PostgreSQL原生統(tǒng)計(jì)信息表,在單節(jié)點(diǎn)本地直接供planner使用。 | |
查看實(shí)例內(nèi)角色及其權(quán)限信息。 | |
查看用戶角色被授予對(duì)象(表、視圖等)的權(quán)限信息。 |
使用限制
表名稱以
hg
開(kāi)頭的是Hologres系統(tǒng)表,以pg
開(kāi)頭的是PostgreSQL系統(tǒng)表,簡(jiǎn)稱PG系統(tǒng)表。PG系統(tǒng)表不能與業(yè)務(wù)創(chuàng)建的表進(jìn)行關(guān)聯(lián)查詢,也不能將PG系統(tǒng)表的數(shù)據(jù)導(dǎo)入至業(yè)務(wù)創(chuàng)建的表中。說(shuō)明Hologres 從V1.3.22版本開(kāi)始,支持PG系統(tǒng)表與業(yè)務(wù)創(chuàng)建的表進(jìn)行Join,以及將系統(tǒng)表數(shù)據(jù)導(dǎo)出到Hologres表,但需注意,如果存在Hologres不支持的數(shù)據(jù)類型,則無(wú)法導(dǎo)出到Hologres表,也無(wú)法與Hologres表進(jìn)行Join。如果有需求請(qǐng)您升級(jí)實(shí)例。
在Hologres中,系統(tǒng)表中的OID字段表示表、索引、視圖等關(guān)系的唯一標(biāo)志符。但Postgres是單機(jī)系統(tǒng),Hologres是分布式系統(tǒng),有多個(gè)FE節(jié)點(diǎn),每個(gè)FE節(jié)點(diǎn)的OID序列通常不相同。所以當(dāng)查詢結(jié)果中有OID時(shí),可能會(huì)出現(xiàn)OID結(jié)果不一致的情況。
hologres.hg_table_properties
hologres.hg_table_properties用于存放當(dāng)前數(shù)據(jù)庫(kù)下的所有表和表屬性,包含如下字段。
字段 | 說(shuō)明 |
table_namespace | Schema名稱,Hologres會(huì)包含3個(gè)系統(tǒng)Schema:
|
table_name | 表名稱,Hologres包含多個(gè)系統(tǒng)表,如下。
|
property_key | 表屬性,包含如下屬性。
|
property_value | 表屬性的值。 |
pg_catalog.pg_tables
pg_tables保存表的元信息,包含如下字段。
字段 | 描述 |
schemaname | 表所在的Schema名稱,除了業(yè)務(wù)創(chuàng)建的Schema外,還包含系統(tǒng)Schema名稱如下。
|
tablename | 表名稱。 |
tableowner | 表的Owner。 developer用戶組:開(kāi)啟了簡(jiǎn)單權(quán)限模型(SPM)或者基于Schema級(jí)別的簡(jiǎn)單權(quán)限模型(簡(jiǎn)稱SLPM)。 |
tablespace | Hologres無(wú)此概念,無(wú)需關(guān)注 |
hasindexes | 如果表有(或最近有過(guò))任何一個(gè)索引,此列為true。 |
hasrules | 如果表有(或曾經(jīng)有過(guò))規(guī)則,此列為true。 |
hastriggers | 如果表有(或曾經(jīng)有過(guò))觸發(fā)器,此列為true。 |
rowsecurity | 如果表上啟用了安全性規(guī)則,此列為true。在Hologres中無(wú)需關(guān)注。 |
pg_catalog.pg_locks
pg_locks記錄運(yùn)行時(shí)的鎖信息,常用于當(dāng)發(fā)現(xiàn)DDL卡住或者Query卡住時(shí),定位是否有鎖,其字段如下。
字段 | 說(shuō)明 |
locktype | 鎖的類型,包含如下類型。
|
database | 目標(biāo)所在的數(shù)據(jù)庫(kù)的對(duì)象標(biāo)識(shí)符(OID)。 |
relation | 表的對(duì)象標(biāo)識(shí)符(OID),如果目標(biāo)不是表,也不是表的一部分,則為null。 |
page | 在Hologres內(nèi)無(wú)需關(guān)注。 |
tuple | 在Hologres內(nèi)無(wú)需關(guān)注。 |
virtualxid | 事務(wù)的虛擬ID,如果目標(biāo)不是虛擬事務(wù)ID,就為null。 |
transactionid | 事務(wù)的ID,如果目標(biāo)不是事務(wù)ID,就為null。 |
classid | 包含該目標(biāo)的系統(tǒng)表的對(duì)象標(biāo)識(shí)符(OID),如果目標(biāo)不是普通數(shù)據(jù)庫(kù)對(duì)象,則為null。在Hologres內(nèi)無(wú)需關(guān)注。 |
objid | 在Hologres內(nèi)無(wú)需關(guān)注。 |
objsubid | 在Hologres內(nèi)無(wú)需關(guān)注。 |
virtualtransaction | 持有或者等待此鎖的事務(wù)ID。在Hologres內(nèi)無(wú)需關(guān)注。 |
pid | 持有或者等待這個(gè)鎖的服務(wù)器進(jìn)程的進(jìn)程 ID,可以通過(guò)pg_stat_activity這個(gè)表查看進(jìn)程信息。 |
mode | 這個(gè)進(jìn)程的鎖模式,分為共享鎖和排他鎖等模式。 |
granted |
|
fastpath |
在Hologres內(nèi)無(wú)需關(guān)注。 |
pg_catalog.pg_class
pg_class用于保存原生Postgres的所有系統(tǒng)信息,包含如下字段。
名字 | 說(shuō)明 |
oid | 表、索引、視圖等關(guān)系的唯一標(biāo)志符。 說(shuō)明 Postgres是單機(jī)系統(tǒng),Hologres是分布式系統(tǒng),有多個(gè)FE節(jié)點(diǎn),每個(gè)FE節(jié)點(diǎn)的OID序列通常不相同。所以當(dāng)查詢結(jié)果中有OID時(shí),可能會(huì)出現(xiàn)OID結(jié)果不一致的情況。 |
relname | 表、索引、視圖等關(guān)系的名稱。 |
relnamespace | 包含這個(gè)關(guān)系的Schema的OID。 |
reltype | 在Hologres內(nèi)無(wú)需關(guān)注。 |
reloftype | 在Hologres內(nèi)無(wú)需關(guān)注。 |
relowner | 關(guān)系的Owner。 |
relam | 在Hologres內(nèi)無(wú)需關(guān)注。 |
relfilenode | 在Hologres內(nèi)無(wú)需關(guān)注。 |
reltablespace | 在Hologres內(nèi)無(wú)需關(guān)注。 |
relpages | 在Hologres內(nèi)無(wú)需關(guān)注。 |
reltuples | 表中行的數(shù)目。只是查詢規(guī)劃器使用的一個(gè)估計(jì)值,由VACUUM、ANALYZE和幾個(gè)DDL命令更新。在Hologres中用作統(tǒng)計(jì)信息的行數(shù)。 |
relallvisible | 在表的可見(jiàn)映射中標(biāo)記所有可見(jiàn)的頁(yè)的數(shù)目。只是查詢規(guī)劃器使用的一個(gè)估計(jì)值, 由VACUUM、ANALYZE 和幾個(gè) DDL 命令更新。在Hologres中用作統(tǒng)計(jì)信息的版本 |
reltoastrelid | 在Hologres內(nèi)無(wú)需關(guān)注。 |
relhasindex | 如果它是一個(gè)表而且至少有(或者最近有過(guò))一個(gè)索引,則為true。 |
relisshared | 如果該表在整個(gè)集群中由所有數(shù)據(jù)庫(kù)共享則為true。只有某些系統(tǒng)表(比如pg_database)是共享的,在Hologres內(nèi)無(wú)需關(guān)注。 |
relpersistence | 有如下值。
|
relkind | 有如下值。
|
relnatts | 表中列的數(shù)目(不包含系統(tǒng)字段)。 |
relchecks | 表里的CHECK約束的數(shù)目,詳情請(qǐng)參見(jiàn)pg_constraint,在Hologres內(nèi)無(wú)需關(guān)注。 |
relhasoids | 如果為關(guān)系中每行都生成一個(gè)OID則為true。在Hologres內(nèi)無(wú)需關(guān)注。 |
relhaspkey | 如果這個(gè)表有一個(gè)(或者曾經(jīng)有一個(gè))主鍵,則為true。 |
relhasrules | 如果這個(gè)表有(或曾經(jīng)有)規(guī)則就為true,詳情請(qǐng)參見(jiàn)pg_rewrite。在Hologres內(nèi)無(wú)需關(guān)注。 |
relhastriggers | 如果表有(或者曾經(jīng)有)觸發(fā)器,則為true,詳情見(jiàn)pg_trigger。在Hologres內(nèi)無(wú)需關(guān)注。 |
relhassubclass | 如果表有(或者曾經(jīng)有)任何繼承的子表,則為true。 |
relispopulated | 在Hologres內(nèi)無(wú)需關(guān)注。 |
relreplident | 在Hologres內(nèi)無(wú)需關(guān)注。 |
relfrozenxid | 在Hologres內(nèi)無(wú)需關(guān)注。 |
relminmxid | 在Hologres內(nèi)無(wú)需關(guān)注。 |
relacl | |
reloptions | 表的屬性,例如autovacuum_enabled=false代表關(guān)閉此表的autovacuum/autoanalyze功能。 |
hologres_statistic.hg_table_statistic
Hologres的統(tǒng)計(jì)信息表,其字段如下。
字段 | 說(shuō)明 |
unique_name | 表的唯一標(biāo)志。 |
schema_version | 表的版本號(hào)。 |
statistic_version | 統(tǒng)計(jì)信息版本。 |
statistics | 統(tǒng)計(jì)信息內(nèi)容,Base64編碼。 |
schema_name | 表所在Schema名稱。 |
table_name | 表名稱。 |
total_rows | 總行數(shù)。 |
sample_rows | 本統(tǒng)計(jì)信息的采樣行數(shù)。 |
nattr | 表的字段個(gè)數(shù)。 |
used_attrs | Analyze用到的字段。 |
histogram_attrs | 具備直方圖統(tǒng)計(jì)信息的字段。 |
ndv_attrs | 具備distinct value統(tǒng)計(jì)信息的字段。 |
user_name | Analyze或者Auto Analyze的執(zhí)行者。 |
analyze_timestamp | Analyze或者Auto Analyze的執(zhí)行開(kāi)始時(shí)間。 |
analyze_cost | Analyze或者Auto Analyze的耗時(shí)。 |
analyze_count | Analyze或者Auto Analyze的次數(shù)。 |
pg_catalog.pg_stats
pg_stats用于保存Postgres原生的統(tǒng)計(jì)信息,字段如下。
字段 | 說(shuō)明 |
schemaname | Schema名稱。 |
tablename | 表名稱。 |
attname | 列名(字段名)。 |
inherited | 如果為true,表示此行包括繼承子列。 |
null_frac | 記錄中字段為空的百分比。 |
avg_width | 列的平均字節(jié)寬度。 |
n_distinct |
例如,-1表示一個(gè)唯一列,即其中distinct值的個(gè)數(shù)等于行數(shù)。 |
most_common_vals | 列中Most Common Values的一個(gè)列表(如果沒(méi)有任何一個(gè)值看起來(lái)比其他值更常用,此列為空)。 |
most_common_freqs | Most Common Values值的頻率列表,即每一個(gè)常用值的出現(xiàn)次數(shù)除以總行數(shù)(如果most_common_vals為空,則此列為空)。 |
histogram_bounds | 將列值劃分成大小接近的組的值列表,即直方圖列表。如果存在most_common_vals,其中的值會(huì)被直方圖計(jì)算所忽略。 |
correlation | 在Hologres內(nèi)無(wú)需關(guān)注。 |
most_common_elems | 在列值中,Most Common Values出現(xiàn)的非空元素列表。 |
most_common_elem_freqs | Most Common Values值的頻度列表,即含有至少一個(gè)給定值實(shí)例的行的分?jǐn)?shù)。(如果most_common_elems為空,則此列為空)。 |
elem_count_histogram | 在Hologres中無(wú)需關(guān)注。 |
pg_catalog.pg_roles
pg_roles用于存放實(shí)例內(nèi)角色及其權(quán)限信息,字段如下。
字段 | 說(shuō)明 |
rolname | 角色名稱。 |
rolsuper | 角色是否具有超級(jí)用戶權(quán)限,取值如下。
|
rolinherit | 如果此角色是另一個(gè)角色的成員,角色是否能自動(dòng)繼承,取值如下。
|
rolcreaterole | 能否創(chuàng)建更多角色,取值如下。
|
rolcreatedb | 能否創(chuàng)建數(shù)據(jù)庫(kù),取值如下。
|
rolcanlogin | 角色是否能登錄實(shí)例,取值如下。
|
rolreplication | 在Hologres內(nèi)無(wú)需關(guān)注。 |
rolconnlimit | 用戶的連接數(shù)限制,-1表示無(wú)限制。 |
rolpassword | 在Hologres內(nèi)無(wú)需關(guān)注。 |
rolvaliduntil | 在Hologres內(nèi)無(wú)需關(guān)注。 |
rolbypassrls | 在Hologres內(nèi)無(wú)需關(guān)注。 |
rolconfig | 在Hologres內(nèi)無(wú)需關(guān)注。 |
oid | 角色的ID,唯一標(biāo)志符。 |
information_schema.role_table_grants
Hologres實(shí)例中用戶角色被授予對(duì)象(表、視圖等)的權(quán)限信息表,其字段如下。
字段 | 描述 |
grantor | 授權(quán)方角色。 |
grantee | 被授權(quán)方角色。 |
table_catalog | 數(shù)據(jù)庫(kù)名稱。 |
table_schema | Schema名稱。 |
table_name | 表名稱。 |
privilege_type | 被授予權(quán)限的類型:
|
is_grantable | 如果權(quán)限是可授予的,則此列值為 |
with_hierarchy | 權(quán)限類型為SELECT時(shí),此列值為 |
常用SQL
一些常見(jiàn)命令可以通過(guò)psql簡(jiǎn)寫(xiě)來(lái)實(shí)現(xiàn),詳情請(qǐng)參見(jiàn)psql。同時(shí)也可以根據(jù)業(yè)務(wù)情況選擇使用如下提供的常見(jiàn)SQL。
查看表對(duì)應(yīng)的Hologres索引和屬性信息
SELECT * FROM hologres.hg_table_properties where table_name = '<tablename>';
tablename為表名稱。
查看表/視圖DDL
select hg_dump_script('<tablename>'); -- 表DDL
select hg_dump_script('<viewname>'); -- 視圖DDL
如果執(zhí)行失敗,需要使用如下命令在DB中創(chuàng)建extension。
create extension hg_toolkit;
查看實(shí)例的Endpoint
除了在Hologres管理控制臺(tái)查看實(shí)例的Endpoint外,還可以通過(guò)以下命令查看實(shí)例的Endpoint。
show hg_frontend_endpoints;
查看當(dāng)前實(shí)例下的所有數(shù)據(jù)庫(kù)
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;
列出當(dāng)前數(shù)據(jù)庫(kù)下所有User Mapping
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;
列出當(dāng)前數(shù)據(jù)庫(kù)下所有Schema
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;
列出當(dāng)前數(shù)據(jù)庫(kù)下所有表、外表和視圖
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;
查看當(dāng)前Schema下所有表以及表Owner(不包含系統(tǒng)表)
--查看當(dāng)前DB下所有表(包含系統(tǒng)表)
SELECT * FROM pg_tables
--查看當(dāng)前schema下所有表以及表owner(不包含系統(tǒng)表)
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;
查看父表對(duì)應(yīng)的所有子表
-- 含分區(qū)鍵值
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'
;
-- 不含分區(qū)鍵值
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';
查看所有子表的創(chuàng)建時(shí)間和所屬父表
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;
查看所有外部表以及外部表對(duì)應(yīng)的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')
;
列出當(dāng)前數(shù)據(jù)庫(kù)下所有視圖
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;
查看表被哪些view依賴
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.tablename>'::regclass::oid ORDER BY a.attnum;
其中schema.tablename為
{Schema名稱}.{表名稱}
。查看表的注釋并且包含表的Owner等相關(guān)信息。
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; --返回結(jié)果示例 List of relations Schema | Name | Type | Owner | Size | Description --------+------+-------+------------------+---------+------------- public | a | table | 1365937xxxx | xxxx bytes | abcdef (1 row)
只查看指定表的注釋信息:
select pg_catalog.obj_description('<tablename>'::regclass::oid, 'pg_class') as "Description"; --返回結(jié)果示例 Description ------------ abcdef
其中tablename為指定表名稱。
列出當(dāng)前數(shù)據(jù)庫(kù)下所有用戶和角色
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;
列出當(dāng)前數(shù)據(jù)庫(kù)下所有EXTENSIONS
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 != 'holo_dump_stat'
AND e.extname != 'query_log'
AND e.extname != 'plpgsql'
ORDER BY
1;
查看某個(gè)賬號(hào)的對(duì)應(yīng)權(quán)限
SELECT * FROM pg_roles where rolname='<uid>'
查看當(dāng)前實(shí)例下所有的用戶以及權(quán)限示例
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;
查看一個(gè)用戶有權(quán)限的所有表
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('<USERID>', c.relowner, 'USAGE'::text)
OR has_table_privilege('<USERID>', c.oid, 'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text)
OR has_any_column_privilege('<USERID>', c.oid, 'SELECT, INSERT, UPDATE, REFERENCES'::text));
查看一張表有權(quán)限的所有用戶
select rolname from pg_roles where has_table_privilege(rolname, '<schemaname>.<tablename>',
'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER');