언젠가 써야지 하면서 이제야 쓰네요.
7.3.x 버전이 다른 버전과 달리 꽤 많은 부분이 바뀌었습니다. 그래서, 향후 계속해서 PostgreSQL 서버를 이용한 자료 관리를 하고자 한다면, 7.3.x 기준의 자료 구조로 다시 변경작업을 해주어야 뒷날 고생을 덜합니다.
7.4 버전이 나오면서 일하고 있는 곳에서 자료를 더 이상 옛날 DB에 넣어두었다가는 나중에 고생할 것 같아 큰 마음 먹고 자료 이전 작업을 일주일째 하고 있습니다. (워낙 덩치가 큰 놈(?) 인데다가 자료구조가 난해해서 애 먹고 있네요)
7.3.x 이상 버전으로 자료를 이전 하고자 하는 분들은 다음 주의 해야할 사항들을 참고 하세요.
주의해야할 사항.
- serial 자료형.
테이블 정의 할 때, serial로 정의 해 두면, nextval()로 바뀌던 문제가 해결되었습니다. 그래서, 덤프 된 CREATE TABLE 구문에서 serial 정의를 다시 조정할 필요가 있습니다. 굳이 하지 않아도 되지만, 해 두면 나중에 테이블 삭제할 때, 해당 시퀀스도 같이 삭제가 됩니다. 이렇게 한다면, 덤프 파일에서 CREATE SQUENCE 구문이 필요없어지겠지요.
- 정수형 자료형
모든 쿼리에서 정수형 자료형에서 '' (빈문자열)을 허용하지 않습니다. 만일 이런식으로 정의 되었거나(default '') 사용하고 있다면(where integer_column = '') 모두 수정해 주어야합니다.
- 날짜형 자료형
datetime 자료형이 timestamp 자료형으로 바뀌었습니다. 날짜의 +, - 연산은 오직 date 형에서만 가능합니다. 시간까지 고려해야한다면, interval 형 변환자를 사용하셔야합니다. now() - 2 (잘못된 구문) now()::date - 2 (바른 구문) 또는 now() - interval '2 days'
- foreing key
foreign key 정의 방식이 완벽하게 변경되어버렸습니다. 기존 트리거 정의로 표현 했던 놈을 정확하게, 제약조건 외래키로 정의하고 있습니다. 이놈도 굳이 변경할 필요는 없지만, 훗날을 생각한다면, 덤프파일을 살펴보면서 다시 정의할 필요가 있습니다.
- trigger
만일 윗 작업 때문에, 스키마와 자료를 분리해서 덤프 받고, 스키마 먼저 수정해서 새 DB에서 만들고, 자료를 나중에 집어넣을 요량이라면, 트리거 정의 부분을 주의하셔야합니다. 방법은, pg_dump -s dbname > db_sechema.sql pg_dump -a dbname > db_data.sql 이렇게 두개를 받고, db_sechema.sql 파일을 열어서 위에서 언급한 모든 부분을 수정하고, 반드시 트리거 정의 부분은 분리해서 다른 파일로 따로 저장해 둡니다. 이 트리거 정의 부분 파일은 데이터를 모두 집어 넣고 난 다음에 맨 마지막에 실행 시켜주어야 자료가 완벽하게 이전되겠지요.
schema, table return function, domain, execute, ... 포기하기에는 아까운 기능들이 너무 많아서 이 고생을 하고 있습니다. 아무도 알아 주지도 않는데 말이지요. :( |