PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Rinominare più colonne in PostgreSQL

Non esiste un unico comando di approccio. Ovviamente puoi digitare più comandi per RENAME da solo, ma lasciami introdurre qualche miglioramento :) Come ho detto in questa risposta

Nel tuo caso sarebbe:

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;

Questo ti darà un set di stringhe che sono comandi SQL come:

ALTER TABLE  schema_name.table_name RENAME COLUMN "_settingA" TO "_1_settingA";
ALTER TABLE  schema_name.table_name RENAME COLUMN "_settingB" TO "_1_settingB";
...

Non è necessario utilizzare table_schema in WHERE clausola se la tua tabella è in public schema. Ricorda anche di usare la funzione quote_ident() -- leggi la mia risposta originale per ulteriori spiegazioni.

Modifica:

Ho cambiato la mia query, quindi ora funziona per tutte le colonne il cui nome inizia con underscore _ . Poiché il carattere di sottolineatura è un carattere speciale nella corrispondenza del modello SQL, dobbiamo eseguire l'escape (usando \ ) per trovarlo effettivamente.