O Hologres oferece um conjunto de tabelas de sistema para consultar metadados, estatísticas, informações de bloqueio e permissões de acesso. Este tópico aborda as colunas de cada tabela de sistema e consultas SQL comuns executáveis nessas tabelas.
Visão geral
O Hologres expõe duas categorias de tabelas de sistema:
Tabelas nativas do Hologres (com prefixo
hg): desenvolvidas especificamente para o Hologres, abrangendo propriedades e estatísticas específicas compartilhadas entre todos os nós.Tabelas compatíveis com PostgreSQL (com prefixo
pgou sobinformation_schema): herdadas do PostgreSQL. Algumas colunas nessas tabelas não se aplicam ao Hologres, pois ele é um sistema distribuído, e não uma instância independente de PostgreSQL.
|
Tabela |
Origem |
Descrição |
|
|
Nativa do Hologres |
Propriedades e índices de todas as tabelas no banco de dados atual. |
|
|
Nativa do Hologres |
Estatísticas de tabelas compartilhadas entre todos os nós. |
|
|
Compatível com PostgreSQL |
Metadados da tabela, incluindo schema, proprietário e informações de índice. |
|
|
Compatível com PostgreSQL |
Informações de bloqueio em tempo de execução. Utilize esta tabela para diagnosticar instruções DDL ou consultas bloqueadas. |
|
|
Compatível com PostgreSQL |
Tabela de catálogo do PostgreSQL contendo metadados de relações. Geralmente usada em conjunto com outras tabelas do |
|
|
Compatível com PostgreSQL |
Estatísticas no nível de coluna usadas pelo planejador do PostgreSQL em um único nó. |
|
|
Compatível com PostgreSQL |
Funções e suas permissões em uma instância do Hologres. |
|
|
Compatível com PostgreSQL |
Permissões concedidas a funções em tabelas e visualizações. |
Limitações
As tabelas com prefixo
hgsão tabelas de sistema do Hologres. As tabelas com prefixopgsão tabelas de sistema do PostgreSQL. Em versões do Hologres anteriores à V1.3.22, não é possível unir tabelas de sistema do PostgreSQL com tabelas internas do Hologres nem importar dados das tabelas de sistema do PostgreSQL para tabelas internas do Hologres. Atualize para a versão V1.3.22 ou posterior para remover essa restrição.No Hologres, o campo de identificador de objeto (OID) em uma tabela de sistema identifica exclusivamente relações como tabelas, índices e visualizações. Como o Hologres é um sistema distribuído com vários nós de frontend (FE), os valores de OID podem diferir entre os nós. Resultados de consultas que incluem valores de OID podem apresentar inconsistências entre os nós.
hologres.hg_table_properties
Esta tabela contém informações e propriedades de todas as tabelas no banco de dados atual.
|
Coluna |
Descrição |
|
|
O schema que contém a tabela. O Hologres fornece três schemas de sistema: |
|
|
O nome da tabela. As tabelas de sistema incluem: |
|
|
O nome da propriedade. Valores válidos: |
|
|
O valor da propriedade. |
pg_catalog.pg_tables
Esta tabela contém metadados de todas as tabelas, incluindo tabelas criadas pelo usuário e tabelas de sistema.
| Coluna | Descrição |
|---|---|
schemaname | O schema que contém a tabela. O Hologres fornece três schemas de sistema: hologres, pg_catalog e information_schema. |
tablename | O nome da tabela. |
tableowner | O proprietário da tabela. O holo_admin possui as tabelas de sistema e esse valor não pode ser alterado. Contas com o modelo de permissão simples (SPM) ou modelo de permissão no nível de schema (SLPM) ativado aparecem como developer. |
tablespace | Não se aplica ao Hologres. |
hasindexes | true se a tabela tem ou teve um índice. |
hasrules | true se a tabela tem ou teve uma regra de reescrita. |
hastriggers | true se a tabela tem ou teve um gatilho. |
rowsecurity | Não se aplica ao Hologres. |
pg_catalog.pg_locks
Esta tabela exibe informações de bloqueio em tempo de execução. Consulte-a para determinar se um bloqueio está impedindo a execução de uma instrução DDL ou consulta.
|
Coluna |
Descrição |
|
|
O tipo do objeto bloqueável. Valores válidos: |
|
|
O OID do banco de dados que contém o objeto bloqueado. |
|
|
O OID da tabela bloqueada. Nulo se o objeto não for uma tabela ou parte de uma tabela. |
|
|
O ID de transação virtual do bloqueio. Nulo se o objeto não for um ID de transação virtual. |
|
|
O ID da transação. Nulo se o objeto não for um ID de transação. |
|
|
O ID do processo (PID) do processo do servidor que mantém ou aguarda o bloqueio. Use este PID para localizar o processo em |
|
|
O modo de bloqueio: bloqueio compartilhado ou bloqueio exclusivo. |
|
|
|
Columns not applicable in Hologres: page, tuple, classid, objid, objsubid, virtualtransaction, fastpath.
pg_catalog.pg_class
Esta tabela contém informações do catálogo PostgreSQL para todas as relações (tabelas, índices, visualizações, entre outros). Normalmente, é consultada em conjunto com outras tabelas do pg_catalog.
Como o Hologres é um sistema distribuído com vários nós FE, os valores de OID geralmente diferem entre os nós. Resultados de consultas contendo OIDs podem ser inconsistentes.
|
Coluna |
Descrição |
|
|
O OID exclusivo da relação. |
|
|
O nome da relação. |
|
|
O OID do schema que contém a relação. |
|
|
O proprietário da relação. |
|
|
A contagem estimada de linhas usada pelo planejador. Atualizada por |
|
|
O número estimado de páginas totalmente visíveis usado pelo planejador. Atualizado por |
|
|
|
|
|
|
|
|
Persistência da tabela: |
|
|
Tipo de relação: |
|
|
O número de colunas de usuário, excluindo colunas de sistema. |
|
|
|
|
|
|
|
|
Permissões de acesso para a relação. |
|
|
Propriedades da tabela. Por exemplo, |
Colunas não aplicáveis no Hologres: reltype, reloftype, relam, relfilenode, reltablespace, relpages, reltoastrelid, relchecks, relhasoids, relhasrules, relhastriggers, relispopulated, relreplident, relfrozenxid, relminmxid.
hologres_statistic.hg_table_statistic
Esta tabela contém estatísticas nativas do Hologres compartilhadas entre todos os nós. Ela é atualizada quando você executa ANALYZE ou quando o recurso de auto-analyze é acionado.
|
Coluna |
Descrição |
|
|
O identificador exclusivo da tabela. |
|
|
A versão do schema da tabela. |
|
|
A versão das estatísticas. |
|
|
O conteúdo das estatísticas, codificado em Base64. |
|
|
O schema que contém a tabela. |
|
|
O nome da tabela. |
|
|
O número total de linhas na tabela. |
|
|
O número de linhas amostradas para coleta de estatísticas. |
|
|
O número de colunas na tabela. |
|
|
As colunas analisadas pela instrução |
|
|
As colunas para as quais estatísticas de histograma são coletadas. |
|
|
As colunas para as quais estatísticas de valores distintos (NDV) são coletadas. |
|
|
O usuário que executou |
|
|
O momento em que |
|
|
O tempo necessário para concluir |
|
|
O número de vezes que |
pg_catalog.pg_stats
Esta tabela contém estatísticas no nível de coluna do PostgreSQL usadas pelo planejador do PostgreSQL de nó único.
|
Coluna |
Descrição |
|
|
O nome do schema. |
|
|
O nome da tabela. |
|
|
O nome da coluna. |
|
|
|
|
|
A fração de linhas com valores nulos nesta coluna. |
|
|
A largura média (em bytes) das entradas da coluna. |
|
|
O número estimado de valores distintos, se positivo. Se negativo, o valor absoluto representa a proporção de valores distintos em relação ao total de linhas (usado quando se espera que o número de valores distintos cresça junto com a tabela). Por exemplo, |
|
|
Uma lista dos valores mais comuns na coluna. Nulo se nenhum valor for suficientemente comum. |
|
|
As frequências dos valores mais comuns, calculadas como ocorrências divididas pelo total de linhas. Nulo se |
|
|
Valores que dividem o intervalo de valores da coluna em grupos de tamanho aproximadamente igual. Os valores em |
|
|
Os valores de elementos não nulos mais comuns dentro de valores de coluna do tipo array. |
|
|
As frequências dos valores de elementos mais comuns: a fração de linhas contendo pelo menos uma instância de cada valor. Nulo se |
Colunas não aplicáveis no Hologres: correlation, elem_count_histogram.
pg_catalog.pg_roles
Esta tabela lista todas as funções em uma instância do Hologres e suas permissões.
|
Coluna |
Descrição |
|
|
O nome da função. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
O número máximo de conexões simultâneas que a função pode estabelecer. Se o valor for |
|
|
O OID exclusivo da função. |
Colunas não aplicáveis no Hologres: rolreplication, rolpassword, rolvaliduntil, rolbypassrls, rolconfig.
information_schema.role_table_grants
Esta tabela lista as permissões concedidas a funções em tabelas e visualizações em uma instância do Hologres.
|
Coluna |
Descrição |
|
|
A função que concedeu a permissão. |
|
|
A função que recebeu a permissão. |
|
|
O nome do banco de dados. |
|
|
O nome do schema. |
|
|
O nome da tabela. |
|
|
O tipo de permissão concedida. Valores válidos: |
|
|
|
|
|
|
Consultas SQL comuns
Todas as consultas nesta seção podem ser executadas usando psql ou qualquer cliente compatível com PostgreSQL.
Consultar propriedades e índices de tabelas
SELECT * FROM hologres.hg_table_properties WHERE table_name = '<table_name>';
Recuperar o DDL de uma tabela ou visualização
-- Retrieve the DDL for a table
SELECT hg_dump_script('<table_name>');
-- Retrieve the DDL for a view
SELECT hg_dump_script('<view_name>');
Se a consulta falhar, instale primeiro a extensão hg_toolkit:
CREATE EXTENSION hg_toolkit;
Consultar o endpoint da instância
SHOW hg_frontend_endpoints;
Listar todos os bancos de dados na instância atual
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;
Listar todos os mapeamentos de usuários no banco de dados atual
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;
Listar todos os schemas no banco de dados atual
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;
Listar todas as tabelas, tabelas externas e visualizações no banco de dados atual
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;
Listar todas as tabelas e proprietários no schema atual (excluindo tabelas de sistema)
-- 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;
Listar tabelas filhas de uma tabela pai
-- 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>';
Listar tabelas filhas com horário de criação e tabela pai
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;
Listar todas as tabelas externas e suas tabelas MaxCompute correspondentes
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');
Listar todas as visualizações no banco de dados atual
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;
Encontrar visualizações que dependem de uma tabela
SELECT * FROM information_schema.view_table_usage WHERE table_name = '<table_name>';
Consultar comentários de colunas e comentários de tabelas
-- 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;
Substitua <schema_name>.<table_name> pelo schema e nome da tabela reais.
-- 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";
Listar todos os usuários e funções em um banco de dados
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;
Listar todas as extensões em um banco de dados
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;
Verificar as permissões de uma conta
SELECT * FROM pg_roles WHERE rolname = '<uid>';
Listar todos os usuários de uma instância e suas permissõ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_'
ORDER BY 1;
Listar todas as tabelas nas quais um usuário tem permissões
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)
);
Substitua <user_id> pelo ID de usuário real.
Listar todos os usuários que têm permissões em uma tabela
SELECT rolname
FROM pg_roles
WHERE has_table_privilege(rolname, '<schema_name>.<table_name>',
'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER');
Substitua <schema_name>.<table_name> pelo schema e nome da tabela reais.