Translate

sábado, 19 de outubro de 2013

Mudar o nome de uma coluna no PostgreSql

Para alterar o nome de uma coluna no postgresql utilizamos a seguinte sintaxe:

ALTER TABLE nome_da_tabela RENAME  coluna_antiga TO coluna_nova;

Significado:
  • ALTER TABLE: comando do postgresql para alterar a tabela;
  • nome_da_tabela: nome da tabela que contém a coluna que será alterada;
  • RENAME  coluna_antiga TO coluna_nova: renomeia o nome antigo da coluna para um nome novo;
Exemplo:
Na tabela "esporte" queremos alterar o nome da coluna "modalidade_desc" para "esporte_desc". A tabela pode ser visualizada na imagem abaixo.


Após executarmos o comando:

ALTER TABLE esporte RENAME  modalidade_desc TO esporte_desc;

A coluna será renomeada conforme imagem exibida abaixo.



 
Caso precise renomear várias colunas em um único comando, foi criada a função (function) "fnc_renomear_multiplas_colunas" para executar estas alterações. 

Para uma melhor visualização clique no link abaixo e veja no GitHub:

fnc_renomear_multiplas_colunas

ou faça o download no Google Drive

fnc_renomear_multiplas_colunas 

 

Leia também:

PostgreSql - mudar o nome de uma tabela

2 comentários:

  1. oi boa noite!!
    gostaria de saber se é possivel renomear mais de uma coluna com um só comando, ou nao, tenho que usar um alter table diferente para cada coluna??

    ResponderExcluir
  2. Bom Dia Tron,

    Você pode utilizar o comando ALTER TABLE com mais de uma coluna, por exemplo, para incluir ou excluir coluna. Para renomear vc não consegue, porém você pode criar uma função para isto. Exemplo:
    ------------------------------------------------------------------------------------
    Execute o script abaixo para criar a função altera_colunas:

    CREATE OR REPLACE FUNCTION altera_colunas(nome_da_tabela character varying, nome_colunas varchar[][])
    RETURNS RECORD as
    $$
    DECLARE
    m varchar[];
    str_query TEXT;
    msg record;
    BEGIN
    FOR i IN array_lower(nome_colunas, 1) .. array_upper(nome_colunas, 1) LOOP
    str_query := 'ALTER TABLE ' || quote_ident(nome_da_tabela) || ' RENAME ' || quote_ident(nome_colunas[i][1]) || ' TO ' || quote_ident(nome_colunas[i][2]);
    RAISE NOTICE '%', str_query;
    EXECUTE str_query;
    END LOOP;

    SELECT INTO msg 'COLUNA(S) ALTERADA COM SUCESSO';
    RETURN msg;
    END
    $$
    LANGUAGE plpgsql;

    -----------------------------------------------------------------------------------------------------
    Após ter criado a função você pode executar a função que altera mais de uma coluna de uma vez. O primeiro parâmetro você passa o nome da tabela, no segundo parâmetro você passa primeiro o nome da coluna atual e depois o nome novo da coluna. Exemplo:

    SELECT altera_colunas
    (
    'esporte',
    array
    [
    array['id','cod'],
    array['modalidade_desc', 'esporte']
    ]
    ::varchar[][]
    );

    Qualquer dúvida manda uma mensagem.
    Abraço



    ResponderExcluir