2012-08-10 17 views
17

Quiero cambiar el nombre de todos los nombres de las columnas a minúsculas en la base de datos PostgreSQL. Acabo de codificar una función sql. A continuación está el código.Cambiar el nombre de los nombres de las columnas en la base de datos 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; 

El código anterior da relación tbl_name no existe. ¿Qué está mal con el código?

Respuesta

38

Necesita usar dynamic SQL para hacer eso; el nombre de la tabla no puede ser una variable.

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

o similares

Cuestiones relacionadas