sql >> Base de Datos >  >> RDS >> PostgreSQL

Cambiar el nombre de varias columnas en PostgreSQL

No hay un enfoque de comando único. Obviamente, podría escribir varios comandos para RENAME por su cuenta, pero déjeme introducir algunas mejoras :) Como dije en esta respuesta

En tu caso sería:

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;

Eso le dará un conjunto de cadenas que son 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";
...

No es necesario usar table_schema en WHERE cláusula si su tabla está en public esquema. También recuerda usar la función quote_ident() -- lea mi respuesta original para obtener más explicaciones.

Editar:

Cambié mi consulta, por lo que ahora funciona para todas las columnas con un nombre que comienza con un guión bajo _ . Debido a que el guión bajo es un carácter especial en la coincidencia de patrones SQL, debemos escaparlo (usando \ ) para encontrarlo.