2016-11-08 2 views
1
는 내가 뭘하려는 것은이

PostgreSQL을 덤프/

psql -d xxx -c "select user_id from res_partner;" > backup.txt 

입니다

열을 복원 그런

psql -d xxx -c "update res_partner set user_id = null"; 

큰 문제는 테이블 ...에 데이터를 다시 삽입에 남아인가 거기 방법은 postgresql에서 특정 테이블의 특정 열을 덤프하고 모든 것을 다시 삽입하는 방법입니까?

더 많은 컨텍스트를 추가하려면 실제 문제는 내가 Odoo라는 웹 서비스에서 모듈을 업그레이드한다는 것입니다. 각 모듈은 제약 조건을 삽입/업데이트 할 수 있습니다 ... 제 경우에는 동일한 열에 대한 제약 조건을 다른 열을 참조하도록 변경했습니다. 그것은 잘 작동하지만, 서버를 업그레이드 할 때 이전 외래 키를 삽입하려고하면 모듈이로드 될 때 외래 키가 추가됩니다. 그러나 다른 열을 가리키고 있기 때문에 이전 외래 키가 실패했습니다. 제약 오류 ... 나는 업 그레 이드 중에 제약 조건 검사를 보류하거나 백업 데이터를 복원하고 싶습니다. null 값을 지정하면 제약 조건 오류가 발생하지 않습니다.

답변

2

죄송합니다. 컨텍스트를 이해하지 못했지만 데이터를 덤프/복원하는 방법을 알려주고 있습니다. :). 내 솔루션은 매우 간단합니다. 단지 복사본을 생성, 파일에 덤프 할 필요가 없을 수도, 당신의 경우를 들어 임시 테이블
CREATE TABLE res_partner_tmp(id int, user_id int);
COPY res_partner_tmp(id, user_id) FROM '/tmp/filename.txt';

에 데이터를 복원 -

1 단계는
COPY res_partner(id, user_id) TO '/tmp/filename.txt';
2 단계는 파일에 데이터를 저장 표의 숫자

마지막 단계 - 데이터 복원
UPDATE res_partner o SET user_id=c.user_id FROM res_partner_tmp c WHERE o.id=c.id;

+0

정말 고마워. 파일을 덤프 대신 임시 테이블을 사용하여 끝났다. 하지만 파일을 복사하는 것은 내가 찾던 것입니다. –