9.27. Funções e operadores de informação do sistema #

9.27.1. Funções de informação de sessão
9.27.2. Funções de consulta a privilégio de acesso
9.27.3. Funções de consulta da visibilidade do esquema
9.27.4. Funções de extração de informação do catálogo do sistema
9.27.5. Funções de informação e endereçamento de objetos
9.27.6. Funções de informação de comentário
9.27.7. Funções de verificação da validade dos dados
9.27.8. Funções de identificação de transação e informação de instantâneo
9.27.9. Funções de informação de transação efetivada
9.27.10. Funções de dados de controle
9.27.11. Funções de informações de versão
9.27.12. Funções de resumo de informações do WAL

As funções descritas nesta seção são usadas para obter diversas informações sobre uma instalação do PostgreSQL.

9.27.1. Funções de informação de sessão #

A Tabela 9.71 descreve várias funções que extraem informações sobre a sessão e o sistema.

Além das funções listadas nesta seção, existem várias funções relacionadas ao sistema de estatísticas que também fornecem informações sobre o sistema. Veja a Seção 27.2.26 para obter mais informações.

Tabela 9.71. Funções de informação de sessão

Função

Descrição

current_catalogname

current_database () → name

Retorna o nome do banco de dados corrente. (Os bancos de dados são chamados de catálogos no padrão SQL, portanto current_catalog é o termo do padrão.)

current_query () → text

Retorna o texto da consulta em execução no momento, conforme enviado pelo cliente (podendo conter mais de uma instrução).

current_rolename

É equivalente à função current_user.

current_schemaname

current_schema () → name

Retorna o nome do esquema que está em primeiro lugar no caminho de procura (ou o valor NULL, se o caminho de procura estiver vazio). Este é o esquema que será usado para quaisquer tabelas ou outros objetos com nome criados sem especificar o esquema de destino.

current_schemas ( include_implicit boolean ) → name[]

Retorna a matriz dos nomes de todos os esquemas presentes no caminho de procura, em sua ordem de prioridade. (Os itens presentes no parâmetro de configuração search_path corrente, que não correspondem aos esquemas procuráveis existentes, são omitidos.) Se o argumento booleano for true, então os esquemas do sistema procurados implicitamente, como pg_catalog, são incluídos no resultado.

current_username

Retorna o nome do usuário do contexto de execução corrente.

inet_client_addr () → inet

Retorna o endereço IP do cliente corrente, ou NULL se a conexão corrente for através de um soquete de domínio Unix.

inet_client_port () → integer

Retorna o número da porta IP do cliente corrente, ou NULL se a conexão corrente for através de um soquete de domínio Unix.

inet_server_addr () → inet

Retorna o endereço IP no qual o servidor aceitou a conexão corrente, ou NULL se a conexão corrente for através de um soquete de domínio Unix.

inet_server_port () → integer

Retorna o número da porta IP na qual o servidor aceitou a conexão corrente, ou NULL se a conexão corrente for através de um soquete de domínio Unix.

pg_backend_pid () → integer

Retorna o ID do processo servidor anexado à sessão corrente.

pg_blocking_pids ( integer ) → integer[]

Retorna a matriz do(s) ID(s) de processo das sessões que estão bloqueando o processo servidor com o ID de processo especificado em adquirir o bloqueio, ou retorna uma matriz vazia caso não haja esse processo servidor, ou não estiver bloqueado.

Um processo servidor bloqueia outro se possuir um bloqueio que esteja em conflito com a solicitação de bloqueio do processo bloqueado (hard block), ou está aguardando por um bloqueio que entraria em conflito com a solicitação de bloqueio do processo bloqueado e está à frente dele na fila de espera (soft block). Ao usar consultas paralelas, o resultado sempre lista os IDs de processos visíveis para o cliente (ou seja, resultados de pg_backend_pid), mesmo que o bloqueio real esteja mantido ou aguardado por um processo trabalhador filho. Como resultado disso, pode ter PIDs duplicados no resultado. Note também que, quando a transação preparada contém um bloqueio conflitante, será representada por um ID de processo zero.

Chamadas frequentes a esta função podem causar algum impacto no desempenho do servidor de banco de dados, porque o servidor precisa de acesso exclusivo ao estado compartilhado do gerenciador de bloqueios por um curto período de tempo.

pg_conf_load_time () → timestamp with time zone

Retorna a hora que os arquivos de configuração do servidor foram carregados da última vez. Se a sessão corrente estava ativa no momento, este será o momento no qual a própria sessão recarregou os arquivos de configuração (então a leitura irá variar um pouco em diferentes sessões). Caso contrário, é o momento no qual o processo postmaster recarregou os arquivos de configuração.

pg_current_logfile ( [ text ] ) → text

Retorna o nome do caminho do arquivo de registro de eventos (log) em uso no momento pelo coletor de registros de eventos. O caminho inclui o diretório log_directory e o nome do arquivo de registro de eventos individual. O resultado será NULL se o coletor de registro de eventos estiver desativado. Quando existem vários arquivos de registro de eventos, cada um com formato diferente, a função pg_current_logfile sem nenhum argumento retorna o caminho do arquivo com o primeiro formato encontrado na lista ordenada: stderr, csvlog, jsonlog. Será retornado NULL se nenhum arquivo de registro de eventos tiver qualquer um destes formatos. Para solicitar informações sobre um formato de arquivo de registro de eventos específico, deve ser especificado csvlog, jsonlog ou stderr como o valor do parâmetro opcional. O resultado será NULL se o formato do registro de eventos solicitado não estiver configurado em log_destination. O resultado reflete o conteúdo do arquivo current_logfiles.

Por padrão, esta função é restrita a superusuários e roles com privilégios da role pg_monitor, mas outros usuários podem receber a permissão EXECUTE para executar esta função.

pg_get_loaded_modules () → setof record ( module_name text, version text, file_name text )

Retorna uma lista dos módulos carregáveis ​​que estão presentes na sessão corrente do servidor. Os campos module_name e version são NULL, a menos que o autor do módulo tenha fornecido valores para eles usando a macro PG_MODULE_MAGIC_EXT. O campo file_name fornece o nome do arquivo do módulo (biblioteca compartilhada).

pg_my_temp_schema () → oid

Retorna o OID do esquema temporário da sessão corrente, ou zero se não houver nenhum (porque não foi criada nenhuma tabela temporária).

pg_is_other_temp_schema ( oid ) → boolean

Retorna verdade se o OID fornecido for o OID do esquema temporário de outra sessão. (Pode ser útil, por exemplo, para excluir tabelas temporárias de outras sessões de uma visão do catálogo.)

pg_jit_available () → boolean

Retorna verdade se estiver disponível uma extensão de compilador JIT (veja o Capítulo 30), e se o parâmetro de configuração jit está definido como on.

pg_numa_available () → boolean

Retorna verdade se o servidor foi compilado com suporte a NUMA.

pg_listening_channels () → setof text

Retorna o conjunto de nomes de canais de notificação assíncronos que a sessão corrente está escutando.

pg_notification_queue_usage () → double precision

Retorna a fração (0—1) do tamanho máximo da fila de notificação assíncrona que está atualmente ocupada por notificações que estão aguardando para serem processadas. Veja LISTEN e NOTIFY para obter mais informações.

pg_postmaster_start_time () → timestamp with time zone

Retorna a hora que o servidor foi iniciado.

pg_safe_snapshot_blocking_pids ( integer ) → integer[]

Retorna uma matriz de IDs de processo das sessões que estão bloqueando o processo servidor com o ID de processo especificado em adquirir um instantâneo seguro, ou uma matriz vazia se não houver tal processo servidor ou não estiver bloqueado.

Uma sessão executando uma transação SERIALIZABLE bloqueia uma transação SERIALIZABLE READ ONLY DEFERRABLE em adquirir um instantâneo até que este determine que é seguro evitar qualquer bloqueio de predicado. Veja a Seção 13.2.3 para obter mais informações sobre transações serializáveis e adiáveis.

Chamadas frequentes a esta função podem causar algum impacto no desempenho do servidor de banco de dados, porque o servidor precisa acessar o estado compartilhado do gerenciador de bloqueio de predicados por um curto período de tempo.

pg_trigger_depth () → integer

Retorna o nível de aninhamento corrente dos gatilhos do PostgreSQL (0 se não for chamado, direta ou indiretamente, de dentro de um gatilho).

session_username

Retorna o nome do usuário da sessão.

system_usertext

Retorna o método de autenticação e a identidade (se houver) que o usuário apresentou durante o ciclo de autenticação antes de lhe ser atribuída uma roles no banco de dados. Será apresentado como auth_method:identity ou NULL se o usuário não tiver sido autenticado (por exemplo, se tiver sido utilizada a Autenticação de confiança.

username

É equivalente à função current_user.


Nota

As funções current_catalog, current_role, current_schema, current_user, session_user e user possuem status sintático especial no padrão SQL: devem ser chamadas sem parênteses à direita. No PostgreSQL podem ser usados parênteses opcionalmente com current_schema, mas não com as outras funções.

session_user normalmente é o usuário que iniciou a conexão corrente com o servidor de banco de dados; mas os superusuários podem alterar esta configuração usando SET SESSION AUTHORIZATION. current_user é o identificador de usuário aplicável para verificação de permissão. Normalmente é igual ao usuário da sessão, mas pode ser alterado usando SET ROLE. Também muda durante a execução de funções com o atributo SECURITY DEFINER. Na terminologia Unix, o usuário da sessão é o usuário real, enquanto o usuário corrente é o usuário efetivo. current_role e user são sinônimos de current_user. (O padrão SQL faz distinção entre current_role e current_user, mas o PostgreSQL não, porque unifica usuários e roles (funções de banco de dados) em um único tipo de entidade.

9.27.2. Funções de consulta a privilégio de acesso #

A Tabela 9.72 lista as funções que permitem consultar privilégios de acesso a objetos programaticamente. (Veja Seção 5.8 para obter mais informações sobre privilégios.) Nestas funções, o usuário cujos privilégios estão sendo consultados pode ser especificado pelo nome ou pelo OID (pg_authid.oid), ou se for especificado public como nome, então serão verificados os privilégios da pseudo-função de banco de dados PUBLIC. Além disso, o argumento usuário pode ser omitido inteiramente, e nesse caso é assumida a função current_user. O objeto que está sendo consultado também pode ser especificado pelo nome ou pelo OID. Ao especificar pelo nome, o nome do esquema pode ser incluído, se for relevante. O privilégio de acesso de interesse é especificado por uma cadeia de caracteres de texto, que deve ser avaliada como uma das palavras-chave de privilégio apropriada para o tipo do objeto (por exemplo, SELECT). Opcionalmente, pode ser adicionado WITH GRANT OPTION a um tipo de privilégio para testar se o privilégio é possuído com a opção de concessão. Além disso, podem ser listados vários tipos de privilégios separados por vírgulas, caso onde o resultado será verdade se for possuído algum dos privilégios listados. (Letras maiúsculas e minúsculas na cadeia de caracteres de privilégios não é significativo, e espaço em branco extra é permitido entre, mas não dentro dos nomes dos privilégios.) Alguns exemplos:

SELECT has_table_privilege('meu_esquema.minha_tabela', 'select');
SELECT has_table_privilege('joe', 'minha_tabela', 'INSERT, SELECT WITH GRANT OPTION');

Tabela 9.72. Funções de consulta a privilégio de acesso

Função

Descrição

has_any_column_privilege ( [ user name ou oid, ] table text ou oid, privilege text ) → boolean

O usuário possui privilégio para alguma coluna da tabela? É bem-sucedido se o privilégio for possuído para toda a tabela, ou se houver uma concessão de privilégio no nível de coluna para pelo menos uma coluna. Os tipos de privilégio permitidos são SELECT, INSERT, UPDATE e REFERENCES.

has_column_privilege ( [ user name ou oid, ] table text ou oid, column text ou smallint, privilege text ) → boolean

O usuário possui privilégio para a coluna da tabela especificada? É bem-sucedido se o privilégio for possuído para toda a tabela, ou se houver uma concessão de privilégio no nível de coluna para esta coluna. A coluna pode ser especificada pelo nome, ou pelo número do atributo (pg_attribute.attnum). Os tipos de privilégio permitidos são SELECT, INSERT, UPDATE e REFERENCES.

has_database_privilege ( [ user name ou oid, ] database text ou oid, privilege text ) → boolean

O usuário possui privilégio para o banco de dados? Os tipos de privilégio permitidos são CREATE, CONNECT, TEMPORARY e TEMP (que equivale a TEMPORARY).

has_foreign_data_wrapper_privilege ( [ user name ou oid, ] fdw text ou oid, privilege text ) → boolean

O usuário possui privilégio para o empacotador de dados estrangeiros (foreign-data wrapper)? O único tipo de privilégio permitido é USAGE.

has_function_privilege ( [ user name ou oid, ] function text ou oid, privilege text ) → boolean

O usuário possui privilégio para a função? O único tipo de privilégio permitido é EXECUTE.

Ao especificar a função pelo nome em vez de pelo OID, a entrada permitida é a mesma do tipo de dados regprocedure (Veja a Seção 8.19). Um exemplo é:

SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');

has_language_privilege ( [ user name ou oid, ] language text ou oid, privilege text ) → boolean

O usuário possui privilégio para a linguagem? O único tipo de privilégio permitido é USAGE.

has_largeobject_privilege ( [ user name ou oid, ] largeobject oid, privilege text ) → boolean

O usuário possui privilégios para objetos grandes? Os tipos de privilégio permitidos são SELECT e UPDATE.

has_parameter_privilege ( [ user name ou oid, ] parameter text, privilege text ) → boolean

O usuário possui privilégio para acessar parâmetro de configuração? O nome do parâmetro não diferencia letras maiúsculas de minúsculas. Os tipos de privilégio permitidos são SET e ALTER SYSTEM.

has_schema_privilege ( [ user name ou oid, ] schema text ou oid, privilege text ) → boolean

O usuário possui privilégio para o esquema? Os tipos de privilégio permitidos são CREATE e USAGE.

has_sequence_privilege ( [ user name ou oid, ] sequence text ou oid, privilege text ) → boolean

O usuário possui privilégio para a sequência? Os tipos de privilégio permitidos são USAGE, SELECT e UPDATE.

has_server_privilege ( [ user name ou oid, ] server text ou oid, privilege text ) → boolean

O usuário possui privilégio para o servidor estrangeiro? O único tipo de privilégio permitido é USAGE.

has_table_privilege ( [ user name ou oid, ] table text ou oid, privilege text ) → boolean

O usuário possui privilégio para a tabela? Os tipos de privilégio permitidos são SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER e MAINTAIN.

has_tablespace_privilege ( [ user name ou oid, ] tablespace text ou oid, privilege text ) → boolean

O usuário possui privilégio para o espaço de tabelas? O único tipo de privilégio permitido é CREATE.

has_type_privilege ( [ user name ou oid, ] type text ou oid, privilege text ) → boolean

O usuário possui privilégio para o tipo de dados? O único tipo de privilégio permitido é USAGE. Ao especificar o tipo de dados pelo nome em vez de pelo OID, a entrada permitida é a mesma do tipo de dados regtype (Veja a Seção 8.19).

pg_has_role ( [ user name ou oid, ] role text ou oid, privilege text ) → boolean

O usuário possui privilégio para a role? Os tipos de privilégio permitidos são MEMBER, USAGE e SET. MEMBER indica a participação direta ou indireta na role, independentemente dos privilégios específicos que possam ser conferidos. USAGE indica se os privilégios da role estão imediatamente disponíveis sem necessidade do comando SET ROLE, enquanto SET indica se é possível alterar a role usando o comando SET ROLE. WITH ADMIN OPTION ou WITH GRANT OPTION pode ser adicionado a qualquer um destes tipos de privilégio para testar se o privilégio ADMIN está em uso (todas as seis grafias testam a mesma coisa). Esta função não permite o caso especial de configuração user para public, porque a pseudo-role PUBLIC nunca pode ser membro de roles reais.

row_security_active ( table text ou oid ) → boolean

A segurança no nível de linha está ativa para a tabela especificada no contexto do usuário corrente e do ambiente corrente?


A Tabela 9.73 descreve os operadores disponíveis para o tipo de dados aclitem, que é a representação do catálogo de privilégios de acesso [91]. Veja a Seção 5.8 para obter informações sobre como ler os valores de privilégio de acesso.

Tabela 9.73. Operadores do tipo de dados aclitem

Operador

Descrição

Exemplo(s)

aclitem = aclitemboolean

Os tipos de dados aclitem são iguais? (Note que o tipo de dados aclitem não possui o conjunto usual de operadores de comparação; tem apenas igualdade. Por sua vez, as matrizes aclitem só podem ser comparadas para igualdade.)

'calvin=r*w/hobbes'::aclitem = 'calvin=r*w*/hobbes'::aclitemf

aclitem[] @> aclitemboolean

A matriz contém os privilégios especificados? (Será verdade se houver uma entrada da matriz que corresponda ao beneficiário e ao concedente do aclitem, e tiver pelo menos o conjunto especificado de privilégios.)

'{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] @> 'calvin=r*/hobbes'::aclitemt

aclitem[] ~ aclitemboolean

Este é um alias em obsolescência para @>.

'{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] ~ 'calvin=r*/hobbes'::aclitemt


A Tabela 9.74 descreve algumas funções adicionais para gerenciar o tipo de dados aclitem.

Tabela 9.74. Funções do tipo de dados aclitem

Função

Descrição

acldefault ( type "char", ownerId oid ) → aclitem[]

Constrói uma matriz do tipo de dados aclitem, contendo os privilégios de acesso padrão para um objeto do type especificado, pertencente à função com OID ownerId. Isto representa os privilégios de acesso que serão assumidos quando a entrada ACL do objeto for nula. (Os privilégios de acesso padrão estão descritos na Seção 5.8.) O parâmetro type deve ser um dos seguintes: 'c' para COLUMN, 'r' para TABLE e objetos tipo-tabela, 's' para SEQUENCE, 'd' para DATABASE, 'f' para FUNCTION ou PROCEDURE, 'l' para LANGUAGE, 'L' para LARGE OBJECT, 'n' para SCHEMA, 'p' para PARAMETER, 't' para TABLESPACE, 'F' para FOREIGN DATA WRAPPER, 'S' para FOREIGN SERVER, ou 'T' para TYPE ou DOMAIN.

aclexplode ( aclitem[] ) → setof record ( grantor oid, grantee oid, privilege_type text, is_grantable boolean )

Retorna a matriz aclitem como um conjunto de linhas. Se o beneficiário for a pseudo-role PUBLIC, ele será representado por zero na coluna grantee. Cada privilégio concedido é representado como SELECT, INSERT, etc. (veja a Tabela 5.1 para obter uma lista completa). Note que cada privilégio é apresentado em uma linha separada, portanto, apenas uma palavra-chave aparece na coluna privilege_type.

makeaclitem ( grantee oid, grantor oid, privileges text, is_grantable boolean ) → aclitem

Constrói uma aclitem com as propriedades fornecidas. privileges é uma lista de nomes de privilégios separados por vírgulas como, por exemplo: SELECT, INSERT, etc. todos eles presentes no resultado. (A distinção entre letras maiúsculas e minúsculas na cadeia de caracteres de privilégio não é relevante, e são permitidos espaços em branco adicionais entre os nomes de privilégio, mas não dentro deles.)


9.27.3. Funções de consulta da visibilidade do esquema #

A Tabela 9.75 descreve as funções que determinam se o objeto especificado é visível no caminho de procura de esquema corrente. Por exemplo, uma tabela é considerada visível se o esquema que a contém estiver no caminho de procura, e nenhuma tabela com o mesmo nome aparecer antes no caminho de procura. Isso equivale a declarar que a tabela pode ser referenciada pelo nome sem qualificação de esquema explícita. Assim, para listar os nomes de todas as tabelas visíveis:

SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);

Para funções e operadores, um objeto no caminho de procura é considerado visível caso não haja nenhum objeto com o mesmo nome e tipo(s) de dados do(s) argumento(s) anterior no caminho. Para classes e famílias de operador, são considerados o nome e o método de acesso a índice associado.

Tabela 9.75. Funções de consulta da visibilidade do esquema

Função

Descrição

pg_collation_is_visible ( collation oid ) → boolean

A ordenação (collation) é visível no caminho de procura?

pg_conversion_is_visible ( conversion oid ) → boolean

A conversão é visível no caminho de procura?

pg_function_is_visible ( function oid ) → boolean

A função é visível no caminho de procura? (Também funciona para procedimentos e agregações.)

pg_opclass_is_visible ( opclass oid ) → boolean

A classe do operador é visível no caminho de procura?

pg_operator_is_visible ( operator oid ) → boolean

O operador é visível no caminho de procura?

pg_opfamily_is_visible ( opclass oid ) → boolean

A família do operador é visível no caminho de procura?

pg_statistics_obj_is_visible ( stat oid ) → boolean

O objeto de estatísticas é visível no caminho de procura?

pg_table_is_visible ( table oid ) → boolean

A tabela é visível no caminho de procura? (Funciona para todos os tipos de relações, incluindo visões, visões materializadas, índices, sequências e tabelas estrangeiras.)

pg_ts_config_is_visible ( config oid ) → boolean

A configuração de procura de texto é visível no caminho de procura?

pg_ts_dict_is_visible ( dict oid ) → boolean

O dicionário de procura de texto é visível no caminho de procura?

pg_ts_parser_is_visible ( parser oid ) → boolean

O analisador de procura de texto é visível no caminho de procura?

pg_ts_template_is_visible ( template oid ) → boolean

O modelo de procura de texto é visível no caminho de procura?

pg_type_is_visible ( type oid ) → boolean

O tipo de dados (ou domínio) é visível no caminho de procura?


Todas estas funções requerem o OID do objeto para identificar o objeto a ser verificado. Se for desejado testar um objeto pelo nome, é conveniente usar os tipos alias de OID (regclass, regtype, regprocedure, regoperator, regconfig ou regdictionary). Por exemplo:

SELECT pg_type_is_visible('myschema.widget'::regtype);

Note que não faz muito sentido testar um nome de tipo não qualificado pelo esquema desta maneira — se o nome puder ser reconhecido, deve ser visível.

9.27.4. Funções de extração de informação do catálogo do sistema #

A Tabela 9.76 lista as funções que extraem informações sobre os catálogos do sistema.

Tabela 9.76. Funções de extração de informação do catálogo do sistema

Função

Descrição

format_type ( type oid, typemod integer ) → text

Retorna o nome SQL para o tipo de dados identificado por seu OID de tipo de dados, e possivelmente por um modificador de tipo de dados. Deverá ser passado NULL para o modificador de tipo de dados se não for conhecido nenhum modificador específico.

format_type(to_regtype('decimal'), to_regtypemod('decimal'))numeric

pg_basetype ( regtype ) → regtype

Retorna o OID do tipo de dados base de um domínio identificado pelo seu OID de tipo de dados. Se o argumento for o OID de um tipo de dados que não seja de domínio, o argumento será retornado tal como está. Se o argumento não for um OID de tipo de dados válido, será retornado NULL Se houver uma cadeia de dependências de domínio, o processo será recursivo até encontrar o tipo de dados base.

Assumindo CREATE DOMAIN mytext AS text:

pg_basetype('mytext'::regtype)text

pg_char_to_encoding ( encoding name ) → integer

Converte o nome de codificação fornecido em um número inteiro que representa o identificador interno usado em algumas tabelas do catálogo do sistema. Retorna -1 se for fornecido um nome de codificação desconhecido.

pg_encoding_to_char ( encoding integer ) → name

Converte o número inteiro usado como identificador interno de uma codificação em algumas tabelas de catálogo do sistema em uma cadeia de caracteres legível por humanos. Retorna uma cadeia de caracteres vazia se for fornecido um número de codificação inválido.

pg_get_catalog_foreign_keys () → setof record ( fktable regclass, fkcols text[], pktable regclass, pkcols text[], is_array boolean, is_opt boolean )

Retorna um conjunto de registros descrevendo os relacionamentos de chave estrangeira existentes nos catálogos do sistema do PostgreSQL. A coluna fktable contém o nome do catálogo que faz referência, e a coluna fkcols contém o(s) nome(s) da(s) coluna(s) que fazem referência. De forma inversa, a coluna pktable contém o nome do catálogo referenciado, e a coluna pkcols contém o(s) nome(s) da(s) coluna(s) referenciada(s). Se is_array for verdade, a última coluna que faz referência é uma matriz, cujos elementos devem corresponder a alguma entrada no catálogo referenciado. Se is_opt for verdade, as colunas que fazem a referência podem conter zeros em vez de uma referência válida.

pg_get_constraintdef ( constraint oid [, pretty boolean ] ) → text

Reconstrói o comando de criação de uma restrição. (Esta é uma reconstrução descompilada, e não o texto original do comando.)

pg_get_expr ( expr pg_node_tree, relation oid [, pretty boolean ] ) → text

Descompila a forma interna de uma expressão armazenada nos catálogos do sistema, como o valor padrão de uma coluna. Se a expressão puder conter Vars, deve ser especificado o OID da relação a que se referem como o segundo parâmetro; se não for esperado nenhum Var, será suficiente passar 0.

pg_get_functiondef ( func oid ) → text

Reconstrói o comando de criação de uma função ou procedimento. (Esta é uma reconstrução descompilada, e não o texto original do comando.) O resultado é uma declaração CREATE OR REPLACE FUNCTION ou CREATE OR REPLACE PROCEDURE completa.

pg_get_function_arguments ( func oid ) → text

Reconstrói a lista de argumentos de uma função ou procedimento, na forma que precisaria aparecer dentro de CREATE FUNCTION (incluindo os valores padrão).

pg_get_function_identity_arguments ( func oid ) → text

Reconstrói a lista de argumentos necessária para identificar uma função ou procedimento, na forma que precisaria aparecer dentro de comandos como ALTER FUNCTION. Esta forma omite os valores padrão.

pg_get_function_result ( func oid ) → text

Reconstrói a cláusula RETURNS de uma função, na forma que precisaria aparecer dentro do comando CREATE FUNCTION. Retorna NULL para um procedimento.

pg_get_indexdef ( index oid [, column integer, pretty boolean ] ) → text

Reconstrói o comando de criação de um índice. (Esta é uma reconstrução descompilada, e não o texto original do comando.) Se for especificado column, e não for zero, será reconstruída apenas a definição desta coluna.

pg_get_keywords () → setof record ( word text, catcode "char", barelabel boolean, catdesc text, baredesc text )

Retorna um conjunto de registros descrevendo as palavras-chave SQL reconhecidas pelo servidor. A coluna word contém a palavra-chave. A coluna catcode contém o código da categoria: U para palavra-chave não reservada, C para palavra-chave que pode ser um nome de coluna, T para palavra-chave que pode ser um tipo ou nome de função, ou R para palavra-chave totalmente reservada. A coluna barelabel contém true se a palavra-chave puder ser usada como rótulo de coluna sem adornos nas listas SELECT, ou false se só puder ser usada depois de AS. A coluna catdesc contém uma cadeia de caracteres, possivelmente localizada, descrevendo a categoria da palavra-chave. A coluna baredesc contém uma cadeia de caracteres, possivelmente localizada, que descreve o status do rótulo da coluna da palavra-chave.

pg_get_partkeydef ( table oid ) → text

Reconstrói a definição da chave de partição de uma tabela particionada, na forma que teria na cláusula PARTITION BY do comando CREATE TABLE. (Esta é uma reconstrução descompilada, e não o texto original do comando.)

pg_get_ruledef ( rule oid [, pretty boolean ] ) → text

Reconstrói o comando de criação de uma regra. (Esta é uma reconstrução descompilada, e não o texto original do comando.)

pg_get_serial_sequence ( table text, column text ) → text

Retorna o nome da sequência associada a uma coluna, ou NULL se nenhuma sequência estiver associada à coluna. Se a coluna for uma coluna de identidade, a sequência associada será a sequência criada internamente para esta coluna. Para as colunas criadas usando um dos tipos de dados de série (serial, smallserial, bigserial), é a sequência criada para esta definição de coluna serial. Neste último caso, a associação pode ser modificada ou removida com ALTER SEQUENCE OWNED BY. (Esta função provavelmente deveria ter sido chamada de pg_get_owned_sequence; seu nome reflete o fato de ter sido usada historicamente com colunas do tipo serial.) O primeiro parâmetro é um nome de tabela, com esquema opcional, e o segundo parâmetro é um nome de coluna. Como o primeiro parâmetro contém potencialmente nomes de esquema e de tabela, é analisado segundo as regras usuais do SQL, significando que está em letras minúsculas por padrão. O segundo parâmetro, sendo apenas um nome de coluna, é tratado literalmente, portanto suas letras minúsculas e maiúsculas são preservadas. O resultado é formatado adequadamente para passar para as funções de sequência (Veja a Seção 9.17).

Um uso típico é na leitura do valor corrente da sequência para uma coluna de identidade ou serial. Por exemplo:

SELECT currval(pg_get_serial_sequence('sometable', 'id'));

pg_get_statisticsobjdef ( statobj oid ) → text

Reconstrói o comando de criação para um objeto de estatísticas estendido. (Esta é uma reconstrução descompilada, e não o texto original do comando.)

pg_get_triggerdef ( trigger oid [, pretty boolean ] ) → text

Reconstrói o comando de criação de um gatilho. (Esta é uma reconstrução descompilada, e não o texto original do comando.)

pg_get_userbyid ( role oid ) → name

Retorna o nome de uma role (função de banco de dados) dado seu OID.

pg_get_viewdef ( view oid [, pretty boolean ] ) → text

Reconstrói o comando SELECT subjacente para uma visão ou visão materializada. (Esta é uma reconstrução descompilada, e não o texto original do comando.)

pg_get_viewdef ( view oid, wrap_column integer ) → text

Reconstrói o comando SELECT subjacente para uma visão ou visão materializada. (Esta é uma reconstrução descompilada, e não o texto original do comando.) Nesta forma da função, a impressão estruturada (pretty-printing) está sempre ativa, e as linhas longas são quebradas para tentar mantê-las mais curtas do que o número especificado de colunas.

pg_get_viewdef ( view text [, pretty boolean ] ) → text

Reconstrói o comando SELECT subjacente para uma visão ou visão materializada, trabalhando a partir de um nome textual para a visão em vez de seu OID. (Está em obsolescência; deve ser usada a variante OID em seu lugar.)

pg_index_column_has_property ( index regclass, column integer, property text ) → boolean

Testa se a coluna de índice tem a propriedade com o nome fornecido. As propriedades comuns de coluna de índice estão listadas na Tabela 9.77. (Note que os métodos de acesso de extensão podem definir nomes de propriedades adicionais para seus índices.) É retornado NULL se o nome da propriedade não for conhecido ou não se aplicar ao objeto específico, ou se o OID ou número da coluna não identificar um objeto válido.

pg_index_has_property ( index regclass, property text ) → boolean

Testa se o índice tem a propriedade com o nome fornecido. As propriedades comuns de índice estão listadas na Tabela 9.78. (Note que os métodos de acesso de extensão podem definir nomes de propriedades adicionais para seus índices.) É retornado NULL se o nome da propriedade não for conhecido ou não se aplicar ao objeto específico, ou se o OID não identificar um objeto válido.

pg_indexam_has_property ( am oid, property text ) → boolean

Testa se o método de acesso a índice tem a propriedade com o nome fornecido. As propriedades do método de acesso estão listadas na Tabela 9.79. É retornado NULL se o nome da propriedade não for conhecido ou não se aplicar ao objeto específico, ou se o OID não identificar um objeto válido.

pg_options_to_table ( options_array text[] ) → setof record ( option_name text, option_value text )

Retorna o conjunto de opções de armazenamento representadas por um valor de pg_class.reloptions ou pg_attribute.attoptions.

pg_settings_get_flags ( guc text ) → text[]

Retorna uma matriz com os indicadores associados ao GUC fornecido ou NULL se ele não existir. O resultado será uma matriz vazia se o GUC existir, mas não houver sinalizadores para exibir. São descritos apenas os sinalizadores mais úteis listados na Tabela 9.80.

pg_tablespace_databases ( tablespace oid ) → setof oid

Retorna o conjunto de OIDs de bancos de dados que possuem objetos armazenados no espaço de tabelas especificado. Se esta função retornar alguma linha, o espaço de tabelas não está vazio e não pode ser excluído. Para identificar os objetos específicos que preenchem o espaço de tabelas, é necessário se conectar ao(s) banco(s) de dados identificado(s) por pg_tablespace_databases e consultar seus catálogos pg_class.

pg_tablespace_location ( tablespace oid ) → text

Retorna o caminho do sistema de arquivos onde este espaço de tabelas está localizado.

pg_typeof ( "any" ) → regtype

Retorna o OID do tipo de dados do valor passado como parâmetro. Pode ser útil para solucionar problemas ou construir consultas SQL dinamicamente. A função é declarada como retornando regtype, que é um tipo de dados alias de OID (veja a Seção 8.19); isto significa que é o mesmo que um OID para fins de comparação, mas é mostrado como nome de tipo de dados.

pg_typeof(33)integer

COLLATION FOR ( "any" ) → text

Retorna o nome da ordenação (collation) do valor passado como parâmetro. O valor deverá ser delimitado e qualificado pelo esquema, se for necessário. Se nenhuma ordenação for derivada para a expressão do argumento, será retornado NULL. Se o argumento não for de um tipo de dados ordenável, será gerado um erro.

collation for ('foo'::text)"default"

collation for ('foo' COLLATE "pt_BR")"pt_BR"

to_regclass ( text ) → regclass

Traduz o nome textual da relação para seu OID. Um resultado semelhante é obtido convertendo a cadeia de caracteres para o tipo de dados regclass (veja a Seção 8.19); entretanto, esta função retornará NULL em vez de gerar um erro se o nome não for encontrado.

coalesce(to_regclass('pessoas')::text, 'nulo')pessoas (relação encontrada)

coalesce(to_regclass('pessoax')::text, 'nulo')nulo (relação não encontrada)

to_regcollation ( text ) → regcollation

Traduz o nome textual da ordenação (collation) para o seu OID. Um resultado semelhante é obtido convertendo a cadeia de caracteres para o tipo de dados regcollation (veja Seção 8.19); entretanto, esta função retornará NULL, em vez de gerar um erro, se o nome não for encontrado.

to_regnamespace ( text ) → regnamespace

Traduz o nome textual do esquema para o seu OID. Um resultado semelhante é obtido convertendo a cadeia de caracteres para o tipo de dados regnamespace (veja a Seção 8.19); entretanto, esta função retornará NULL, em vez de gerar um erro, se o nome não for encontrado.

to_regoper ( text ) → regoper

Traduz o nome textual do operador para o seu OID. Um resultado semelhante é obtido convertendo a cadeia de caracteres para o tipo de dados regoper (veja a Seção 8.19); entretanto, esta função retornará NULL, em vez de gerar um erro, se o nome não for encontrado ou for ambíguo.

to_regoperator ( text ) → regoperator

Traduz o nome textual do operador (com tipos de parâmetro) para o seu OID. Um resultado semelhante é obtido convertendo a cadeia de caracteres para o tipo de dados regoperator (veja Seção 8.19); entretanto, esta função retornará NULL, em vez de gerar um erro, se o nome não for encontrado.

to_regproc ( text ) → regproc

Traduz o nome textual da função ou do procedimento para o seu OID. Um resultado semelhante é obtido convertendo a cadeia de caracteres para o tipo de dados regproc (veja Seção 8.19); entretanto, esta função retornará NULL, em vez de gerar um erro, se o nome não for encontrado ou for ambíguo.

to_regprocedure ( text ) → regprocedure

Traduz o nome textual da função ou do procedimento (com tipos de dados de argumento) para o seu OID. Um resultado semelhante é obtido convertendo a cadeia de caracteres para o tipo de dados regprocedure (veja Seção 8.19); entretanto, esta função retornará NULL, em vez de gerar um erro, se o nome não for encontrado.

to_regrole ( text ) → regrole

Traduz o nome textual da role (função de banco de dados) para o seu OID. Um resultado semelhante é obtido convertendo a cadeia de caracteres para o tipo de dados regrole (veja a Seção 8.19); entretanto, esta função retornará NULL, em vez de gerar um erro, se o nome não for encontrado.

to_regtype ( text ) → regtype

Analisa uma cadeia de caracteres de texto, extrai dela um possível nome de tipo de dados e traduz este nome em um OID de tipo de dados. Um erro de sintaxe na cadeia de caracteres resultará em erro; mas se a cadeia de caracteres for um nome de tipo de dados sintaticamente válido que por acaso não seja encontrado nos catálogos, o resultado será NULL. Um resultado semelhante é obtido convertendo a cadeia de caracteres para o tipo de dados regtype (veja a Seção 8.19), exceto que isto irá gerar um erro para nome não encontrado.

to_regtype('float4')real

to_regtypemod ( text ) → integer

Analisa uma cadeia de caracteres de texto, extrai dela um possível nome de tipo de dados e traduz seu modificador de tipo de dados, se houver. Um erro de sintaxe na cadeia de caracteres resultará em erro; mas se a cadeia de caracteres for um nome de tipo de dados sintaticamente válido que por acaso não seja encontrado nos catálogos, o resultado será NULL. O resultado será -1 se não estiver presente nenhum modificador de tipo de dados.

A função to_regtypemod pode ser combinada com to_regtype produzir entradas adequadas para format_type, permitindo que uma cadeia de caracteres que representa um nome de tipo de dados seja canonizada.

format_type(to_regtype('varchar(32)'), to_regtypemod('varchar(32)'))character varying(32)


A maioria das funções que reconstroem (descompilam) objetos de banco de dados possuem o sinalizador opcional pretty, que se for igual a true faz com que o resultado seja impresso de forma estruturada (pretty-printed). A impressão estruturada suprime parênteses desnecessários, e adiciona espaços em branco para melhorar a legibilidade. O formato de impressão estruturada é mais legível, mas é mais provável que o formato padrão seja interpretado da mesma maneira por versões futuras do PostgreSQL; portanto deve ser evitada a saída na forma de impressão estruturada para as finalidades de dump. Passar false para o parâmetro pretty produz o mesmo resultado que omitir o parâmetro.

Tabela 9.77. Propriedades da coluna de índice

NomeDescrição
ascA coluna classifica em ordem ascendente na varredura para frente?
descA coluna classifica em ordem descendente na varredura para frente?
nulls_firstA coluna classifica com nulos primeiro na varredura para frente?
nulls_lastA coluna classifica com nulos por último na varredura para frente?
orderableA coluna possui alguma ordem de classificação definida?
distance_orderableA coluna pode ser varrida em ordem por um operador de distância, por exemplo ORDER BY col <-> constante ?
returnableO valor da coluna pode ser retornado por uma varredura somente de índice?
search_arrayA coluna oferece suporte nativo a procuras col = ANY(array)?
search_nullsA coluna oferece suporte a procuras IS NULL e IS NOT NULL?

Tabela 9.78. Propriedades do índice

NomeDescrição
clusterableO índice pode ser usado em um comando CLUSTER?
index_scanO índice oferece suporte a varreduras simples (não bitmap)?
bitmap_scanO índice oferece suporte a varreduras bitmap?
backward_scanA direção da varredura pode ser mudada no meio da varredura (para permitir FETCH BACKWARD em um cursor sem precisar de materialização)?

Tabela 9.79. Propriedades do método de acesso a índice

NomeDescrição
can_orderO método de acesso oferece suporte a ASC, DESC e palavras-chave relacionadas em CREATE INDEX?
can_uniqueO método de acesso oferece suporte a índices únicos?
can_multi_colO método de acesso oferece suporte a índices com várias colunas?
can_excludeO método de acesso oferece suporte a restrições de exclusão?
can_includeO método de acesso oferece suporte à cláusula INCLUDE de CREATE INDEX?

Tabela 9.80. Sinalizadores GUC

SinalizadorDescrição
EXPLAINOs parâmetros com este sinalizador são incluídos nos comandos EXPLAIN (SETTINGS).
NO_SHOW_ALLOs parâmetros com este sinalizador são excluídos dos comandos SHOW ALL.
NO_RESETOs parâmetros com este sinalizador não oferecem suporte a comandos RESET.
NO_RESET_ALLOs parâmetros com este sinalizador são excluídos dos comandos RESET ALL.
NOT_IN_SAMPLEOs parâmetros com este sinalizador não são incluídos no arquivo postgresql.conf por padrão.
RUNTIME_COMPUTEDOs parâmetros com este sinalizador são calculados em tempo de execução.

9.27.5. Funções de informação e endereçamento de objetos #

A Tabela 9.81 lista as funções relacionadas à identificação e endereçamento de objetos de banco de dados.

Tabela 9.81. Funções de informação e endereçamento de objetos

Função

Descrição

pg_get_acl ( classid oid, objid oid, objsubid integer ) → aclitem[]

Retorna a ACL para um objeto de banco de dados, especificado pelo OID do catálogo, OID do objeto e ID do subobjeto. Esta função retorna valores NULL para objetos não definidos.

pg_describe_object ( classid oid, objid oid, objsubid integer ) → text

Retorna a descrição textual de um objeto de banco de dados identificado pelo OID do catálogo, OID do objeto e o ID do subobjeto (como um número de coluna em uma tabela; o ID do subobjeto é zero ao se referir a todo o objeto). Esta descrição destina-se a ser legível por humanos e pode ser traduzida, dependendo da configuração do servidor. É especialmente útil para determinar a identidade de um objeto referenciado no catálogo pg_depend. Esta função retorna o valor NULL para objetos não definidos.

pg_identify_object ( classid oid, objid oid, objsubid integer ) → record ( type text, schema text, name text, identity text )

Retorna uma linha contendo informações suficientes para identificar unicamente o objeto de banco de dados especificado pelo OID do catálogo, o OID do objeto e o ID do subobjeto. Estas informações devem ser legíveis por máquina e nunca são traduzidas. type identifica o tipo de objeto de banco de dados; schema é o nome do esquema ao qual o objeto pertence, ou NULL para tipos de objetos que não pertencem a esquemas; name é o nome do objeto, delimitado se for necessário, se o nome (junto com o nome do esquema, se for pertinente) for suficiente para identificar unicamente o objeto, senão NULL; identity é a identidade completa do objeto, com o formato preciso dependendo do tipo de objeto, e cada nome dentro do formato sendo qualificado pelo esquema e delimitado conforme necessário. Objetos não definidos são identificados com o valor NULL.

pg_identify_object_as_address ( classid oid, objid oid, objsubid integer ) → record ( type text, object_names text[], object_args text[] )

Retorna uma linha contendo informações suficientes para identificar unicamente o objeto de banco de dados especificado pelo OID do catálogo, o OID do objeto e o ID do subobjeto. As informações retornadas são independentes do servidor corrente, ou seja, podem ser usadas para identificar um objeto com nome idêntico em outro servidor. type identifica o tipo de objeto de banco de dados; object_names e object_args são matrizes de texto que juntas formam uma referência ao objeto. Estes três valores podem ser passados para a função pg_get_object_address para obter o endereço interno do objeto.

pg_get_object_address ( type text, object_names text[], object_args text[] ) → record ( classid oid, objid oid, objsubid integer )

Retorna uma linha contendo informações suficientes para identificar unicamente o objeto de banco de dados especificado pelo código do tipo e um nome de objeto e matrizes de argumentos. Os valores retornados são aqueles que seriam usados em catálogos do sistema como pg_depend; podem ser passados para outras funções do sistema como pg_describe_object ou pg_identify_object. classid é o OID do catálogo do sistema que contém o objeto; objid é o OID do próprio objeto, e objsubid é o ID do subobjeto, ou zero se nenhum. Esta função é o inverso da função pg_identify_object_as_address. Objetos não definidos são identificados pelo valor NULL.


A função pg_get_acl é útil para recuperar e inspecionar os privilégios associados a objetos de banco de dados sem precisar consultar catálogos específicos. Por exemplo, para recuperar todos os privilégios concedidos aos objetos no banco de dados corrente:

postgres=# SELECT
    (pg_identify_object(s.classid,s.objid,s.objsubid)).*,
    pg_catalog.pg_get_acl(s.classid,s.objid,s.objsubid) AS acl
FROM pg_catalog.pg_shdepend AS s
JOIN pg_catalog.pg_database AS d
    ON d.datname = current_database() AND
       d.oid = s.dbid
JOIN pg_catalog.pg_authid AS a
    ON a.oid = s.refobjid AND
       s.refclassid = 'pg_authid'::regclass
WHERE s.deptype = 'a';
-[ RECORD 1 ]-----------------------------------------
type     | table
schema   | public
name     | testtab
identity | public.testtab
acl      | {postgres=arwdDxtm/postgres,foo=r/postgres}

9.27.6. Funções de informação de comentário #

As funções descritas na Tabela 9.82 extraem comentários previamente armazenados pelo comando COMMENT. É retornado o valor nulo se nenhum comentário puder ser encontrado para os parâmetros especificados.

Tabela 9.82. Funções de informação de comentário

Função

Descrição

col_description ( table oid, column integer ) → text

Retorna o comentário de uma coluna de tabela, especificado pelo OID de sua tabela e pelo seu número de coluna. (A função obj_description não pode ser usada para colunas de tabela, porque as colunas não possuem OIDs próprios.)

obj_description ( object oid, catalog name ) → text

Retorna o comentário de um objeto de banco de dados especificado por seu OID e o nome do catálogo do sistema que o contém. Por exemplo, obj_description(123456, 'pg_class') recuperaria o comentário para a tabela com OID 123456.

obj_description ( object oid ) → text

Retorna o comentário de um objeto de banco de dados especificado apenas por seu OID. Esta função está em obsolescência, uma vez não haver garantia que os OIDs sejam únicos em diferentes catálogos do sistema; portanto pode ser retornado um comentário errado.

shobj_description ( object oid, catalog name ) → text

Retorna o comentário para um objeto de banco de dados compartilhado especificado por seu OID e o nome do catálogo do sistema que o contém. É como a função obj_description, exceto por ser usada para recuperar comentários em objetos compartilhados (ou seja, bancos de dados, roles (funções de bancos de dados) e espaços de tabelas). Alguns catálogos do sistema são globais para todos os bancos de dados de cada agrupamento (cluster), e as descrições dos objetos neles também são armazenadas globalmente.


9.27.7. Funções de verificação da validade dos dados #

As funções descritas na Tabela 9.83 podem ser úteis para verificar a validade dos dados de entrada propostos.

Tabela 9.83. Funções de verificação da validade dos dados

Função

Descrição

Exemplo(s)

pg_input_is_valid ( string text, type text ) → boolean

Testa se a cadeia de caracteres (string) fornecida é uma entrada válida para o tipo de dados especificado, retornando verdade ou falso.

Esta função só irá funcionar como esperado se a função de entrada do tipo de dados tiver sido atualizada para relatar entradas inválidas como um erro suave (soft). Caso contrário, uma entrada inválida irá anular a transação, da mesma forma que aconteceria caso a cadeia de caracteres tivesse sido convertida diretamente para o tipo de dados desejado.

pg_input_is_valid('42', 'integer')t

pg_input_is_valid('42000000000', 'integer')f

pg_input_is_valid('1234.567', 'numeric(7,4)')f

pg_input_error_info ( string text, type text ) → record ( message text, detail text, hint text, sql_error_code text )

Testa se a cadeia de caracteres (string) fornecida é uma entrada válida para o tipo de dados especificado; se não for, serão retornados os detalhes do erro que teria sido gerado. Se a entrada for válida, o resultado será NULL. As entradas são as mesmas da função pg_input_is_valid.

Esta função só irá funcionar como esperado se a função de entrada do tipo de dados tiver sido atualizada para relatar entradas inválidas como um erro suave (soft). Caso contrário, uma entrada inválida irá anular a transação, da mesma forma que aconteceria caso a cadeia de caracteres tivesse sido convertida diretamente para o tipo de dados desejado.

SELECT * FROM pg_input_error_info('42000000000', 'integer')

                 message                  | detail | hint | sql_error_code
------------------------------------------+--------+------+----------------
 o valor "42000000000" está fora do  ↵    |        |      | 22003
 intervalo para o tipo de dados integer
(1 linha)


9.27.8. Funções de identificação de transação e informação de instantâneo #

As funções descritas na Tabela 9.84 fornecem informações sobre transação do servidor em um formato exportável. O principal uso destas funções é determinar quais transações foram efetivadas (committed) entre dois instantâneos (snapshots).

Tabela 9.84. Funções de identificação de transação e informação de instantâneo

Função

Descrição

age ( xid ) → integer

Retorna o número de transações entre o ID da transação fornecido e o contador de transações corrente.

mxid_age ( xid ) → integer

Retorna o número de IDs de multixact entre o ID de multixact fornecido e o contador de multixacts corrente.

pg_current_xact_id () → xid8

Retorna o ID da transação corrente. Irá atribuir um ID novo se a transação corrente ainda não tiver um (porque não executou nenhuma atualização do banco de dados); veja a Seção 67.1 para obter detalhes. Se for executada em uma subtransação, retornará o ID da transação de nível superior; veja a Seção 67.3 para obter detalhes.

pg_current_xact_id_if_assigned () → xid8

Retorna o ID da transação corrente, ou NULL se nenhum ID tiver sido atribuído ainda. (É melhor usar esta variante se a transação puder ser de leitura apenas, para evitar o consumo desnecessário de XID.) Se for executada em uma subtransação, retornará o ID da transação de nível superior;

pg_xact_status ( xid8 ) → text

Relata o status de efetivação (commit) de uma transação recente. O resultado é um entre in progress, committed, ou aborted, desde que a transação seja recente o suficiente para que o sistema ainda mantenha o status de confirmação desta transação. Se for antiga o suficiente para que nenhuma referência à transação ainda sobreviva no sistema, e as informações sobre o status de confirmação tenham sido descartadas, o resultado será NULL. As aplicações podem usar esta função, por exemplo, para determinar se sua transação foi efetivada ou desfeita após a aplicação e o servidor de banco de dados terem sido desconectados enquanto o COMMIT estava em andamento. Note que as transações preparadas são informadas como in progress; as aplicações devem verificar a Seção 53.17 se precisarem determinar se um ID de transação pertence a uma transação preparada.

pg_current_snapshot () → pg_snapshot

Retorna o instantâneo (snapshot) corrente, uma estrutura de dados que mostra quais IDs de transação estão em andamento. Apenas os IDs de transação de nível superior estão incluídos no instantâneo; os IDs das subtransações não são mostrados; veja a Seção 67.3 para obter detalhes.

pg_snapshot_xip ( pg_snapshot ) → setof xid8

Retorna o conjunto de IDs de transação em andamento contidos no instantâneo.

pg_snapshot_xmax ( pg_snapshot ) → xid8

Retorna o xmax do instantâneo.

pg_snapshot_xmin ( pg_snapshot ) → xid8

Retorna o xmin do instantâneo.

pg_visible_in_snapshot ( xid8, pg_snapshot ) → boolean

O ID de transação fornecido está visível neste instantâneo (ou seja, a transação foi concluída antes do instantâneo ser obtido)? Note que esta função não fornece a resposta correta para um ID de subtransação (subxid); veja a Seção 67.3 para obter detalhes.

pg_get_multixact_members ( multixid xid ) → setof record ( xid xid, mode text )

Retorna o ID da transação e o modo de bloqueio para cada membro do ID multixact especificado. Os modos de bloqueio forupd, fornokeyupd, sh e keysh correspondem aos bloqueios no nível de linha FOR UPDATE, FOR NO KEY UPDATE, FOR SHARE e FOR KEY SHARE, respectivamente, conforme descrito na Seção 13.3.2. Dois modos adicionais são específicos para multixacts: nokeyupd, usado por atualizações que não modificam colunas-chave, upd, Utilizado por atualizações ou exclusões que modificam colunas-chave.


O tipo de dados do ID de transação interna xid tem 32 bits de comprimento e reinicia a cada 4 bilhões de transações. Entretanto, as funções descritas na Tabela 9.84, exceto age, mxid_age e pg_get_multixact_members, usam o tipo de dados xid8 de 64 bits que não reinicia durante a vida útil de uma instalação, e pode ser convertido em xid, se necessário; veja a Seção 67.1 para obter detalhes. O tipo de dados pg_snapshot armazena informações sobre a visibilidade do ID da transação em um determinado momento. Seus componentes estão descritos na Tabela 9.85. A representação textual de pg_snapshot é xmin:xmax:xip_list. Por exemplo 10:20:10,14,15 significa xmin=10, xmax=20, xip_list=10, 14, 15.

Tabela 9.85. Componentes do instantâneo

NomeDescrição
xmin O menor ID de transação que ainda estava ativo. Todos os IDs de transação menores que xmin ou foram efetivados (committed) e estão visíveis, ou foram desfeitos (rolled back ) e estão mortos.
xmax Um a mais que o ID de transação concluído mais alto. Todos os IDs de transação maiores ou iguais a xmax ainda não foram concluídos no momento do instantâneo, portanto não estão visíveis.
xip_list Transações em andamento no momento do instantâneo. Um ID de transação que está no intervalo xmin <= X < xmax e não está nesta lista, já foi concluído no momento do instantâneo, portanto está visível ou morto de acordo com o seu status de efetivação. Esta lista não inclui os IDs de transação de subtransações (subxids).

Nas versões do PostgreSQL anteriores a 13 não havia o tipo de dados xid8, então eram fornecidas variantes dessas funções que usavam bigint para representar um XID de 64 bits, com o tipo de dados de instantâneo correspondente chamado txid_snapshot. Estas funções mais antigas têm txid nos seus nomes. Elas ainda têm suporte para compatibilidade com versões anteriores, mas podem ser removidos em uma versão futura. Veja a Tabela 9.86.

Tabela 9.86. Funções de identificação de transação e informação de instantâneo em obsolescência

Função

Descrição

txid_current () → bigint

Veja pg_current_xact_id().

txid_current_if_assigned () → bigint

Veja pg_current_xact_id_if_assigned().

txid_current_snapshot () → txid_snapshot

Veja pg_current_snapshot().

txid_snapshot_xip ( txid_snapshot ) → setof bigint

Veja pg_snapshot_xip().

txid_snapshot_xmax ( txid_snapshot ) → bigint

Veja pg_snapshot_xmax().

txid_snapshot_xmin ( txid_snapshot ) → bigint

Veja pg_snapshot_xmin().

txid_visible_in_snapshot ( bigint, txid_snapshot ) → boolean

Veja pg_visible_in_snapshot().

txid_status ( bigint ) → text

Veja pg_xact_status().


9.27.9. Funções de informação de transação efetivada #

As funções descritas na Tabela 9.87 fornecem informações sobre quando as transações passadas foram efetivadas (commited). Estas funções só fornecem dados úteis quando a opção de configuração track_commit_timestamp está ativa, e apenas para as transações que foram efetivadas depois da opção ser ativada. As informações sobre carimbo de data e hora da efetivação são rotineiramente removidas durante o processo de limpeza (vacuum).

Tabela 9.87. Funções de informação de transação efetivada

Função

Descrição

pg_xact_commit_timestamp ( xid ) → timestamp with time zone

Retorna o carimbo de data e hora da efetivação da transação.

pg_xact_commit_timestamp_origin ( xid ) → record ( timestamp timestamp with time zone, roident oid)

Retorna o carimbo de data e hora da efetivação, e a origem da replicação da transação.

pg_last_committed_xact () → record ( xid xid, timestamp timestamp with time zone, roident oid )

Retorna o ID da transação, o carimbo de data e hora da efetivação, e a origem da replicação da última transação efetivada.


9.27.10. Funções de dados de controle #

As funções descritas na Tabela 9.88 retornam informações inicializadas durante o initdb, tal como a versão do catálogo. Elas também mostram informações sobre registro de transações (Write-Ahead LogWAL) e processamento de ponto de verificação (checkpoint). Estas informações abrangem todo o agrupamento (cluster), não sendo específicas para nenhum banco de dados. Estas funções fornecem praticamente as mesmas informações, obtidas da mesma fonte, que a aplicação pg_controldata.

Tabela 9.88. Funções de dados de controle

Função

Descrição

pg_control_checkpoint () → record

Retorna informações sobre o estado corrente do ponto de verificação, conforme descrito na Tabela 9.89.

pg_control_system () → record

Retorna informações sobre o estado do arquivo de controle corrente, conforme descrito na Tabela 9.90.

pg_control_init () → record

Retorna informações sobre o estado de inicialização do agrupamento (cluster), conforme descrito na Tabela 9.91.

pg_control_recovery () → record

Retorna informações sobre o estado da recuperação, conforme descrito na Tabela 9.92.


Tabela 9.89. Colunas de saída da função pg_control_checkpoint

Nome da colunaTipo de dados
checkpoint_lsnpg_lsn
redo_lsnpg_lsn
redo_wal_filetext
timeline_idinteger
prev_timeline_idinteger
full_page_writesboolean
next_xidtext
next_oidoid
next_multixact_idxid
next_multi_offsetxid
oldest_xidxid
oldest_xid_dbidoid
oldest_active_xidxid
oldest_multi_xidxid
oldest_multi_dbidoid
oldest_commit_ts_xidxid
newest_commit_ts_xidxid
checkpoint_timetimestamp with time zone

Tabela 9.90. Colunas de saída da função pg_control_system

Nome da colunaTipo de dados
pg_control_versioninteger
catalog_version_nointeger
system_identifierbigint
pg_control_last_modifiedtimestamp with time zone

Tabela 9.91. pg_control_init Output Columns

Nome da colunaTipo de dados
max_data_alignmentinteger
database_block_sizeinteger
blocks_per_segmentinteger
wal_block_sizeinteger
bytes_per_wal_segmentinteger
max_identifier_lengthinteger
max_index_columnsinteger
max_toast_chunk_sizeinteger
large_object_chunk_sizeinteger
float8_pass_by_valueboolean
data_page_checksum_versioninteger
default_char_signednessboolean

Tabela 9.92. Colunas de saída da função pg_control_recovery

Nome da colunaTipo de dados
min_recovery_end_lsnpg_lsn
min_recovery_end_timelineinteger
backup_start_lsnpg_lsn
backup_end_lsnpg_lsn
end_of_backup_record_requiredboolean

9.27.11. Funções de informações de versão #

As funções descritas na Tabela 9.93 retornam informações sobre versão.

Tabela 9.93. Funções de informações de versão

Função

Descrição

version () → text

Retorna uma cadeia de caracteres que descreve a versão do servidor PostgreSQL. Estas informações também podem ser obtidas a partir de server_version ou, para uma versão legível por máquina, usado server_version_num. Os desenvolvedores de software devem usar server_version_num (disponível desde a versão 8.2) ou PQserverVersion em vez de analisar a versão em texto.

SHOW server_version;18.1 (Debian 18.1-1.pgdg12+2)

SHOW server_version_num;180001

unicode_version () → text

Retorna uma cadeia de caracteres representando a versão do Unicode usada pelo PostgreSQL.

SELECT unicode_version();16.0

icu_unicode_version () → text

Retorna uma cadeia de caracteres representando a versão do Unicode usada pelo ICU (International Components for Unicode), se o servidor foi compilado com suporte para ICU; caso contrário será retornado NULL

SELECT icu_unicode_version();15.0


9.27.12. Funções de resumo de informações do WAL #

As funções descritas na Tabela 9.94 retornam informações sobre o estado do resumo do WAL. Veja summarize_wal.

Tabela 9.94. Funções de resumo de informações do WAL

Função

Descrição

pg_available_wal_summaries () → setof record ( tli bigint, start_lsn pg_lsn, end_lsn pg_lsn )

Retorna informações sobre os arquivos de resumo do WAL presentes no diretório de dados, sob pg_wal/summaries. Será retornada uma linha por arquivo de resumo do WAL. Cada arquivo resume o WAL no TLI indicado dentro do intervalo LSN indicado. Esta função pode ser útil para determinar se existem resumos do WAL no servidor suficientes para realizar uma cópia de segurança incremental com base em uma cópia de segurança anterior cujo LSN inicial seja conhecido.

pg_wal_summary_contents ( tli bigint, start_lsn pg_lsn, end_lsn pg_lsn ) → setof record ( relfilenode oid, reltablespace oid, reldatabase oid, relforknumber smallint, relblocknumber bigint, is_limit_block boolean )

Retorna informação sobre o conteúdo de um único arquivo de resumo do WAL identificado pelo TLI e pelos LSNs inicial e final. Cada linha com is_limit_block definido como falso indica que o bloco identificado pelas colunas de saída restantes foi modificado por pelo menos um registro do WAL dentro do intervalo de registros resumidos por este arquivo. Cada linha com is_limit_block definido como verdade indica (a) que o arquivo da relação foi truncado para o comprimento dado por relblocknumber dentro do intervalo relevante de registros do WAL, ou (b) que o arquivo da relação foi criado ou excluído dentro do intervalo relevante de registros do WAL; nestes casos relblocknumber será igual a zero.

pg_get_wal_summarizer_state () → record ( summarized_tli bigint, summarized_lsn pg_lsn, pending_lsn pg_lsn, summarizer_pid int )

Fornece informações sobre o progresso do resumo do WAL. Se nenhum resumo do WAL tiver sido executado desde que a instância foi iniciada, então summarized_tli e summarized_lsn serão 0 e 0/0, respectivamente; caso contrário, serão o TLI e o LSN final do último arquivo de resumo do WAL escrito no disco. Se o resumo do WAL estiver em execução, então pending_lsn será o LSN final do último registro consumido, que deverá ser sempre maior ou igual a summarized_lsn; Se o resumo do WAL não estiver em execução, então será igual a summarized_lsn. summarizer_pid é o PID do processo de resumo do WAL, se estiver em execução, e NULL caso contrário.

Como exceção especial, o processo de resumo do WAL se recusará a gerar arquivos de resumo do WAL se executado em WAL gerados com wal_level=minimal, uma vez que estes resumos seriam inseguros para serem usados ​​como base para uma cópia de segurança incremental. Neste caso, os campos acima continuarão avançando como se os resumos estivessem sendo gerados, mas nada será escrito no disco. Assim que o processo de resumo atingir o WAL gerado com wal_level definido como replica ou maior, o processo irá retomar a escrita dos resumos no disco.

SELECT pg_get_wal_summarizer_state();(0,0/0,0/0,)




[91] ACL: Na tecnologia da informação, uma lista de controle de acesso (ACL, do inglês Access Control List) é uma lista que define as permissões de acesso de um usuário a um determinado componente ou serviço de um sistema. (Wikipédia) (N. T.)