PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Renommer plusieurs colonnes dans PostgreSQL

Il n'y a pas d'approche de commande unique. Évidemment, vous pouvez taper plusieurs commandes pour RENAME par vous-même, mais permettez-moi d'introduire une amélioration :) Comme je l'ai dit dans cette réponse

Dans votre cas, ce serait :

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;

Cela vous donnera un ensemble de chaînes qui sont des commandes SQL comme :

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

Il n'est pas nécessaire d'utiliser table_schema dans WHERE clause si votre table est en public schéma. N'oubliez pas d'utiliser la fonction quote_ident() -- lisez ma réponse originale pour plus d'explications.

Modifier :

J'ai modifié ma requête, elle fonctionne donc maintenant pour toutes les colonnes dont le nom commence par un trait de soulignement _ . Parce que le trait de soulignement est un caractère spécial dans la correspondance de modèle SQL, nous devons l'échapper (en utilisant \ ) pour le trouver réellement.