52.39. pg_proc #

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

oid oid

Identificador da linha

proname name

Nome da função

pronamespace oid (referencia pg_namespace.oid)

OID do espaço de nomes que contém esta função

proowner oid (referencia pg_authid.oid)

Dono da função

prolang oid (referencia pg_language.oid)

Linguagem de implementação ou interface de chamada da função

procost float4

Custo estimado de execução (em unidades de cpu_operator_cost); se proretset, este é o custo por linha retornada

prorows float4

Número estimado de linhas de resultados (zero se não proretset)

provariadic oid (referencia pg_type.oid)

Tipo de dados dos elementos do parâmetro da matriz variadic, ou zero se a função não tiver um parâmetro variadic

prosupport regproc (referencia pg_proc.oid)

Função de suporte do planejador para esta função (veja Informações sobre otimização de funções), ou zero se nenhuma

prokind char

f para uma função normal, p para um procedimento, a para uma função de agregação, ou w para uma função de janela

prosecdef bool

A função é um definidor de segurança (ou seja, uma função setuid)

proleakproof bool

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.

proisstrict bool

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.

proretset bool

A função retorna um conjunto (ou seja, vários valores do tipo de dados especificado)

provolatile char

provolatile informa se o resultado da função depende apenas de seus argumentos de entrada, ou é afetado por fatores externos. É i para funções imutáveis, que sempre retornam o mesmo resultado para as mesmas entradas. É s para funções estáveis, cujos resultados (para entradas fixas) não mudam durante uma varredura. É v para funções voláteis, cujos resultados podem mudar a qualquer momento. (Use v também para funções com efeitos colaterais, para que as chamadas para as mesmas não possam ser otimizadas.)

proparallel char

proparallel informa se a função pode ser executada com segurança no modo paralelo. É s para funções seguras para serem executadas no modo paralelo sem restrições. É r para funções que podem ser executadas no modo paralelo, mas sua execução é restrita ao líder do grupo paralelo; os processos de trabalho paralelos não podem chamar estas funções. É u para funções que não são seguras no modo paralelo; a presença de tal função força um plano de execução serial.

pronargs int2

Número de argumentos de entrada

pronargdefaults int2

Número de argumentos que possuem valor padrão

prorettype oid (referencia pg_type.oid)

Tipo de dados do valor retornado

proargtypes oidvector (referencia pg_type.oid)

Matriz dos tipos de dados dos argumentos da função. Inclui apenas os argumentos de entrada (incluindo argumentos INOUT e VARIADIC) e, portanto, representa a assinatura de chamada da função.

proallargtypes oid[] (referencia pg_type.oid)

Matriz dos tipos de dados dos argumentos da função. Inclui todos os argumentos (incluindo os argumentos OUT e INOUT); entretanto, se todos os argumentos forem argumentos IN, este campo será nulo. Note que a indexação é baseada em 1, enquanto por razões históricas proargtypes é indexado em 0.

proargmodes char[]

Matriz dos modos dos argumentos da função, codificados como i para argumentos IN, o para argumentos OUT, b para argumentos INOUT, v para argumentos VARIADIC, t para argumentos TABLE. Se todos os argumentos forem argumentos IN, este campo será nulo. Note que os índices correspondem às posições de proallargtypes, e não de proargtypes.

proargnames text[]

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 proallargtypes, e não de proargtypes.

proargdefaults pg_node_tree

Árvores de expressão (na representação nodeToString()) para valores padrão. Esta é uma lista com elementos pronargdefaults, correspondendo aos últimos N argumentos de entrada (ou seja, as últimas N proargtypes posições). Se nenhum dos argumentos tiver valor padrão, este campo será nulo.

protrftypes oid[] (referencia pg_type.oid)

Matriz do(s) tipo(s) de dados de argumento/resultado aos quais aplicar transformações (da cláusula TRANSFORM da função). Nulo se nenhum.

prosrc text

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.

probin text

Informações adicionais sobre como chamar a função. Novamente, a interpretação é específica da linguagem.

prosqlbody pg_node_tree

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.

proconfig text[]

Configurações locais da função para variáveis ​​de configuração de tempo de execução

proacl aclitem[]

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)