2016-11-09 19 views
0

자세한 내용은 다음과 같습니다.Postgres 데이터베이스를 보관하는 가장 좋은 방법은 무엇입니까?

6 개월보다 오래된 레코드를 새 데이터베이스에 복사하고 주 (프로덕션) 데이터베이스에서 삭제할 수 있도록 데이터베이스를 보관해야합니다. 여기서 복잡성은 서로를 참조하는 모든 테이블의 모든 행을 복사하는 것입니다. 그 후, 일부 테이블의 복사 된 행 (정말 거대하고 데이터가 더 이상 필요하지 않음)이 삭제됩니다.

postgres 데이터베이스는 Amazon RDS 인스턴스입니다.

이것을 달성하는 가장 좋은 방법은 무엇입니까?

것은 내가

또는

는 SQL 배치를 호출하는 쉘 스크립트를 호출 postgresql.conf의 되세요 Springboot 응용 프로그램 중 하나를 생각했다. 두 번째 방법은 아마존 RDS postgresql.conf 파일을 편집하는 방법과 쉘 스크립트를 지정하는 방법을 잘 모르겠습니다. SQL 배치는 어디에 쓰여 집니까? 이것은 나에게 조금 새로운, 모든 포인터를 주셔서 감사합니다.

답변

0

Springboot 응용 프로그램을 사용하는 대신 모든 서버 측에서 작업하는 것이 훨씬 빠릅니다. 문제는 pg_dump 유틸리티 나 psql -d dbname -t -A -F ""로 쉽게 할 수있는 덤프/복구가 아닙니다. -c "SELECT * FROM yourdata where cutdate < = current_timestamp-interval '6 months'"> output.csv

그러나 내 보낸 모든 데이터가 두 번째 데이터베이스로로드되고 아무 것도 삭제하지 않도록해야합니다. 내보낼 수 없습니다.

먼저 기본 키의 하위 집합을 임시 테이블로 선택합니다. 모든 내보내기 파일이 백업 데이터베이스에 다음

DELETE FROM yourdata WHERE pk IN (SELECT pk FROM temporal) 

를 생성 한 후 그런 다음 미리 선택 키 (및 모든 종속)

COPY (SELECT d.* FROM yourdata d INNER JOIN temporal t WHERE d.pk=t.pk) To '/tmp/yourdata.csv' WITH CSV DELIMITER ','; 

을 수출하는 서버 측 COPY 명령을 사용 할

COPY yourdata(column1,column2,column3) FROM '/tmp/yourdata.csv' DELIMITER ',' CSV 

psql 명령 줄 도구를 사용하여 서버 측에서 모든 명령을 호출하는 스크립트를 작성하고 가져온 파일을 마지막으로 영구적 인 위치로 이동시킬 수 있습니다. t 잘못해서 다시 처리해야합니다.

Save PL/pgSQL output from PostgreSQL to a CSV file 참조 How to import CSV file data into a PostgreSQL table?

+0

나는 이것에 대한 recovery.conf를 사용할 수 있습니까? – Tisha

+0

또는 내가 편집 할 수있는 postgresql.conf (amazon rds 인스턴스에서 사용 가능)에 db 매개 변수가 있습니까?이 작업을 수행하는 스크립트에 액세스 할 수 있습니까? – Tisha