사용하고 있는 psql 의 데이타를 옮기려고 합니다.
DB를 사용하는 것은 VC++로 된 어플리 케이션과 웹입니다.
현재 사용하고 있는 버전이 psql 7.2.3 버전이고, 테이블이랑 안에 있는 데이타까지 새로
설치한 PC에 psql 8.1.3 서버로 옮기려고 합니다.
근데 문제가 새로 리눅스를 설치한 PC 가 일본에서 사용하게 될 거라서 DB를 EUC_JP로 변경할
예정입니다.
psql7.2.3 (EUC_KR) => psql8.1.3(EUC_JP)
이렇게 되는데요. 이렇게 변경한 이유는 일본어를 VC++로 만든 프로그램에서 사용하기 위함입니다.
웹이 SJIS 로 되어 있어서 서버 인코딩을 EUC_JP 로 바꾸고 클라이언트 인코딩을 SJIS로 변경하여
제대로 입력되는 것을 확인 했습니다. 근데 psql 7.2.3에서는 안되고 psql 8.1.3 에서 제대로
되더군요.
접속 프로그램은 ODBC에서 자동적으로 변경을 해줘서 제대로 웹에서 입력한 정보가 보이고,
입력이 됩니다.
그리고, psql7.2.3 에 있는 데이타들은 대부분이 영문입니다.
여기서 이제 DB를 백업하려고 하는데
pg_dump -s -Uadmin -d test > backup.sql ->psql 7.2.3
pgsql -s -U admin -d test < backup.sql ->psql 8.1.3
이런식으로 하려고 합니다.
근데 문제가 발생을 했습니다. psql 7.2.3 버전은 내부적으로 트리거를 사용하고 있습니다.
"DELETE CASCADE ON UPDATE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE"
이런 옵션들이 달린 테이블이 상당합니다.
A,B,C 테이블이 있다고 가정할 때 A테이블의 데이타를 지우면 B 와 C 테이블의 데이타가
지워지고 A테이블의 데이타를 입력하면 B와 C의 데이타를 확인하고 같은 값이 있을때만
입력을 허용하는 식의 설정이 되어 있습니다.
자동 증가시키는 것도 테이블마다 추가 되어 있는 것도 있습니다.
DB를 백업하고 위의 명령어로 풀었을 경우 이런 관계들이 그대로 가지지는 않는 것 같습니다.
그래서인지 전임자는 아예 psql 폴더채로 스케줄러를 돌려서 백업을 하고, DB가 깨지면 해당
압축 파일을 통째로 푸는 걸로 복구를 했던건지.
1.테이블의 트리거 까지 이상없이 옮길수 있는 방법.
2.서버 인코딩 변경으로 영문으로 된 문자열이라고 해도 해당 테이블의 데이타를 입력할때에
문제가 없는 건지.
설명 부탁 드립니다. DB도 자세히는 아는게 아니라서 애를 먹고 있습니다.
방향 제시만이라도 좋습니다.
그리고, 질문에 답해 주시는 분들과 검색하며 연구한 덕에 여기까지 올 수 있었습니다.
감사드립니다.
|