Tous les produits
Search
Centre de documentation

Hologres:System tables

Dernière mise à jour :Aug 11, 2026

Hologres propose un ensemble de tables système pour interroger les métadonnées, les statistiques, les informations sur les verrous et les autorisations d'accès. Cette rubrique détaille les colonnes de chaque table système et présente les requêtes SQL courantes à exécuter.

Présentation générale

Hologres expose deux catégories de tables système :

  • Tables natives Hologres (préfixées par hg) : conçues spécifiquement pour Hologres, elles couvrent les propriétés et statistiques propres à Hologres, partagées entre tous les nœuds.

  • Tables compatibles PostgreSQL (préfixées par pg ou situées sous information_schema) : héritées de PostgreSQL. Certaines colonnes de ces tables ne s'appliquent pas dans Hologres, car Hologres est un système distribué et non une instance PostgreSQL autonome.

Table Source Description
hologres.hg_table_properties Native Hologres Propriétés et index de toutes les tables de la base de données actuelle.
hologres_statistic.hg_table_statistic Native Hologres Statistiques de table partagées entre tous les nœuds.
pg_catalog.pg_tables Compatible PostgreSQL Métadonnées de table, incluant le schéma, le propriétaire et les informations d'index.
pg_catalog.pg_locks Compatible PostgreSQL Informations sur les verrous en temps d'exécution. Utilisez cette table pour diagnostiquer les instructions DDL ou les requêtes bloquées.
pg_catalog.pg_class Compatible PostgreSQL Table de catalogue PostgreSQL contenant les métadonnées des relations. Généralement utilisée conjointement avec d'autres tables pg_catalog.
pg_catalog.pg_stats Compatible PostgreSQL Statistiques au niveau des colonnes utilisées par l'optimiseur PostgreSQL sur un seul nœud.
pg_catalog.pg_roles Compatible PostgreSQL Rôles et leurs autorisations dans une instance Hologres.
information_schema.role_table_grants Compatible PostgreSQL Autorisations accordées aux rôles sur les tables et les vues.

Limitations

  • Les tables préfixées par hg sont des tables système Hologres. Les tables préfixées par pg sont des tables système PostgreSQL. Dans les versions de Hologres antérieures à la V1.3.22, vous ne pouvez pas joindre les tables système PostgreSQL avec les tables internes Hologres, ni importer de données depuis les tables système PostgreSQL vers les tables internes Hologres. Effectuez une mise à niveau vers la V1.3.22 ou une version ultérieure pour lever cette restriction.

  • Dans Hologres, le champ d'identifiant d'objet (OID) d'une table système identifie de manière unique les relations telles que les tables, les index et les vues. Étant donné que Hologres est un système distribué comportant plusieurs nœuds frontend (FE), les valeurs OID peuvent différer d'un nœud à l'autre. Les résultats de requête incluant des valeurs OID peuvent donc être incohérents selon les nœuds.

hologres.hg_table_properties

Cette table contient les informations et propriétés de toutes les tables de la base de données actuelle.

Colonne Description
table_namespace Schéma contenant la table. Hologres propose trois schémas système : hologres (tables système Hologres), hologres_statistic (tables de statistiques) et pg_catalog (tables de métadonnées PostgreSQL).
table_name Nom de la table. Les tables système incluent : hologres.hg_insert_progress_stats, hologres.hg_table_properties, hologres.hg_table_group_properties, hologres_statistic.hg_table_statistic et pg_catalog.pg_stat_activity.
property_key Nom de la propriété. Valeurs valides : table_id, clustering_index_id, clustering_index_name, lifecycle_in_days (TTL ; -1 signifie valide en permanence), storage_format (sst pour les tables orientées ligne ; orc par défaut pour les tables orientées colonne en V0.10 ou ultérieure), table_group, schema_version, primary_key, orientation (row, column ou row,column pour le stockage hybride ligne-colonne pris en charge en V1.1 et ultérieure), distribution_key, dictionary_encoding_columns, bitmap_columns, clustering_key, create_time, last_ddl_time, storage_mode (hot pour le stockage standard ; cold pour le stockage Infrequent Access (IA)).
property_value Valeur de la propriété.

pg_catalog.pg_tables

Cette table contient les métadonnées de toutes les tables, y compris les tables créées par l'utilisateur et les tables système.

ColonneDescription
schemanameSchéma contenant la table. Hologres propose trois schémas système : hologres, pg_catalog et information_schema.
tablenameNom de la table.
tableownerPropriétaire de la table. holo_admin possède les tables système et cette valeur ne peut pas être modifiée. Les comptes pour lesquels le modèle d'autorisation simple (SPM) ou le modèle d'autorisation au niveau du schéma (SLPM) est activé apparaissent sous le nom developer.
tablespaceNe s'applique pas dans Hologres.
hasindexestrue si la table possède ou a possédé un index.
hasrulestrue si la table possède ou a possédé une règle de réécriture.
hastriggerstrue si la table possède ou a possédé un déclencheur.
rowsecurityNe s'applique pas dans Hologres.

pg_catalog.pg_locks

Cette table affiche les informations sur les verrous en temps d'exécution. Interrogez cette table pour déterminer si un verrou bloque une instruction DDL ou une requête.

Colonne Description
locktype Type d'objet verrouillable. Valeurs valides : relation (verrou de table) et advisory (verrou DDL). Les types de verrou PostgreSQL extend, page, tuple, transactionid, virtualxid, object et userlock ne s'appliquent pas dans Hologres.
database OID de la base de données contenant l'objet verrouillé.
relation OID de la table verrouillée. Null si l'objet n'est pas une table ou ne fait pas partie d'une table.
virtualxid ID de transaction virtuelle du verrou. Null si l'objet n'est pas un ID de transaction virtuelle.
transactionid ID de transaction. Null si l'objet n'est pas un ID de transaction.
pid ID de processus (PID) du processus serveur détenant ou attendant le verrou. Utilisez ce PID pour rechercher le processus dans pg_catalog.pg_stat_activity.
mode Mode de verrouillage : verrou partagé ou verrou exclusif.
granted true si le verrou est détenu ; false si le verrou est en attente.

Columns not applicable in Hologres: page, tuple, classid, objid, objsubid, virtualtransaction, fastpath.

pg_catalog.pg_class

Cette table contient les informations du catalogue PostgreSQL pour toutes les relations (tables, index, vues, etc.). Elle est généralement interrogée conjointement avec d'autres tables pg_catalog.

Étant donné que Hologres est un système distribué comportant plusieurs nœuds FE, les valeurs OID diffèrent généralement d'un nœud à l'autre. Les résultats de requête contenant des OID peuvent donc être incohérents.
Colonne Description
oid OID unique de la relation.
relname Nom de la relation.
relnamespace OID du schéma contenant la relation.
relowner Propriétaire de la relation.
reltuples Nombre estimé de lignes utilisé par l'optimiseur. Mis à jour par VACUUM, ANALYZE ou des instructions DDL. Dans Hologres, cette colonne spécifie le nombre de lignes statistiques.
relallvisible Nombre estimé de pages toutes visibles utilisé par l'optimiseur. Mis à jour par VACUUM, ANALYZE ou des instructions DDL. Dans Hologres, cette colonne spécifie la version des statistiques.
relhasindex true si la relation possède ou a possédé un index.
relisshared true si la table est partagée entre toutes les bases de données du cluster (par exemple, pg_catalog.pg_database). Ne s'applique pas dans Hologres.
relpersistence Persistance de la table : p (permanente), u (non journalisée) ou t (temporaire).
relkind Type de relation : r (table), i (index), S (séquence), v (vue), m (vue matérialisée), c (type composite), t (table TOAST), f (table étrangère).
relnatts Nombre de colonnes utilisateur, hors colonnes système.
relhaspkey true si la relation possède ou a possédé une clé primaire.
relhassubclass true si la relation possède ou a possédé une table enfant héritée.
relacl Autorisations d'accès pour la relation.
reloptions Propriétés de la table. Par exemple, autovacuum_enabled=false indique que les fonctions auto-vacuum et auto-analyze sont désactivées pour la table.

Colonnes ne s'appliquant pas dans Hologres : reltype, reloftype, relam, relfilenode, reltablespace, relpages, reltoastrelid, relchecks, relhasoids, relhasrules, relhastriggers, relispopulated, relreplident, relfrozenxid, relminmxid.

hologres_statistic.hg_table_statistic

Cette table contient les statistiques natives Hologres partagées entre tous les nœuds. Elle est mise à jour lorsque vous exécutez ANALYZE ou lorsque la fonctionnalité auto-analyze s'exécute.

Colonne Description
unique_name Identifiant unique de la table.
schema_version Version du schéma de la table.
statistic_version Version des statistiques.
statistics Contenu des statistiques, encodé en Base64.
schema_name Schéma contenant la table.
table_name Nom de la table.
total_rows Nombre total de lignes dans la table.
sample_rows Nombre de lignes échantillonnées pour la collecte des statistiques.
nattr Nombre de colonnes dans la table.
used_attrs Colonnes analysées par l'instruction ANALYZE.
histogram_attrs Colonnes pour lesquelles des statistiques d'histogramme sont collectées.
ndv_attrs Colonnes pour lesquelles des statistiques de valeurs distinctes (NDV) sont collectées.
user_name Utilisateur ayant exécuté ANALYZE ou déclenché auto-analyze.
analyze_timestamp Heure d'exécution de ANALYZE ou de déclenchement d'auto-analyze.
analyze_cost Temps nécessaire à ANALYZE ou à auto-analyze pour se terminer.
analyze_count Nombre d'exécutions de ANALYZE ou de déclenchements d'auto-analyze.

pg_catalog.pg_stats

Cette table contient les statistiques PostgreSQL au niveau des colonnes utilisées par l'optimiseur PostgreSQL mono-nœud.

Colonne Description
schemaname Nom du schéma.
tablename Nom de la table.
attname Nom de la colonne.
inherited true si les statistiques incluent des sous-colonnes héritées.
null_frac Fraction de lignes contenant des valeurs nulles dans cette colonne.
avg_width Largeur moyenne (en octets) des entrées de colonne.
n_distinct Nombre estimé de valeurs distinctes si positif. Si négatif, la valeur absolue représente le ratio de valeurs distinctes par rapport au nombre total de lignes (utilisé lorsque le nombre de valeurs distinctes devrait augmenter avec la taille de la table). Par exemple, -1 indique une colonne unique.
most_common_vals Liste des valeurs les plus courantes dans la colonne. Null si aucune valeur n'est suffisamment commune.
most_common_freqs Fréquences des valeurs les plus courantes, calculées comme le nombre d'occurrences divisé par le nombre total de lignes. Null si most_common_vals est null.
histogram_bounds Valeurs divisant la plage de valeurs de la colonne en groupes de taille approximativement égale. Les valeurs figurant dans most_common_vals sont exclues de cet histogramme.
most_common_elems Valeurs d'éléments non nuls les plus courantes au sein des valeurs de colonne de type tableau.
most_common_elem_freqs Fréquences des valeurs d'élément les plus courantes : fraction de lignes contenant au moins une occurrence de chaque valeur. Null si most_common_elems est null.

Colonnes ne s'appliquant pas dans Hologres : correlation, elem_count_histogram.

pg_catalog.pg_roles

Cette table répertorie tous les rôles d'une instance Hologres et leurs autorisations.

Colonne Description
rolname Nom du rôle.
rolsuper t si le rôle dispose de privilèges superutilisateur ; f sinon.
rolinherit t si le rôle hérite des autorisations de tout rôle dont il est membre ; f sinon.
rolcreaterole t si le rôle peut créer d'autres rôles ; f sinon.
rolcreatedb t si le rôle peut créer des bases de données ; f sinon.
rolcanlogin t si le rôle peut se connecter aux instances ; f sinon.
rolconnlimit Nombre maximal de connexions simultanées que le rôle peut établir. Si la valeur est -1, le nombre maximal de connexions simultanées n'est pas configuré dans Hologres.
oid OID unique du rôle.

Colonnes ne s'appliquant pas dans Hologres : rolreplication, rolpassword, rolvaliduntil, rolbypassrls, rolconfig.

information_schema.role_table_grants

Cette table répertorie les autorisations accordées aux rôles sur les tables et les vues d'une instance Hologres.

Colonne Description
grantor Rôle ayant accordé l'autorisation.
grantee Rôle ayant reçu l'autorisation.
table_catalog Nom de la base de données.
table_schema Nom du schéma.
table_name Nom de la table.
privilege_type Type d'autorisation accordée. Valeurs valides : SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER.
is_grantable YES si l'autorisation peut être accordée à d'autres ; NO sinon.
with_hierarchy YES si le type d'autorisation est SELECT ; NO sinon.

Requêtes SQL courantes

Vous pouvez exécuter toutes les requêtes de cette section à l'aide de psql ou de tout client compatible PostgreSQL.

Interroger les propriétés et index des tables

SELECT * FROM hologres.hg_table_properties WHERE table_name = '<table_name>';

Récupérer le DDL d'une table ou d'une vue

-- Retrieve the DDL for a table
SELECT hg_dump_script('<table_name>');

-- Retrieve the DDL for a view
SELECT hg_dump_script('<view_name>');
Si la requête échoue, installez d'abord l'extension hg_toolkit :
CREATE EXTENSION hg_toolkit;

Interroger l'endpoint de l'instance

SHOW hg_frontend_endpoints;

Répertorier toutes les bases de données de l'instance actuelle

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;

Répertorier tous les mappages d'utilisateurs de la base de données actuelle

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;

Répertorier tous les schémas de la base de données actuelle

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;

Répertorier toutes les tables, tables étrangères et vues de la base de données actuelle

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;

Répertorier toutes les tables et propriétaires du schéma actuel (hors tables système)

-- Include system tables
SELECT * FROM pg_tables;

-- Exclude system 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;

Répertorier les tables enfants d'une table parente

-- With partition key values
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';

-- Without partition key values
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>';

Répertorier les tables enfants avec leur heure de création et la table parente

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;

Répertorier toutes les tables étrangères et leurs tables MaxCompute correspondantes

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

Répertorier toutes les vues de la base de données actuelle

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;

Trouver les vues qui dépendent d'une table

SELECT * FROM information_schema.view_table_usage WHERE table_name = '<table_name>';

Interroger les commentaires de colonne et de table

-- Query column comments for a table
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;

Remplacez <schema_name>.<table_name> par le schéma et le nom de table réels.

-- Query table comments and related metadata (owner, size)
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;
-- Query the comment on a specific table
SELECT pg_catalog.obj_description('<table_name>'::regclass::oid, 'pg_class') AS "Description";

Répertorier tous les utilisateurs et rôles d'une base de données

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_'
    AND r.rolname != 'holo_admin'
ORDER BY 1;

Répertorier toutes les extensions d'une base de données

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;

Vérifier les autorisations d'un compte

SELECT * FROM pg_roles WHERE rolname = '<uid>';

Répertorier tous les utilisateurs d'une instance et leurs autorisations

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;

Répertorier toutes les tables sur lesquelles un utilisateur dispose d'autorisations

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

Remplacez <user_id> par l'ID utilisateur réel.

Répertorier tous les utilisateurs disposant d'autorisations sur une table

SELECT rolname
FROM pg_roles
WHERE has_table_privilege(rolname, '<schema_name>.<table_name>',
    'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER');

Remplacez <schema_name>.<table_name> par le schéma et le nom de table réels.