2012-08-10 11 views
17

मैं पोस्टग्रेएसक्यूएल डेटाबेस में सभी कॉलम नामों को कम केस में बदलना चाहता हूं मैंने अभी एक एसक्यूएल फ़ंक्शन को कोड किया है। नीचे कोड है।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); 
⋮ 

या इसी तरह

संबंधित मुद्दे