ALTER PROCEDURE

ALTER PROCEDURE — modifica a definição de um procedimento

Sinopse

ALTER PROCEDURE nome [ ( [ [ modo_do_argumento ]​
    [ nome_do_argumento ] tipo_de_dados_do_argumento [, ...] ] ) ]
    ação [ ... ] [ RESTRICT ]
ALTER PROCEDURE nome [ ( [ [ modo_do_argumento ]​
    [ nome_do_argumento ] tipo_de_dados_do_argumento [, ...] ] ) ]
    RENAME TO novo_nome
ALTER PROCEDURE nome [ ( [ [ modo_do_argumento ]​
    [ nome_do_argumento ] tipo_de_dados_do_argumento [, ...] ] ) ]
    OWNER TO {
        novo_dono
      | CURRENT_ROLE
      | CURRENT_USER
      | SESSION_USER
    }
ALTER PROCEDURE nome [ ( [ [ modo_do_argumento ]​
    [ nome_do_argumento ] tipo_de_dados_do_argumento [, ...] ] ) ]
    SET SCHEMA novo_esquema
ALTER PROCEDURE nome [ ( [ [ modo_do_argumento ]​
    [ nome_do_argumento ] tipo_de_dados_do_argumento [, ...] ] ) ]
    [ NO ] DEPENDS ON EXTENSION nome_da_extensão

onde ação é uma entre:

    [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
    SET parâmetro_de_configuração { TO | = } { valor | DEFAULT }
    SET parâmetro_de_configuração FROM CURRENT
    RESET parâmetro_de_configuração
    RESET ALL

Descrição

O comando ALTER PROCEDURE modifica a definição de um procedimento

É necessário ser o dono do procedimento para poder executar o comando ALTER FUNCTION. Para alterar o esquema do procedimento, também é necessário possuir o privilégio CREATE no novo esquema. Para alterar o dono, é necessário ser capaz de executar o comando SET ROLE para a função de banco de dados (role) que será a nova dona, e esta função de banco de dados precisa possuir o privilégio CREATE no esquema do procedimento. (Estas restrições impõem que alterar o dono não faz nada que não poderia ser feito excluindo e recriando o procedimento. Entretanto, um superusuário pode alterar o dono de qualquer procedimento.)

Parâmetros

nome

O nome (opcionalmente qualificado pelo esquema) do procedimento existente. Se não for especificada nenhuma lista de argumentos, o nome deverá ser único em seu esquema.

modo_do_argumento

O modo do argumento: IN, OUT, INOUT, ou VARIADIC. Se omitido, o padrão é IN.

nome_do_argumento

O nome do argumento. Note que o comando ALTER PROCEDURE, na verdade, não presta atenção aos nomes dos argumentos, porque apenas os tipos de dados dos argumentos são necessários para determinar a identidade do procedimento.

tipo_de_dados_do_argumento

Os tipos de dados dos argumentos do procedimento (opcionalmente qualificados pelo esquema), se houver. Veja DROP PROCEDURE para obter os detalhes de como o procedimento é procurado usando o(s) tipo(s) de dados do argumento.

novo_nome

O novo nome do procedimento.

novo_dono

O novo dono do procedimento. Note que se o procedimento estiver marcado como SECURITY DEFINER, ele será executado subsequentemente com o novo dono.

novo_esquema

O novo esquema para o procedimento.

nome_da_extensão

Esta forma marca o procedimento como dependente da extensão, ou não mais dependente dessa extensão se for especificado NO. Um procedimento marcado como dependente de uma extensão é removido quando a extensão é removida, mesmo que não seja especificado CASCADE. Um procedimento pode ser dependente de várias extensões, sendo removido quando qualquer uma dessas extensões for removida.

[ EXTERNAL ] SECURITY INVOKER
[ EXTERNAL ] SECURITY DEFINER

Altera se o procedimento é SECURITY DEFINER, ou não. A palavra-chave EXTERNAL é permitida para manter a conformidade com o padrão SQL. Veja CREATE PROCEDURE para obter mais informações sobre este recurso.

parâmetro_de_configuração
valor

Adiciona ou altera a atribuição a ser feita a um parâmetro de configuração quando o procedimento for chamado. Se valor for DEFAULT ou, de forma equivalente, for usado RESET, a configuração local do procedimento é removida, para que o procedimento seja executado com o valor presente no ambiente. Deve ser usado RESET ALL para limpar todas as definições locais do procedimento. A cláusula SET FROM CURRENT salva o valor corrente do parâmetro quando ALTER PROCEDURE é executado como o valor a ser aplicado quando o procedimento é chamado.

Veja SET e Configuração do servidor para obter mais informações sobre nomes e valores de parâmetros permitidos.

RESTRICT

Ignorado, só para manter a compatibilidade com o padrão.

Exemplos

Para alterar o nome do procedimento insert_data com dois argumentos do tipo de dados integer para insert_record:

ALTER PROCEDURE insert_data(integer, integer)
    RENAME TO insert_record;

Para alterar o dono do procedimento insert_data com dois argumentos do tipo de dados integer para joe:

ALTER PROCEDURE insert_data(integer, integer)
    OWNER TO joe;

Para alterar o esquema do procedimento insert_data com dois argumentos do tipo de dados integer para accounting:

ALTER PROCEDURE insert_data(integer, integer)
    SET SCHEMA accounting;

Para marcar o procedimento insert_data(integer, integer) como sendo dependente da extensão myext:

ALTER PROCEDURE insert_data(integer, integer)
    DEPENDS ON EXTENSION myext;

Para ajustar o caminho de procura definido automaticamente para um procedimento:

ALTER PROCEDURE check_password(text)
    SET search_path = admin, pg_temp;

Para desativar a definição automática de search_path para um procedimento:

ALTER PROCEDURE check_password(text)
    RESET search_path;

O procedimento agora será executado com qualquer caminho de procura usado por seu chamador.

Conformidade

Este comando é parcialmente compatível com a comando ALTER PROCEDURE do padrão SQL. O padrão permite que sejam alteradas mais propriedades de um procedimento, mas não fornece a capacidade de alterar o nome do procedimento, tornar o procedimento SECURITY DEFINER, anexar valores de parâmetro de configuração a um procedimento, ou alterar o dono, esquema ou volatilidade de um procedimento. O padrão também requer a palavra-chave RESTRICT, opcional no PostgreSQL.

Veja também

CREATE PROCEDURE, DROP PROCEDURE, ALTER FUNCTION, ALTER ROUTINE