PostgreSQL 덤프/복원에 문제가 있습니다. 우리는 PostgreSQL 8.4로 운영되는 제품 appliaction을 보유하고 있습니다. 테스트 환경에서 데이터베이스에 일부 값을 생성 한 다음이 데이터 덩어리를 프로덕션 환경으로 가져와야합니다. 데이터는 애플리케이션에 의해 생성되며, 생산에 들어가기 전에 테스트가 필요하기 때문에이 접근법을 사용해야합니다.새 기본 키 값으로 PostgreSQL 덤프 복원
지금은 환경을 설명하는 것이, 여기에 내 문제입니다 : 테스트 데이터베이스에서
, 나는 프로덕션 데이터베이스로 이동하는 데 필요한 데이터만을 남겨 없습니다. 데이터는 트리와 같이 여러 수준의 외래 키와 연결된 여러 테이블에 분산되어 있습니다. 그런 다음 pg_dump를 사용하여 원하는 테이블을 이진 형식으로 내 보냅니다.
가져 오기를 시도하면 데이터베이스가 새로운 기본 키 값을 사용하여 루트 테이블 항목을 올바르게 가져 오지만 다른 테이블의 데이터는 가져 오지 않습니다. 문제는 자식 테이블의 외래 키가 더 이상 새 기본 키를 인식하지 않는다고 생각합니다.
트리에서 영향을받는 모든 테이블의 모든 기본 키 값을 업데이트하여 직렬 (자동 증가) 값을 자동으로 수정하고 이러한 새 기본 키 값에 따라 모든 외래 키를 업데이트하는 방법이 있습니까? ?
두 데이터베이스에 연결되어있는 동안 프로그래밍 언어를 사용하여이 작업을 수행하는 방법을 알고 있지만 고객 제작 서버에 직접 액세스 할 수 없어 매우 만족 스럽습니다.
미리 감사드립니다.
신속한 답변을 보내 주셔서 감사합니다. 다양한 레코드의 ID가 청구서, 오퍼 등에서 고객에 의해 사용되기 때문에 갭이 문제가 될 수 있습니다.하지만 PL/pgSQL 언어를 살펴 보겠습니다. 나는 그것에 익숙하지 않지만, 내가 할 수있는 것을 본다. – j0hny
테스트 데이터가 순서 값을 차지하므로 어쨌든 갭을 준비하십시오. 물론 테스트 데이터를 삭제하고 시퀀스를 수정할 수는 있지만 테스트 기간에 사용자가 프로덕션 환경을 사용하면 데이터베이스가 엉망이되어 작업을 수행 할 수 없습니다. 데이터베이스 도구는 데이터를 내보내는 시작점 역할을 할 수있는 삽입 문으로 데이터를 내보낼 수 있습니다. ID 값을 가져 오려면 INSERT INTO 테이블 (cols) VALUES (vals) RETURNING idcolumn을 사용할 수 있습니다. 하위 선택과 함께 INSERT를 사용할 수도 있습니다. INSERT WITH은 또한 편리한 도구입니다. 행운을 빈다 :) – Peter
제안에 감사드립니다. 나는 실제로 다른 가능성을 생각해 냈습니다 - 작은 간격을 만들 수는 있지만 더 많은 제어권을 가졌습니다 - 영향을받는 모든 테이블에서 프로덕션 환경의 시퀀스를 삽입하려는 행 수만큼 증가시키는 스크립트를 만들었습니다. 비축. 그런 다음 프로덕션 "gap"의 시작 부분에서 시작 시퀀스를 삽입 할 데이터를 생성 한 다음 간단히 삽입합니다 .-). 이 솔루션은 효과가 있으며 생성 된 간격은 최소화됩니다. 아이디어가 나왔기 때문에 당신의 대답을 받아 들였습니다. 감사. – j0hny