2012-08-10 15 views
17

PostgreSQLデータベースですべてのカラム名を小文字に変更したいSQL関数をコーディングしました。以下はコードです。postgresqlデータベースのカラム名を変更する

CREATE OR REPLACE FUNCTION update_column_names() RETURNS boolean AS $$ 
DECLARE 
aRow RECORD; 
aRow2 RECORD; 
tbl_name TEXT; 
col_name TEXT; 
new_col_name TEXT; 
BEGIN 
    FOR aRow IN select table_name from information_schema.tables where table_schema='public' and table_type='BASE TABLE' LOOP 
     SELECT aRow.table_name INTO tbl_name from current_catalog; 
     FOR aRow2 IN select column_name from information_schema.columns where table_schema='public' and table_name = aRow.table_name LOOP 
      SELECT aRow2.column_name INTO col_name from current_catalog; 
      new_col_name:=lower(col_name); 
      RAISE NOTICE 'Table name:%',tbl_name; 
      RAISE NOTICE 'Column name:%',aRow2.column_name; 
      RAISE NOTICE 'New column name:%',new_col_name; 
      ALTER TABLE tbl_name RENAME COLUMN col_name TO new_col_name; 
     END LOOP; 
    END LOOP; 
    RETURN true; 
END; 
$$ LANGUAGE plpgsql; 

上記のコードでは、関係tbl_nameは存在しません。コードの何が間違っていますか?

答えて

38

これを行うにはdynamic SQLを使用する必要があります。テーブル名は変数にすることはできません。

⋮ 
EXECUTE 'ALTER TABLE ' || quote_ident(tbl_name) || ' RENAME COLUMN ' 
     || quote_ident(col_name) || ' TO ' || quote_ident(new_col_name); 
⋮ 

または類似

関連する問題