全部產品
Search
文件中心

Hologres:系統資料表

更新時間:Aug 15, 2024

本文將會為您介紹Hologres中的系統資料表以及每個表如何使用。

概述

Hologres系統資料表的組成如下表所示。

表名

使用情境

hologres.hg_table_properties

查看當前資料庫下Hologres所有表以及表屬性。

pg_catalog.pg_tables

查看錶、視圖等關係的資訊。

pg_catalog.pg_locks

查看錶的鎖資訊。

pg_catalog.pg_class

PostgreSQL原生中繼資料表,一般是結合其他PostgreSQL系統資料表一起使用,查看錶關係等資訊。

hologres_statistic.hg_table_statistic

Hologres的統計資訊表,用於多節點共用統計資訊儲存。

pg_catalog.pg_stats

PostgreSQL原生統計資訊表,在單節點本地直接供planner使用。

pg_catalog.pg_roles

查看執行個體內角色及其許可權資訊。

information_schema.role_table_grants

查看使用者角色被授予對象(表、視圖等)的許可權資訊。

使用限制

  • 表名稱以hg開頭的是Hologres系統資料表,以pg開頭的是PostgreSQL系統資料表,簡稱PG系統資料表。PG系統資料表不能與業務建立的表進行關聯查詢,也不能將PG系統資料表的資料匯入至業務建立的表中。

    說明

    Hologres 從V1.3.22版本開始,支援PG系統資料表與業務建立的表進行Join,以及將系統資料表資料匯出到Hologres表,但需注意,如果存在Hologres不支援的資料類型,則無法匯出到Hologres表,也無法與Hologres表進行Join。如果有需求請您升級執行個體。

  • 在Hologres中,系統資料表中的OID欄位表示表、索引、視圖等關係的唯一標誌符。但Postgres是單機系統,Hologres是分布式系統,有多個FE節點,每個FE節點的OID序列通常不相同。所以當查詢結果中有OID時,可能會出現OID結果不一致的情況。

hologres.hg_table_properties

hologres.hg_table_properties用於存放當前資料庫下的所有表和表屬性,包含如下欄位。

欄位

說明

table_namespace

Schema名稱,Hologres會包含3個系統Schema:

  • hologres:用於Hologres的系統資料表。

  • hologres_statistic:用於存放統計資訊表。

  • pg_catalog:用於PostgreSQL原生的中繼資料表。

table_name

表名稱,Hologres包含多個系統資料表,如下。

  • hologres.hg_insert_progress_stats:insert進度資訊。

  • hologres.hg_table_properties:表的索引、屬性資訊。

  • hologres.hg_table_group_properties:Table Group元資訊。

  • hologres_statistic.hg_table_statistic:存放統計資訊。

  • pg_catalog.pg_stat_activity:Query運行資料。

property_key

表屬性,包含如下屬性。

  • table_id:表的ID資訊,後端會給每個表分配一個ID,方便身份識別。

  • clustering_index_id:Clustering索引的ID資訊。

  • clustering_index_name:Clustering索引的名稱。

  • lifecycle_in_days:表的存留時間TTL,值為-1表示永久生效,目前Hologres不支援修改。

  • storage_format:表資料的儲存格式,行存表為sst,列存表從HologresV0.10版本開始預設為orc

  • table_group:表所在的Table Group名稱。

  • schema_version:表的版本資訊。

  • primary_key:表的主鍵資訊。

  • orientation:表的儲存模式,有以下三種模式。

    • row:行存。

    • column:列存。

    • row,column:行列混存(HologresV1.1版本開始支援)。

  • distribution_key:設定的分布列資訊。

  • dictionary_encoding_columns:設定的字典編碼列資訊。

  • bitmap_columns:設定的Bitmap編碼列。

  • clustering_key:設定的Clustering key(聚簇索引)資訊。

  • create_time:表的建立時間。

  • last_ddl_time:最後執行DDL的時間。

  • storage_mode:表的階層式存放區屬性。

    • hot:標準儲存

    • cold:低頻儲存

property_value

表屬性的值。

pg_catalog.pg_tables

pg_tables儲存表的元資訊,包含如下欄位。

欄位

描述

schemaname

表所在的Schema名稱,除了業務建立的Schema外,還包含系統Schema名稱如下。

  • hologres:儲存Hologres的系統資料表。

  • pg_catalog:儲存Postgres的中繼資料資訊。

  • information_schema:儲存當前資料庫物件資訊的視圖。

tablename

表名稱。

tableowner

表的Owner。

developer使用者組:開啟了簡單許可權模型(SPM)或者基於Schema層級的簡單許可權模型(簡稱SLPM)。

tablespace

Hologres無此概念,無需關注

hasindexes

如果表有(或最近有過)任何一個索引,此列為true。

hasrules

如果表有(或曾經有過)規則,此列為true。

hastriggers

如果表有(或曾經有過)觸發器,此列為true。

rowsecurity

如果表上啟用了安全性規則,此列為true。在Hologres中無需關注。

pg_catalog.pg_locks

pg_locks記錄運行時的鎖資訊,常用於當發現DDL卡住或者Query卡住時,定位是否有鎖,其欄位如下。

欄位

說明

locktype

鎖的類型,包含如下類型。

  • relation:表鎖。

  • extend、page、tuple、transactionid、virtualxid、object、userlock:Postgres原生鎖,在Hologres內無需關注。

  • advisory:DDL鎖。

database

目標所在的資料庫的物件識別碼(OID)。

relation

表的物件識別碼(OID),如果目標不是表,也不是表的一部分,則為null。

page

在Hologres內無需關注。

tuple

在Hologres內無需關注。

virtualxid

事務的虛擬ID,如果目標不是虛擬事務ID,就為null。

transactionid

事務的ID,如果目標不是事務ID,就為null。

classid

包含該目標的系統資料表的物件識別碼(OID),如果目標不是普通資料庫物件,則為null。在Hologres內無需關注。

objid

在Hologres內無需關注。

objsubid

在Hologres內無需關注。

virtualtransaction

持有或者等待此鎖的事務ID。在Hologres內無需關注。

pid

持有或者等待這個鎖的伺服器處理序的進程 ID,可以通過pg_stat_activity這個表查看進程資訊。

mode

這個進程的鎖模式,分為共用鎖定和獨佔鎖定等模式。

granted

  • 如果持有鎖,為true。

  • 如果等待鎖,為false。

fastpath

  • 如果鎖通過快速路徑獲得為true。

  • 如果通過主鎖表獲得為false。

在Hologres內無需關注。

pg_catalog.pg_class

pg_class用於儲存原生Postgres的所有系統資訊,包含如下欄位。

名字

說明

oid

表、索引、視圖等關係的唯一標誌符。

說明

Postgres是單機系統,Hologres是分布式系統,有多個FE節點,每個FE節點的OID序列通常不相同。所以當查詢結果中有OID時,可能會出現OID結果不一致的情況。

relname

表、索引、視圖等關係的名稱。

relnamespace

包含這個關係的Schema的OID。

reltype

在Hologres內無需關注。

reloftype

在Hologres內無需關注。

relowner

關係的Owner。

relam

在Hologres內無需關注。

relfilenode

在Hologres內無需關注。

reltablespace

在Hologres內無需關注。

relpages

在Hologres內無需關注。

reltuples

表中行的數目。只是查詢規劃器使用的一個估計值,由VACUUM、ANALYZE和幾個DDL命令更新。在Hologres中用作統計資訊的行數。

relallvisible

在表的可見映射中標記所有可見的頁的數目。只是查詢規劃器使用的一個估計值, 由VACUUM、ANALYZE 和幾個 DDL 命令更新。在Hologres中用作統計資訊的版本

reltoastrelid

在Hologres內無需關注。

relhasindex

如果它是一個表而且至少有(或者最近有過)一個索引,則為true。

relisshared

如果該表在整個叢集中由所有資料庫共用則為true。只有某些系統資料表(比如pg_database)是共用的,在Hologres內無需關注。

relpersistence

有如下值。

  • p:permanent table(永久表)。

  • u:unlogged table(未載入的表)。

  • t: temporary table (暫存資料表)。

relkind

有如下值。

  • r:ordinary table(普通表)。

  • i: index(索引)。

  • S:sequence(序列)。

  • v:view(視圖)。

  • m: materialized view(物化視圖)。

  • c: composite type(複合類型)。

  • t: TOAST table(TOAST 表)。

  • f:foreign table(外部表格)。

relnatts

表中列的數目(不包含系統欄位)。

relchecks

表裡的CHECK約束的數目,詳情請參見pg_constraint,在Hologres內無需關注。

relhasoids

如果為關係中每行都產生一個OID則為true。在Hologres內無需關注。

relhaspkey

如果這個表有一個(或者曾經有一個)主鍵,則為true。

relhasrules

如果這個表有(或曾經有)規則就為true,詳情請參見pg_rewrite。在Hologres內無需關注。

relhastriggers

如果表有(或者曾經有)觸發器,則為true,詳情見pg_trigger。在Hologres內無需關注。

relhassubclass

如果表有(或者曾經有)任何繼承的子表,則為true。

relispopulated

在Hologres內無需關注。

relreplident

在Hologres內無需關注。

relfrozenxid

在Hologres內無需關注。

relminmxid

在Hologres內無需關注。

relacl

存取權限。詳情請參見GRANTREVOKE

reloptions

表的屬性,例如autovacuum_enabled=false代表關閉此表的autovacuum/autoanalyze功能。

hologres_statistic.hg_table_statistic

Hologres的統計資訊表,其欄位如下。

欄位

說明

unique_name

表的唯一標誌。

schema_version

表的版本號碼。

statistic_version

統計資訊版本。

statistics

統計資訊內容,Base64編碼。

schema_name

表所在Schema名稱。

table_name

表名稱。

total_rows

總行數。

sample_rows

本統計資訊的採樣行數。

nattr

表的欄位個數。

used_attrs

Analyze用到的欄位。

histogram_attrs

具備長條圖統計資訊的欄位。

ndv_attrs

具備distinct value統計資訊的欄位。

user_name

Analyze或者Auto Analyze的執行者。

analyze_timestamp

Analyze或者Auto Analyze的執行開始時間。

analyze_cost

Analyze或者Auto Analyze的耗時。

analyze_count

Analyze或者Auto Analyze的次數。

pg_catalog.pg_stats

pg_stats用於儲存Postgres原生的統計資訊,欄位如下。

欄位

說明

schemaname

Schema名稱。

tablename

表名稱。

attname

列名(欄位名)。

inherited

如果為true,表示此行包括繼承子列。

null_frac

記錄中欄位為空白的百分比。

avg_width

列的平均位元組寬度。

n_distinct

  • 大於零,表示列中distinct值的估計個數。

  • 小於零,是distinct值個數除以行數的負值(當ANALYZE認為distinct值的數量會隨著表增長而增加時採用負值的形式,而如果認為列具有固定數量的distinct值時採用正值的形式)。

例如,-1表示一個唯一列,即其中distinct值的個數等於行數。

most_common_vals

列中Most Common Values的一個列表(如果沒有任何一個值看起來比其他值更常用,此列為空白)。

most_common_freqs

Most Common Values值的頻率列表,即每一個常用值的出現次數除以總行數(如果most_common_vals為空白,則此列為空白)。

histogram_bounds

將列值劃分成大小接近的組的值列表,即長條圖列表。如果存在most_common_vals,其中的值會被長條圖計算所忽略。

correlation

在Hologres內無需關注。

most_common_elems

在列值中,Most Common Values出現的非空元素列表。

most_common_elem_freqs

Most Common Values值的頻度列表,即含有至少一個給定值執行個體的行的分數。(如果most_common_elems為空白,則此列為空白)。

elem_count_histogram

在Hologres中無需關注。

pg_catalog.pg_roles

pg_roles用於存放執行個體內角色及其許可權資訊,欄位如下。

欄位

說明

rolname

角色名稱。

rolsuper

角色是否具有超級使用者權限,取值如下。

  • f:無超級使用者權限。

  • t:有超級使用者權限。

rolinherit

如果此角色是另一個角色的成員,角色是否能自動繼承,取值如下。

  • f:不可以繼承另一個角色的許可權。

  • t:可以繼承另一個角色的許可權。

rolcreaterole

能否建立更多角色,取值如下。

  • f:不可以建立更多角色。

  • t:可以建立更多角色。

rolcreatedb

能否建立資料庫,取值如下。

  • f:不可以建立資料庫。

  • t:可以建立資料庫。

rolcanlogin

角色是否能登入執行個體,取值如下。

  • f:不可以登入執行個體。

  • t:可以登入執行個體。

rolreplication

在Hologres內無需關注。

rolconnlimit

使用者的串連數限制,-1表示無限制。

rolpassword

在Hologres內無需關注。

rolvaliduntil

在Hologres內無需關注。

rolbypassrls

在Hologres內無需關注。

rolconfig

在Hologres內無需關注。

oid

角色的ID,唯一標誌符。

information_schema.role_table_grants

Hologres執行個體中使用者角色被授予對象(表、視圖等)的許可權資訊表,其欄位如下。

欄位

描述

grantor

授權方角色。

grantee

被授權方角色。

table_catalog

資料庫名稱。

table_schema

Schema名稱。

table_name

表名稱。

privilege_type

被授予許可權的類型:

  • SELECT。

  • INSERT。

  • UPDATE。

  • DELETE。

  • TRUNCATE。

  • REFERENCES。

  • TRIGGER。

is_grantable

如果許可權是可授予的,則此列值為YES,否則為NO

with_hierarchy

權限類別型為SELECT時,此列值為YES,其他權限類別型時值為NO

常用SQL

一些常見命令可以通過psql簡寫來實現,詳情請參見psql。同時也可以根據業務情況選擇使用如下提供的常見SQL。

查看錶對應的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
說明

如果執行失敗,需要使用如下命令在DB中建立extension。

create extension hg_toolkit;

查看執行個體的Endpoint

除了在Hologres管理主控台查看執行個體的Endpoint外,還可以通過以下命令查看執行個體的Endpoint。

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;

列出當前資料庫下所有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;

列出當前資料庫下所有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;

列出當前資料庫下所有表、外表和視圖

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;

查看當前Schema下所有表以及表Owner(不包含系統資料表)

--查看當前DB下所有表(包含系統資料表)
SELECT * FROM pg_tables


--查看當前schema下所有表以及表owner(不包含系統資料表)
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;

查看錶被哪些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等相關資訊。

    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;
    
    
    --返回結果樣本
                            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";
    
    --返回結果樣本
    Description
    ------------
    abcdef

    其中tablename為指定表名稱。

列出當前資料庫下所有使用者和角色

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;

列出當前資料庫下所有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;

查看某個帳號的對應許可權

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('<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));

查看一張表有許可權的所有使用者

select rolname from pg_roles where has_table_privilege(rolname, '<schemaname>.<tablename>',
 'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER');