2012-05-25 2 views
1
이러한 상황이 있습니다

: 나는 모든 테이블에 대한 전체 DB에 변경해야 은에 ' 시간대없이 타임 스탬프 '데이터 형식 필드 '타임 스탬프 (0) 시간대와 '포스트 그레스 대량 데이터 형식의 변화는

나는 기능을 만들하기로 결정 :

CREATE OR REPLACE FUNCTION grd_replace_datetime_with_timezone() 
    RETURNS character varying AS 
$BODY$ 

DECLARE 
    old_column RECORD; 
    s text; 
BEGIN 

FOR old_column IN (
    SELECT 
     isc.table_schema as table_schema, 
     isc.table_name as table_name, 
     isc.column_name as column_name 
    FROM 
     information_schema.columns isc 
    INNER JOIN 
     pg_tables pt 
      ON (isc.table_schema = pt.schemaname and isc.table_name = pt.tablename) 
    WHERE 
     isc.column_name like '%date%' and 
     isc.table_schema in ('public') and 
     isc.data_type = 'timestamp without time zone' 
    ORDER BY 
     isc.table_name ASC 
    ) 
LOOP 
    RAISE NOTICE 'Schema: %',old_column.table_schema; 
    RAISE NOTICE 'Table: %',old_column.table_name; 
    RAISE NOTICE 'Column %',old_column.column_name; 


    EXECUTE 'ALTER TABLE '||old_column.table_schema||'.'||old_column.table_name||' 
       ALTER COLUMN '||old_column.column_name||' TYPE timestamp(0) with time zone'; 

    RAISE NOTICE '-------------------------------------------------------------------------------'; 
    RAISE NOTICE ''; 
END LOOP; 


RETURN 'S'; 
END; 
$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 

을하지만 문제가있다 : 이러한 열이 나는 변경해야 느릅 나무에 일부보기에 따라 다르다.

ERROR: cannot alter type of a column used by a view or rule 

또한 내가 인덱스에 대한 오류가 발생했습니다 : 오류를 가지고와.

데이터 형식에 시간대가없는 모든 DB 파일에 대한 데이터 형식을 변경하는 방법에 대한 아이디어가 있으십니까?

답변