PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Umbenennen mehrerer Spalten in PostgreSQL

Es gibt keinen einzigen Befehlsansatz. Natürlich könnten Sie mehrere Befehle für RENAME eingeben von dir selbst, aber lass mich etwas verbessern :) Wie ich in dieser Antwort sagte

In Ihrem Fall wäre es:

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;

Das gibt Ihnen eine Reihe von Zeichenfolgen, die SQL-Befehle sind, wie:

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

Es ist nicht erforderlich, table_schema zu verwenden in WHERE -Klausel, wenn Ihre Tabelle in public ist Schema. Denken Sie auch an die Verwendung der Funktion quote_ident() - Lesen Sie meine ursprüngliche Antwort für weitere Erklärungen.

Bearbeiten:

Ich habe meine Abfrage geändert, sodass sie jetzt für alle Spalten funktioniert, deren Name mit dem Unterstrich _ beginnt . Da der Unterstrich beim SQL-Musterabgleich ein Sonderzeichen ist, müssen wir ihn maskieren (mithilfe von \ ), um es tatsächlich zu finden.