単一のコマンドアプローチはありません。明らかに、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パターンマッチングの特殊文字であるため、エスケープする必要があります(\
を使用) )実際にそれを見つけるために。