PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Renomeando várias colunas no PostgreSQL


Não há uma única abordagem de comando. Obviamente, você pode digitar vários comandos para RENAME por você mesmo, mas deixe-me apresentar algumas melhorias:) Como eu disse esta resposta

No seu caso seria:
SELECT
    'ALTER TABLE ' || tab_name || ' RENAME COLUMN '
    || quote_ident(column_name) || ' TO '
    || quote_ident( '_1' || column_name) || ';'
FROM (
    SELECT
        quote_ident(table_schema) || '.' || quote_ident(table_name) as tab_name,
        column_name
    FROM information_schema.columns  
    WHERE 
            table_schema = 'schema_name'
            AND table_name = 'table_name'
            AND column_name LIKE '\_%'
) sub;

Isso lhe dará um conjunto de strings que são comandos SQL como:
ALTER TABLE  schema_name.table_name RENAME COLUMN "_settingA" TO "_1_settingA";
ALTER TABLE  schema_name.table_name RENAME COLUMN "_settingB" TO "_1_settingB";
...

Não há necessidade de usar table_schema em WHERE cláusula se sua tabela estiver em public esquema. Lembre-se também de usar a função quote_ident() -- leia minha resposta original para obter mais explicações.

Editar:

Eu mudei minha consulta, então agora ela funciona para todas as colunas com nome começando com sublinhado _ . Como o sublinhado é um caractere especial na correspondência de padrões SQL, devemos escapar dele (usando \ ) para encontrá-lo de fato.