메뉴
Amazon Relational Database Service
사용 설명서 (API Version 2014-10-31)

Amazon RDS에서 PostgreSQL로 데이터 가져오기

Amazon RDS로 이동하려는 기존 PostgreSQL 배포 버전이 있는 경우 작업의 복잡성은 전송할 데이터베이스의 크기와 데이터베이스 객체의 유형에 따라 다릅니다. 예를 들어 저장 프로시저 및 트리거와 함께 기가바이트 수준의 데이터 집합이 포함된 데이터베이스는 수 메가바이트에 불과한 테스트 데이터만 있고 트리거나 저장 프로시저는 없는 간단한 데이터베이스보다 복잡할 것입니다.

다음과 같은 경우에는 기본 PostgreSQL 데이터베이스 마이그레이션 도구를 사용하는 것이 좋습니다.

  • 같은 유형의 마이그레이션을 수행합니다. 이 경우 대상 데이터베이스와 동일한 데이터베이스 엔진으로 데이터베이스에서 마이그레이션합니다.

  • 전체 데이터베이스를 마이그레이션합니다.

  • 기본 도구를 사용하여 최소한의 가동 중지로 시스템을 마이그레이션할 수 있습니다.

대부분의 다른 경우에는 AWS Database Migration Service(AWS DMS)를 사용하여 데이터베이스 마이그레이션을 수행하는 것이 가장 좋습니다. AWS DMS는 가동 중지 없이 데이터베이스를 마이그레이션할 수 있으며 대부분의 데이터베이스 엔진에서는 대상 데이터베이스로 전환할 준비가 될 때까지 지속적으로 복제를 계속할 수 있습니다. AWS DMS를 사용하여 동일하거나 다른 데이터베이스 엔진으로 마이그레이션할 수 있습니다. 원본 데이터베이스와 다른 데이터베이스 엔진으로 마이그레이션하는 경우 AWS Schema Conversion Tool를 사용하여 AWS DMS를 통해 마이그레이션되지 않는 스키마 객체를 마이그레이션할 수 있습니다. AWS DMS에 대한 자세한 내용은 AWS Database Migration Service란 무잇입니까? 단원을 참조하십시오.

가져오기에 *대해서만* 다음 설정을 포함하도록 DB 파라미터 그룹을 수정합니다. 파라미터 설정을 테스트하여 DB 인스턴스 크기에 가장 효율적인 설정을 찾아야 합니다. 또한 가져오기가 완료된 후 이들 파라미터를 프로덕션 값으로 되돌려야 합니다.

DB 인스턴스 설정을 다음과 같이 수정합니다.

  • DB 인스턴스 백업 비활성화(backup_retention을 0으로 설정)

  • Multi-AZ 비활성화

다음 설정을 포함하도록 DB 파라미터 그룹을 수정합니다. 이들 설정은 데이터를 가져올 때만 사용해야 합니다. 파라미터 설정을 테스트하여 DB 인스턴스 크기에 가장 효율적인 설정을 찾아야 합니다. 또한 가져오기가 완료된 후 이들 파라미터를 프로덕션 값으로 되돌려야 합니다.

파라미터 가져오기 시 권장 값 설명

maintenance_work_mem

524288, 1048576, 2097152 또는 4194304(KB). 이들 설정은 512MB, 1GB, 2GB 및 4GB에 해당합니다.

이 설정의 값은 호스트 크기에 따라 달라집니다. 이 파라미터는 CREATE INDEX 문에서 사용되며 각 병렬 명령은 이 크기의 메모리를 사용할 수 있습니다. 이 값을 너무 높게 설정하여 메모리가 부족해지지 않도록 최선의 값을 계산해야 합니다.

checkpoint_segments

256

이 설정의 값은 더 많은 디스크 공간을 소비하지만 WAL 로그에서는 경합이 감소합니다. PostsgreSQL 버전 9.5.x 및 9.6.x에서는 이 값이 max_wal_size입니다.

checkpoint_timeout

1800

이 설정의 값은 WAL 교체 빈도를 줄일 수 있습니다.

synchronous_commit

Off

쓰기 속도를 높이려면 이 설정을 비활성화합니다. 이 파라미터를 끄면 서버 충돌 시 데이터 손실 위험이 증가합니다(FSYNC를 끄지 않음).

wal_buffers

8192

이 값은 8KB 단위입니다. 이는 다시 WAL 생성 속도에 도움이 됩니다.

autovacuum

Off

리소스를 사용하지 않으므로 데이터를 로드하는 동안에는 PostgreSQL auto-vacuum 파라미터를 비활성화합니다.

이런 설정과 함께 pg_dump -Fc(압축) 또는 pg_restore -j(병렬) 명령을 사용합니다.

참고

PostgreSQL의 pg_dumpall 명령을 사용하려면 DB 인스턴스를 생성할 때 부여되지 않은 super_user 권한이 필요하며, 따라서 이 명령은 데이터 가져오기에 사용할 수 없습니다.

Amazon EC2 인스턴스에서 PostgreSQL 데이터베이스 가져오기

Amazon EC2 인스턴스 상의 PostgreSQL Server에 데이터가 있는데 이를 PostgreSQL DB 인스턴스로 이동하려는 경우 다음 프로세스를 사용할 수 있습니다. 아래 목록에 수행할 단계가 나와 있습니다. 각 단계에 대해서는 다음에 이어지는 섹션에서 자세히 설명합니다.

  1. 로드할 데이터를 포함한 pg_dump를 사용하여 파일 만들기

  2. 대상 DB 인스턴스 만들기

  3. psql을 사용하여 DB 인스턴스에서 데이터베이스를 만들고 데이터 로드

  4. DB 인스턴스의 DB 스냅샷 만들기

1단계: 로드할 데이터를 포함한 pg_dump를 사용하여 파일 만들기

pg_dump는 COPY 명령을 사용하여 PostgreSQL 데이터베이스의 스키마와 데이터 덤프를 만듭니다. pg_dump에 의해 생성되는 덤프 스크립트는 같은 이름을 가진 데이터베이스로 데이터를 로드하고 테이블, 인덱스 및 외래 키를 다시 만듭니다. pg_restore 명령과 -d 파라미터를 사용하여 데이터를 다른 이름의 데이터베이스로 복원할 수 있습니다.

데이터 덤프를 만들기 전, 대상 DB 인스턴스에서 개수를 확인할 수 있도록 행 개수를 확인하기 위해 덤프할 테이블을 쿼리해야 합니다.

다음 명령을 실행하면 mydb2라는 데이터베이스에 대해 mydb2dump.sql이라는 덤프 파일이 생성됩니다.

Copy
prompt>pg_dump dbname=mydb2 -f mydb2dump.sql

2단계: 대상 DB 인스턴스 만들기

Amazon RDS 콘솔, AWS CLI 또는 API를 사용하여 대상 PostgreSQL DB 인스턴스를 만듭니다. 백업 보존 설정을 0으로 지정하여 인스턴스를 만들고 다중 AZ를 비활성화합니다. 그러면 데이터를 더 빠르게 가져올 수 있습니다. 데이터를 덤프하려면 먼저 인스턴스에 데이터베이스를 생성해야 합니다. 이 데이터베이스는 덤프한 데이터가 들어 있는 데이터베이스와 동일한 이름을 가질 수 있으며 또한 다른 이름의 데이터베이스를 만들고 pg_restore 명령과 -d 파라미터를 사용하여 새로 이름을 지정한 데이터베이스에 데이터를 복원할 수 있습니다.

예를 들어 다음 명령을 사용하여 데이터베이스를 덤프 및 복원하고 이름을 바꿀 수 있습니다.

Copy
pg_dump -Fc -v -h [endpoint of instance] -U [master username] [database] > [database].dump createdb [new database name] pg_restore -v -h [endpoint of instance] -U [master username] -d [new database name] [database].dump

3단계: psql을 사용하여 DB 인스턴스에서 데이터베이스를 만들고 데이터 로드

pg_dump 명령을 실행할 때 사용한 것과 같은 연결을 사용하여 대상 DB 인스턴스에 연결하고 데이터베이스를 다시 만들 수 있습니다. psql을 사용할 때는 마스터 사용자 이름과 마스터 암호를 사용하여 DB 인스턴스에 데이터베이스를 만들 수 있습니다.

다음 예제에서는 psql과 mydb2dump.sql이라는 덤프 파일을 사용하여 mypginstance라는 PostgreSQL DB 인스턴스에 mydb2라는 데이터베이스를 만듭니다.

Linux, OS X, Unix의 경우:

Copy
psql \ -f mydb2dump.sql \ --host mypginstance.c6c8mntzhgv0.us-west-2.rds.amazonaws.com \ --port 8199 \ --username myawsuser \ --password password \ --dbname mydb2

Windows의 경우:

Copy
psql ^ -f mydb2dump.sql ^ --host mypginstance.c6c8mntzhgv0.us-west-2.rds.amazonaws.com ^ --port 8199 ^ --username myawsuser ^ --password password ^ --dbname mydb2

4단계: DB 인스턴스의 DB 스냅샷 만들기

데이터가 DB 인스턴스로 로드된 것을 확인했으면, 대상 PostgreSQL DB 인스턴스의 DB 스냅샷을 만드는 것이 좋습니다. DB 스냅샷은 DB 인스턴스를 알려진 상태로 복원하는 데 사용할 수 있는 DB 인스턴스의 완전한 백업본입니다. 로드 직후에 생성된 DB 스냅샷은 사고 발생 시 데이터를 꼭 로드하지 않아도 되도록 해주고, 새 데이터베이스 인스턴스를 시드하는 데 사용될 수도 있습니다. DB 스냅샷 생성에 대한 자세한 정보는 DB 스냅샷 생성을(를) 참조하십시오.

\copy 명령을 사용하여 PostgreSQL DB 인스턴스의 테이블로 데이터 가져오기

psql 프롬프트에서 \copy 명령을 실행하여 PostgreSQL DB 인스턴스의 테이블로 데이터를 가져올 수 있습니다. 이 테이블은 DB 인스턴스에 이미 존재하고 있어야 합니다. \copy 명령에 대한 자세한 내용은 PostgreSQL 문서을(를) 참조하십시오.

참고

\copy 명령은 삽입된 행의 개수와 같은 작업 확인 기능을 제공하지 않습니다. PostgreSQL은 오류로 인해 copy 명령이 실패할 경우 오류 메시지를 제공합니다.

원본 테이블의 데이터에서 .csv 파일을 만들고, psql을 사용하여 PostgreSQL 인스턴스의 대상 데이터베이스에 로그온한 후, 다음 명령을 실행합니다. 이 예제에서는 source-table을 원본 테이블 이름으로, source-table.csv를 .csv 파일로, target-db를 대상 데이터베이스로 사용합니다.

Copy
target-db=> \copy source-table from 'source-table.csv' with DELIMITER ',';

클라이언트 컴퓨터 명령 프롬프트에서 다음 명령을 실행할 수도 있습니다. 이 예제에서는 source-table을 원본 테이블 이름으로, source-table.csv를 .csv 파일로, target-db를 대상 데이터베이스로 사용합니다.

Linux, OS X, Unix의 경우:

Copy
$psql target-db \ -U <admin user> \ -p <port> \ -h <DB instance name> \ -c "\copy source-table from 'source-table.csv' with DELIMITER ','"

Windows의 경우:

Copy
$psql target-db ^ -U <admin user> ^ -p <port> ^ -h <DB instance name> ^ -c "\copy source-table from 'source-table.csv' with DELIMITER ','"