sql >> Databáze >  >> RDS >> PostgreSQL

Přejmenování více sloupců v PostgreSQL

Neexistuje žádný jednotný příkazový přístup. Samozřejmě můžete zadat více příkazů pro RENAME od vás, ale dovolte mi uvést určité zlepšení:) Jak jsem řekl v této odpovědi

Ve vašem případě by to bylo:

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;

To vám dá sadu řetězců, které jsou příkazy SQL jako:

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

Není třeba používat table_schema v WHERE klauzule, pokud je tabulka public schéma. Nezapomeňte také použít funkci quote_ident() -- přečtěte si mou původní odpověď pro další vysvětlení.

Upravit:

Změnil jsem svůj dotaz, takže nyní funguje pro všechny sloupce s názvem začínajícím podtržítkem _ . Protože podtržítko je speciální znak při porovnávání vzorů SQL, musíme jej escapovat (pomocí \ ), abyste jej skutečně našli.



  1. MYSQL Trigger nastavte hodnotu data a času pomocí příkazu case

  2. Operátor SQL se nerovná () pro začátečníky

  3. Nejúčinnější způsob, jak najít něco rekurzivně v tabulce?

  4. Dialekt SQL není nakonfigurován (Phpstorm)