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
pgou situées sousinformation_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
hgsont des tables système Hologres. Les tables préfixées parpgsont 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.
| Colonne | Description |
|---|---|
schemaname | Schéma contenant la table. Hologres propose trois schémas système : hologres, pg_catalog et information_schema. |
tablename | Nom de la table. |
tableowner | Proprié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. |
tablespace | Ne s'applique pas dans Hologres. |
hasindexes | true si la table possède ou a possédé un index. |
hasrules | true si la table possède ou a possédé une règle de réécriture. |
hastriggers | true si la table possède ou a possédé un déclencheur. |
rowsecurity | Ne 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.