2013-06-10 5 views
4

pg_dump를 수행하고 테이블/뷰와 열의 COMMENT ON을 제외시키는 방법이 있습니까?개체에 대한 의견이없는 pg_dump?

내가 예를 들어, 명확한 설명은 그들에 줄 바꿈을 모든 개체를 설명하는 명령 ON 광범위하게 COMMENT를 사용하고, 종종 다음과 같습니다

COMMENT ON TABLE mytable1 IS 'MAIN TABLE... 
NOTES: 
1. ... 
2. ... 
3. ... 
'; 

그러나, 줄 바꿈 덤프에 있기 때문에뿐만 아니라, 그럴 수 없어 단순히 grep -v 'COMMENT ON'명령으로 주석을 제거하십시오.

덤프에서 COMMENT ON을 빨리 제거하는 다른 방법은 없습니까?

+1

나는이 가능합니다 생각하지 않는다' –

+0

가능한 솔루션 pg_dump' -, 덤프를 복원하는 모든 감동적인을 찾아서 드롭을 생성 새로운 덤프. 동적 SQL 및 메타 데이터 쿼리를 사용하여 모든 주석을 찾고 삭제할 수 있습니다. –

+0

'COMMENT ON'문법이 매우 간단하기 때문에 더 똑똑한'sed' 또는'perl' 스크립트가 이것을 할 수 있습니다. 당신이해야 할 일은''COMMENT ON ... '과 같은 경우에 대해 이중 따옴표를 무시하고 문자열 이스케이프 구문 분석이 올바른지 확인하는 것입니다. 괜찮습니다.; –

답변

2

실제로 2 단계 덤프 및 복원으로이 작업을 수행합니다.

  1. 덤프하고 그대로 DB를 복원하거나 createdb -T 또는 CREATE DATABASE WITH TEMPLATE

  2. 실행으로 이전에서 새로운 DB를 생성하려면 다음 명령을

    Delete from pg_description; 
    
  3. 덤프를 해당 데이터베이스를 복원합니다. 그러면 주위에 불쾌한 의존성이 생기지 않도록 할 수 있습니다.
1

AFAIK, pg_dumppg_restore도는 COMMENT의를 제거하는 옵션이 있습니다. 당신이 좋아 진 덤프 형식을 사용한다면, :

$ pg_dump -Fc <your connection> -f /path/to/backup.dump 

당신은 TOC 항목을 추출하고 편집을 할 수 :

$ pg_restore -l -f /path/to/backup.toc /path/to/backup.dump 

위의 당신은, 목차 파일을 추출하고 /path/to/backup.toc에 저장됩니다 COMMENT 항목으로 각 행을 찾아서 제거하거나 주석 처리 할 수 ​​있습니다. 당신이 당신의 객체에 이상한 이름을 사용하지 않는 경우, 간단한 sed은 (세미콜론은 주석을 시작)이 작업을 수행 할 수 COMMENT의와 선을 언급, 문제를 해결할 것입니다 :

$ sed -i 's/^\(.* COMMENT .*\)/;\1/g' bar.toc 

을이 새로운 TOC로 파일, 이제 (-L 옵션) 덤프를 복원 할 pg_restore를 사용할 수 있습니다

$ pg_restore -L /path/to/backup.toc -d <your database> /path/to/backup.dump