A Tabela 6-27 mostra diversas funções que obtêm informações da sessão e do sistema.
Tabela 6-27. Funções de informação da sessão
Nome | Tipo retornado | Descrição |
---|---|---|
current_database() | name | nome do banco de dados corrente |
current_schema() | name | nome do esquema corrente |
current_schemas(boolean) | name[] | nomes dos esquemas no caminho de procura incluindo, opcionalmente, os esquemas implícitos |
current_user | name | nome do usuário do contexto de execução corrente |
session_user | name | nome do usuário da sessão |
user | name | equivale ao current_user |
version() | text | informação da versão do PostgreSQL |
O session_user
é o usuário que estabeleceu a conexão
com o banco de dados; imutável durante a conexão.
O current_user
é o identificador do usuário
utilizado para verificação de permissão. Normalmente é igual ao
usuário da sessão, mas muda durante a execução das funções
com o atributo SECURITY DEFINER.
Na terminologia Unix, o usuário da sessão é o "usuário real" e
o usuário corrente é o "usuário efetivo".
Nota: O
current_user
, osession_user
e ouser
possuem status sintático especial no SQL: devem ser chamados sem parênteses.
O current_schema
retorna o nome do esquema que está em primeiro
lugar no caminho de procura (ou o valor nulo se o caminho de procura estiver vazio).
Este é o esquema utilizado para qualquer tabela ou outro objeto nomeado
que for criado sem especificar o esquema a ser utilizado.
O current_schemas(boolean)
retorna uma matriz com os nomes de
todos os esquemas presentes no caminho de procura. A opção booleana determina se
os esquemas incluídos implicitamente sistema, tal como pg_catalog, serão incluídos
no caminho de procura retornado.
O caminho de procura pode ser alterado por uma configuração em tempo de execução. O comando a ser utilizado é o SET SEARCH_PATH 'esquema'[,'esquema']...
A função version()
retorna uma cadeia de caracteres
descrevendo a versão do servidor PostgreSQL.
A Tabela 6-28 mostra as funções disponíveis para consultar e modificar os parâmetros de configuração em tempo de execução.
Tabela 6-28. Funções de informação dos valores de configuração
Nome | Tipo retornado | Descrição |
---|---|---|
current_setting (nome_da_configuração)
| text | valor atual da configuração |
set_config(nome_da_configuração,
novo_valor,
is_local)
| text | novo valor da configuração |
A função current_setting
é utilizada para obter o valor corrente
da configuração nome_da_configuração como o resultado de uma
consulta. Equivale ao comando SQL SHOW.
Por exemplo:
select current_setting('DateStyle'); current_setting --------------------------------------- ISO with US (NonEuropean) conventions (1 row)
A função set_config
permite que a configuração
nome_da_configuração seja alterada para o
novo_valor. Se is_local
for definido como true, o novo valor somente se aplica
à transação corrente. Se for desejado que o novo valor seja aplicado para
a sessão corrente, deve ser utilizado false. Equivale
ao comando SQL SET. Por exemplo:
select set_config('show_statement_stats','off','f'); set_config ------------ off (1 row)
A Tabela 6-29 lista as funções que permitem o usuário consultar os privilégios de acesso aos objetos por meio de programa. Veja a Seção 2.7 para obter mais informações relativas aos privilégios.
Tabela 6-29. Funções de consulta a privilégios de acesso
Nome | Tipo retornado | Verifica se |
---|---|---|
has_table_privilege (usuário,
tabela,
acesso)
| boolean | o usuário pode acessar a tabela |
has_table_privilege (tabela,
acesso)
| boolean | o usuário corrente pode acessar a tabela |
has_database_privilege (usuário,
banco_de_dados,
acesso)
| boolean | o usuário pode acessar o banco de dados |
has_database_privilege (banco_de_dados,
acesso)
| boolean | o usuário corrente pode acessar o banco de dados |
has_function_privilege (usuário,
função,
acesso)
| boolean | o usuário pode acessar a função |
has_function_privilege (função,
acesso)
| boolean | o usuário corrente pode acessar a função |
has_language_privilege (usuário,
linguagem,
acesso)
| boolean | o usuário pode acessar a linguagem |
has_language_privilege (linguagem,
acesso)
| boolean | o usuário corrente pode acessar a linguagem |
has_schema_privilege (usuário,
esquema,
acesso)
| boolean | o usuário pode acessar o esquema |
has_schema_privilege (esquema,
acesso)
| boolean | o usuário corrente pode acessar o esquema |
A função has_table_privilege
verifica se o usuário
pode acessar a tabela de uma determinada forma. O usuário pode ser
especificado pelo nome ou pelo ID
(pg_user
.usesysid)
ou, se o argumento for omitido, será utilizado o
current_user
. A tabela pode ser especificada pelo
nome ou pelo OID (Portanto, existem na verdade seis variantes de
has_table_privilege
, as quais podem ser distinguidas
pelo número e pelos tipos de seus argumentos). Quando especificado pelo nome,
este pode ser qualificado pelo esquema, se for necessário.
A forma de acesso desejada é especificada no texto da
cadeia de caracteres, que deve ser avaliado como um dos seguintes valores:
SELECT, INSERT, UPDATE,
DELETE, RULE, REFERENCES ou
TRIGGER (Maiúsculas e minúsculas não fazem
diferença). Um exemplo é:
SELECT has_table_privilege('meu_esquema.minha_tabela', 'select');
A função has_database_privilege
verifica se o usuário
pode acessar o banco de dados de uma determinada forma. As possibilidades para
seus argumentos são análogas às da função has_table_privilege
.
Os tipos de acesso desejados devem ser avaliados como
CREATE,
TEMPORARY ou
TEMP (que equivale ao
TEMPORARY).
A função has_function_privilege
verifica se o usuário
pode acessar a função de uma determinada forma. As possibilidades para
seus argumentos são análogas às da função has_table_privilege
.
Ao especificar a função por meio de um texto e não pelo seu OID,
a entrada permitida é a mesma que para o tipo de dado regprocedure.
A forma de acesso desejada deve atualmente ser avaliada como
EXECUTE.
A função has_language_privilege
verifica se o usuário
pode acessar a linguagem procedural de um determinado modo. As possibilidades
para seus argumentos são análogas às da função has_table_privilege
.
A forma de acesso desejada deve atualmente ser avaliado como
USAGE.
A função has_schema_privilege
verifica se o usuário
pode acessar o esquema de uma determinada forma. As possibilidades para seus
argumentos são análogas às da função has_table_privilege
.
A forma de acesso desejada deve atualmente ser avaliado como
CREATE ou
USAGE.
A Tabela 6-30 mostra as funções que informam se um determinado objeto está visível no caminho de procura de esquema corrente. Uma tabela é dita visível se o esquema que a contém está no caminho de procura, e nenhuma tabela com o mesmo nome aparece antes no caminho de procura. Equivale declarar que a tabela pode ser referenciada pelo nome sem uma qualificação explícita do esquema. Por exemplo, para listar o nome de todas as tabelas visíveis:
SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);
Tabela 6-30. Funções de consulta à visibilidade do esquema
Nome | Tipo retornado | Verifica se |
---|---|---|
pg_table_is_visible (OID_tabela)
| boolean | a tabela está visível no caminho de procura |
pg_type_is_visible (OID_tipo)
| boolean | o tipo está visível no caminho de procura |
pg_function_is_visible (OID_função)
| boolean | a função está visível no caminho de procura |
pg_operator_is_visible (OID_operador)
| boolean | o operador está visível no caminho de procura |
pg_opclass_is_visible (oOID_classeop)
| boolean | a classe de operador está visível no caminho de procura |
A função pg_table_is_visible
realiza a verificação para
as tabelas (ou visões, ou qualquer outro tipo de entrada na pg_class).
As funções pg_type_is_visible
,
pg_function_is_visible
,
pg_operator_is_visible
e
pg_opclass_is_visible
realizam o mesmo tipo de verificação de
visibilidade para os tipos, funções, operadores e classes de operadores,
respectivamente. Para as funções e operadores, um objeto está visível no
caminho de procura se não existir nenhum objeto com o mesmo nome
e mesmos tipos de dado dos argumentos aparecendo antes no caminho. Para
as classes de operadores, tanto o nome quanto o método de acesso do índice associado
são considerados.
Todas estas funções requerem os OIDs dos objetos para identificar o objeto a ser verificado. Se for desejado testar o objeto pelo nome é conveniente utilizar os tipos aliases de OID (regclass, regtype, regprocedure ou regoperator), por exemplo
SELECT pg_type_is_visible('meu_esquema.widget'::regtype);
Observe que não faz muito sentido testar um nome não qualificado deste modo --- se o nome puder ser reconhecido então tem que ser visível.
A Tabela 6-31 lista as funções que
extraem informações dos catálogos do sistema.
As funções pg_get_viewdef()
,
pg_get_ruledef()
,
pg_get_indexdef()
e
pg_get_constraintdef()
reconstroem, respectivamente,
os comandos de criação da visão, da regra, do índice e da restrição.
(Observe que esta é uma reconstrução por descompilação, e não
o texto exato do comando). Atualmente a função
pg_get_constraintdef()
somente funciona para
as restrições de chave estrangeira. A função pg_get_userbyid()
obtém o nome do usuário a partir do valor do
usesysid.
Tabela 6-31. Funções de informação do catálogo
Nome | Tipo retornado | Descrição |
---|---|---|
pg_get_viewdef (nome_da_visão) | text | Obtém o comando CREATE VIEW para a visão (obsoleto) |
pg_get_viewdef (OID_visão) | text | Obtém o comando CREATE VIEW para a visão |
pg_get_ruledef (OID_regra) | text | Obtém o comando CREATE RULE para a regra |
pg_get_indexdef (OID_índice) | text | Obtém o comando CREATE INDEX para o índice |
pg_get_constraintdef (OID_restrição) | text | Obtém a definição da restrição |
pg_get_userbyid (ID_usuario) | name | Obtém o nome do usuário com o ID_usuário fornecido |
As funções mostradas na Tabela 6-32 obtêm os comentários previamente armazenados por meio do comando COMMENT. Se nenhum comentário correspondendo aos parâmetros especificados puder ser encontrando, o valor nulo é retornado.
Tabela 6-32. Funções de informação de comentário
Nome | Tipo retornado | Descrição |
---|---|---|
obj_description (OID_objeto, nome_da_tabela) | text | Obtém o comentário para o objeto do banco de dados |
obj_description (OID_objeto) | text | Obtém o comentário para o objeto do banco de dados (obsoleto) |
col_description (OID_tabela, número_da_coluna) | text | Obtém o comentário para a coluna da tabela |
A forma da função obj_description()
com dois parâmetros retorna
o comentário para o objeto do banco de dados especificado pelo seu OID, e o nome do
catálogo do sistema que o contém. Por exemplo,
obj_description(123456,'pg_class')
obtém o comentário para a tabela com OID 123456.
A forma de obj_description()
com um parâmetro requer apenas o
o OID do objeto. Está obsoleta porque não existe garantia
dos OIDs serem únicos entre diferentes catálogos do sistema; portanto, um comentário
errado pode ser retornado.
A função col_description()
retorna o comentário para a coluna da
tabela especificada pelo OID da tabela e pelo número da coluna. A função
obj_description()
não pode ser utilizada para colunas de tabela
porque as colunas não possuem OIDs próprios.