O catálogo pg_proc armazena informações sobre funções, procedimentos, funções de agregação e funções de janela (coletivamente também conhecidas como rotinas). Veja CREATE FUNCTION, CREATE PROCEDURE e Funções definidas pelo usuário para obter mais informações.
Se prokind indicar que a entrada é para
uma função de agregação, deverá haver uma linha correspondente em
pg_aggregate.
Tabela 52.39. Colunas de pg_proc
Coluna Tipo de dados Descrição |
|---|
Identificador da linha |
Nome da função |
OID do espaço de nomes que contém esta função |
Dono da função |
Linguagem de implementação ou interface de chamada da função |
Custo estimado de execução (em unidades de
cpu_operator_cost); se
|
Número estimado de linhas de resultados (zero se não
|
Tipo de dados dos elementos do parâmetro da matriz
|
Função de suporte do planejador para esta função (veja Informações sobre otimização de funções), ou zero se nenhuma |
|
A função é um definidor de segurança (ou seja, uma função “setuid”) |
A função não tem efeitos colaterais. Nenhuma informação sobre os argumentos é transmitida, exceto por meio do valor retornado. Qualquer função que possa gerar um erro dependendo dos valores de seus argumentos não é à prova de vazamentos. |
A função retorna nulo se algum argumento de chamada for nulo. Neste caso, a função não será realmente chamada. As funções que não são “estritas” devem estar preparadas para lidar com entradas nulas. |
A função retorna um conjunto (ou seja, vários valores do tipo de dados especificado) |
|
|
Número de argumentos de entrada |
Número de argumentos que possuem valor padrão |
Tipo de dados do valor retornado |
Matriz dos tipos de dados dos argumentos da função.
Inclui apenas os argumentos de entrada (incluindo argumentos
|
Matriz dos tipos de dados dos argumentos da função.
Inclui todos os argumentos (incluindo os argumentos
|
Matriz dos modos dos argumentos da função, codificados como
|
Matriz dos nomes dos argumentos da função.
Argumentos sem nome são definidos como cadeias de caracteres
vazias na matriz.
Se nenhum dos argumentos tiver nome, este campo será nulo.
Note que os índices correspondem às posições de
|
Árvores de expressão (na representação
|
Matriz do(s) tipo(s) de dados de argumento/resultado aos quais
aplicar transformações (da cláusula |
Informa ao tratador de função como chamar a função. Pode ser o código-fonte real da função para linguagens interpretadas, um símbolo de vinculação, um nome de arquivo, ou qualquer outra coisa, dependendo da linguagem de implementação/convenção de chamada. |
Informações adicionais sobre como chamar a função. Novamente, a interpretação é específica da linguagem. |
Corpo da função SQL pré-analisada. É usado para funções na linguagem SQL quando o corpo é fornecido na notação padrão SQL, em vez de como um literal cadeia de caracteres. É nulo em outros casos. |
Configurações locais da função para variáveis de configuração de tempo de execução |
Privilégios de acesso; veja Privilégios para obter detalhes |
Para funções compiladas, tanto integradas quanto carregadas dinamicamente,
prosrc contém o nome da função na linguagem
C (símbolo de vinculação).
Para funções na linguagem SQL,
prosrc contém o texto fonte da função
se for especificado como um literal cadeia de caracteres;
mas se o corpo da função for especificado no estilo padrão
SQL, prosrc não será
usado (normalmente é uma cadeia de caracteres vazia) e
prosqlbody contém a definição pré-analisada.
Para todos os outros tipos de linguagem conhecidos no momento,
prosrc contém o texto fonte da função.
probin é nulo, exceto para funções
C carregadas dinamicamente, para as quais fornece
o nome do arquivo da biblioteca compartilhada que contém a função.
Exemplo 52.23. Exemplo do tradutor
Rotinas do usuário corrente
Uso do catálogo pg_proc
para mostrar os nomes das rotinas do usuário corrente,
que no caso é a usuária ana,
escritas em pltcl.
ana=> SELECT p.proname, p.proowner::regrole, l.lanname, p.prokind ana-> FROM pg_proc p ana-> LEFT JOIN pg_language l ON p.prolang = l.oid ana-> WHERE p.proowner = CURRENT_USER::regrole::oid ana-> AND l.lanname = 'pltcl' ana-> ORDER BY p.proname;
proname | proowner | lanname | prokind
---------------------+----------+---------+---------
aumenta_salario | ana | pltcl | f
quadrado_cubo | ana | pltcl | f
sequencia | ana | pltcl | f
sobrepago | ana | pltcl | f
square_cube | ana | pltcl | f
tabela_de_quadrados | ana | pltcl | f
tcl_max | ana | pltcl | f
tcl_triplo | ana | pltcl | p
todosiguais | ana | pltcl | f
valida_cpf | ana | pltcl | f
(10 linhas)