sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLで複数の列の名前を変更する

    単一のコマンドアプローチはありません。明らかに、RENAMEには複数のコマンドを入力できます あなた自身で、しかし私にいくつかの改善を導入させてください:) この答え で言ったように

    あなたの場合は次のようになります:

    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;
    

    これにより、次のようなSQLコマンドである文字列のセットが得られます。

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

    table_schemaを使用する必要はありません WHERE テーブルがpublicにある場合の句 スキーマ。 関数quote_ident()の使用も忘れないでください -詳細については、元の回答をお読みください。

    編集:

    クエリを変更したので、名前がアンダースコア_で始まるすべての列で機能するようになりました。 。アンダースコアはSQLパターンマッチングの特殊文字であるため、エスケープする必要があります(\を使用) )実際にそれを見つけるために。



    1. JavaScript PHP/MYSQLで削除する前に確認する

    2. MySQLクエリ-3つのテーブルを結合し、1つの列でグループ化し、他の2つをカウントします

    3. SQLServerの他の2つの列の間に列を追加する

    4. mysqlの一時テーブルをクリーンアップするにはどうすればよいですか?