sql >> Database >  >> RDS >> PostgreSQL

Meerdere kolommen hernoemen in PostgreSQL

Er is geen enkele commandobenadering. Uiteraard kun je meerdere commando's typen voor RENAME door uzelf, maar laat me enige verbetering aanbrengen:) Zoals ik al zei in dit antwoord

In jouw geval zou dat zijn:

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;

Dat geeft je een reeks strings die SQL-commando's zijn zoals:

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

Het is niet nodig om table_schema te gebruiken in WHERE clausule als uw tabel zich in public bevindt schema. Onthoud ook het gebruik van de functie quote_ident() -- lees mijn oorspronkelijke antwoord voor meer uitleg.

Bewerken:

Ik heb mijn zoekopdracht gewijzigd, zodat deze nu werkt voor alle kolommen waarvan de naam begint met een onderstrepingsteken _ . Omdat onderstrepingsteken een speciaal teken is bij het zoeken naar SQL-patronen, moeten we het escapen (met behulp van \ ) om het daadwerkelijk te vinden.



  1. MySQL sorteren op aantal keren

  2. MySQL SUM Query is extreem traag

  3. Tekstwaarde invoeren op basis van geselecteerde optiewaarde dynamisch geladen vanuit sql db

  4. SQLAlchemy geen wachtwoord opgegeven fout