2016-06-09 1 views
0

오늘 덤프가 생성 된 데이터베이스에 실수로 pg_dumpall 파일을 복원했습니다. 이 복원으로 인해 특정 ID 등의 중복이 발생했습니다.덤프가 모두 복원 된 postgres 데이터베이스에서 중복 스키마/테이블 제거

이것은 복잡한 프로덕션 데이터베이스이며 전체 데이터베이스를 손상시키지 않았지만 실제 데이터베이스를 사용하는 사이트에서 변경하는 기능에 실제로 영향을줍니다. 이제 막 손실을 줄이고 데이터베이스를 원래 pg_dumpall로 재설정 할 수 있다는 것을 알았지 만 (이는 어젯밤처럼 최근이었습니다), 데이터베이스를 사용하는 사이트에서 하루 종일 작업/게시가 손실된다는 것을 의미합니다.

이 문제를 해결하기 위해 할 수있는 일이 있습니까?

답변

1

기본 키가 없으면 어렵습니다. 기본 키를 사용하면 이런 일이 발생하지 않았습니다. -

  • 다시 가져옵니다 (물론 DB를 삭제하지 않고,) 지난 밤의 덤프
  • 추가 PK

    1. 모든 스키마의 이름을 변경 (>bad_schemaschema) : 당신이 할 수있는 가장 좋은 방법은, 이럴입니다 모든 새 테이블에 제약 조건 (이 수동 작업이 필요합니다!) 모든 schemas.tables에 대한
    2. 는 (이 해당하는 bad_schema.XXX에 (고유하지 않은) 인덱스를 요구할 수 있습니다 그들은 아직 존재하지 않는 schema.tableXXX 경우에 bad_schema.tableXXX에서 행을 추가 의도 된 FK의)
    3. (옵션) 해당 열의 기존 max (값)로 시퀀스를 조정합니다.

    위의 내용을 이해하지 못했거나 너무 많은 작업 인 경우 손실을 감수하고 어제의 백업을 설치하십시오. 먼저 손상된 데이터베이스 이름 바꾸기 (또는 스키마 이름 바꾸기) 및 나중에 새 레코드를 추출해보십시오.


    요약 : 일부 (부분적으로) 솔루션에는 어떤 방식 으로든 기본 키가 필요하다는 것을 알고 있어야합니다. PK가없는 테이블은 허약하고 무의미합니다.