2012-08-10 24 views
17

PostgreSQL veritabanında küçük harflere tüm sütun adlarını yeniden adlandırmak istiyorum. Sadece bir sql işlevini kodladım. Kod aşağıdadır.Postgresql veritabanındaki sütun adlarını yeniden adlandır

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; 

Yukarıdaki kod, tbl_name ilişkisi bulunmuyor. Kodun nesi yanlış?

cevap

38

Bunu yapmak için dynamic SQL kullanmanız gerekir; Tablo adı bir değişken olamaz.

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

veya benzeri

İlgili konular