2017-11-03 20 views
1

데이터베이스 스키마를 변경할 때 현재 데이터베이스 백업 워크 플로를 설정하려고합니다.pg_dump 및 pg_restore : 목차를 변경할 때 "오류 세그먼트 화 오류 (코어가 덤프 됨)"

pg_dump --data-only --compress=0 --encoding=utf8 -U my_user -F d -f backup_directory_name my_db_name 

이 한 각 테이블의 파일과 내용의 테이블에 새 폴더를 만들고이 toc.dat 파일 : 데이터 (데이터 만) 내가이 명령을 실행을을 backuping에 대한

.

데이터베이스 스키마를 변경하고 있습니다. properties 테이블에 새로운 부울 열 isencrypted을 추가 할 수 있습니다. 내 백업이 오래되어 스키마에 맞지 않습니다.

어떻게 진행합니까? 변경 데이터 전에 테이블 properties에 대한

toc.dat 항목 :

[email protected]^@^@?^@^@^@COPY properties (key, createdat, updatedat, value) FROM stdin; 

변경 데이터 전에 테이블 properties에 대한 모든 항목을 잡고 관련 테이블 백업 파일 :

mail.subject.verification  \N  \N  Mailadresse bestätigen 

가 지금은 두 파일을 변경

에 맞게 새 스키마 :

변경 데이터 후 테이블 properties에 대한항목 : 변경 데이터 후

[email protected]^@^@?^@^@^@COPY properties (key, createdat, updatedat, value, isencrypted) FROM stdin; 

관련 테이블 백업 파일 : 나는 지금 그 테이블을 복원하려고하면

mail.subject.verification  \N  \N  Mailadresse bestätigen f 

, 오류가 발생합니다. 복원-명령을 :

$ pg_restore -U my_user --data-only --table=properties --format=d -d my_db_name backup_directory_name 

오류 :

Segmentation fault (core dumped) 

내가 다시 그들이 스키마이기 때문에 음, 인서트는 분명히 실패 (오류가 없어 얼마나에 toc.dat 및 백업 파일을 변경하는 경우 다른).

내가 뭘 잘못하고 있니?

+0

@a_horse_with_no_name 대신 수동으로 psql를 사용하여 방금 테이블 동안 복원 생략하고 다음을 가져올 수 toc.dat 파일을 해킹

? –

+0

열을 추가 한 후 백업을 만들면 어떨까요? 또는 덤프 용으로 일반 sql을 사용하면 편집 할 수 있습니다. – jira

+0

JPA/hibernate (https://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html/ch03.html)를 사용하고 있는데, 'hibernate.hbm2ddl'을 설정해야합니다.auto '값을'validate '에서'create '로 변경하면 스키마가 다시 만들어지면서 모든 데이터가 완전히 손실됩니다. 나는 다른 것들을 엉망으로 만들지 않도록 별도의 파일을 갖고 싶었다. 또한, 파일은 거대한 얻을 수도 –

답변

1

COPY properties (key, createdat, updatedat, value, isencrypted) FROM stdin;과 같은 읽을 수있는 문자열이 있지만 toc.dat은 이진 파일입니다. 이 문자열 사이의 바이트 수는 이진 코드로 인코딩되어 길이가 올바르지 않으므로 파일에 , isencrypted을 추가하면 잘못된 데이터에 세그먼트 오류가 발생합니다. 나는이 맞춤법 오류에 대한 downvote을 얻고 있도록

psql my_dbname -c '\copy properties (key, createdat, updatedat, value, isencrypted) from 12345678.dat'