Amazon Relational Database Service
사용 설명서 (API 버전 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 SCT)를 사용하여 마이그레이션할 수 있습니다. AWS SCT를 사용하여 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 로그에서는 경합이 감소합니다. PostgreSQL 버전 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이라는 덤프 파일이 생성됩니다.

prompt>pg_dump dbname=mydb2 -f mydb2dump.sql

2단계: 대상 DB 인스턴스 생성

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

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

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의 경우:

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

Windows의 경우:

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 스냅샷 생성에 대한 정보는 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를 대상 데이터베이스로 사용합니다.

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

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

Linux, OS X, Unix의 경우:

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

Windows의 경우:

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

PostgreSQL DB 인스턴스용 RDS로 Amazon S3 데이터 가져오기

PostgreSQL DB 인스턴스용 RDS에 속하는 테이블로 Amazon S3의 데이터를 가져올 수 있습니다. 이를 위해서는 Amazon RDS가 제공하는 aws_s3 PostgreSQL 확장을 사용할 수 있습니다.

Amazon S3를 이용한 데이터 저장에 대한 자세한 내용은 Amazon Simple Storage Service 시작 안내서버킷 생성을 참조하십시오. 파일을 Amazon S3 버킷에 업로드하는 방법에 관한 지침은 Amazon Simple Storage Service 시작 안내서버킷에 객체 추가를 참조하십시오.

참고

Amazon S3에서 PostgreSQL용 RDS로 가져오려면 데이터베이스에서 PostgreSQL 버전 11.1 이상을 실행해야 합니다.

Amazon S3 데이터 수집 및 가져오기

Amazon S3 버킷에 저장된 데이터를 PostgreSQL 데이터베이스 테이블로 가져오려면 다음 정보를 수집한 후 설명된 대로 aws_s3.table_import_from_s3 함수를 사용하십시오.

S3 데이터를 Amazon RDS로 가져오려면

  1. psql을 시작하고 다음 명령을 사용해 필수 PostgreSQL 확장을 설치합니다. 여기에는 aws_s3aws_commons 확장이 포함됩니다.

    psql=> CREATE EXTENSION aws_s3 CASCADE; NOTICE: installing required extension "aws_commons"

    aws_s3 확장에서는 Amazon S3 데이터를 가져오는 데 사용하는 aws_s3.table_import_from_s3 함수를 제공합니다.

  2. 가져오고려는 Amazon S3 파일에 액세스할 수 있는 권한을 제공합니다. 이를 위해서는 파일이 있는 Amazon S3 버킷에 액세스할 수 있는 AWS Identity and Access Management(IAM) 역할을 생성해야 합니다. 그런 다음 이 역할을 PostgreSQL DB 인스턴스용 RDS에 할당합니다.

    IAM 역할을 설정하여 액세스 권한을 제공하는 방법에 관한 자세한 내용은 IAM 역할을 사용해 Amazon S3 파일에 액세스 단원을 참조하십시오.

  3. 다음 절차에 따라 table_import_from_s3 함수에 대한 필수 정보를 수집하십시오.

    1. 가져오려는 Amazon S3 파일에 대해 다음 정보를 얻으십시오.

      • 버킷 이름 – 버킷은 Amazon S3 객체 또는 파일을 위한 컨테이너입니다.

      • 파일 경로 – 파일 경로를 통해 파일이 Amazon S3 버킷에 배치됩니다.

      • AWS 리전 – AWS 리전은 Amazon S3 버킷이 있는 위치입니다.

      이 정보를 얻는 방법에 대해 알아보려면 Amazon Simple Storage Service 시작 안내서에서 객체 보기를 참조하십시오.

    2. 다음 예에 나와 있는 것처럼 aws_commons.create_s3_uri 함수를 사용해 이 파일 정보를 저장할 aws_commons._s3_uri_1 구조를 생성하십시오.

      psql=> SELECT aws_commons.create_s3_uri( 'sample_s3_bucket', 'sample.csv', 'us-east-1' ) AS s3_uri \gset

      나중에 s3_info 파라미터에서 aws_s3.table_import_from_s3 함수에 대한 호출을 위해 이 aws_commons._s3_uri_1 구조를 제공하십시오.

    3. 데이터를 어떤 PostgreSQL 데이터베이스 테이블에 배치할지 식별합니다. 예를 들어 다음은 샘플 t1 데이터베이스 테이블입니다.

      psql=> CREATE TABLE t1 (bid bigint PRIMARY KEY, name varchar(80));
  4. 준비 작업을 완료한 후에는 aws_s3.table_import_from_s3 함수를 사용해 Amazon S3 데이터를 가져오십시오.

다음은 psql을 사용하는 일반적인 PostgreSQL의 예입니다.

psql=> SELECT aws_s3.table_import_from_s3( 't1', '', '(format csv)', :'s3_uri' );

파라미터는 다음과 같습니다.

  • t1 – 데이터를 복사할 PostgreSQL DB 인스턴스의 테이블에 지정된 이름입니다.

  • '' – 데이터베이스 테이블의 열 목록입니다(선택 사항). 이 파라미터를 사용해 S3 데이터 중 어떤 열이 어떤 테이블 열에 들어가는지 표시할 수 있습니다. 열을 지정하지 않으면 모든 열이 테이블에 복사됩니다. 열 목록 사용에 대한 예시는 사용자 지정 구분 기호를 사용하는 Amazon S3 파일 가져오기 단원을 참조하십시오.

  • (format csv) – PostgreSQL COPY 인수입니다. 복사 프로세스에서는 PostgreSQL COPY 명령의 인수 및 형식을 사용합니다. 앞의 예에서 COPY 명령은 쉼표로 구분된 값(CSV) 파일 형식을 사용해 데이터를 복사합니다. 더 많은 예제는 Amazon S3 파일 형식 처리를 참조하십시오.

  • s3_uri – Amazon S3 파일을 식별하는 정보가 포함된 구조입니다.

이 함수에 대한 자세한 내용은 aws_s3.table_import_from_s3 단원을 참조하십시오.

IAM 역할을 사용해 Amazon S3 파일에 액세스

Amazon S3 파일에서 데이터를 로드하기 전에 PostgreSQL DB 인스턴스용 RDS에게 Amazon S3에 액세스할 수 있는 권한을 부여하십시오. 이를 위해서는 Amazon S3 버킷에 액세스할 수 있는 IAM 역할을 생성한 후 이 역하을 DB 인스턴스에 할당해야 합니다. 이렇게 하면 추가 자격 증명 정보를 제공하거나 관리할 필요가 없습니다.

IAM 역할을 통해 Amazon S3에 액세스할 수 있는 권한을 PostgreSQL DB 인스턴스용 RDS에 부여하려면

  1. PostgreSQL DB 인스턴스용 RDS가 Amazon S3에 액세스하도록 허용하는 버킷 및 객체 권한을 제공하는 IAM 정책을 생성합니다.

    정책에 다음과 같은 필수 작업을 포함하여 Amazon S3 버킷에서 Amazon RDS로의 파일 전송을 허용합니다.

    • GetObject

    • ListBucket

    PostgreSQL용 Amazon RDS에 대한 IAM 정책 생성에 대한 자세한 내용은 IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용 단원을 참조하십시오.

    다음 AWS CLI 명령은 이 옵션으로 rds-s3-integration-policy라는 IAM 정책을 만듭니다. 이 정책은 your-s3-bucket-arn이라는 버킷에 액세스할 수 있는 권한을 부여합니다.

    참고

    정책을 만든 후에 정책의 Amazon 리소스 이름(ARN)을 기록하십시오. 가져오기 프로세스의 후속 단계에 이 ARN이 필요합니다.

    Linux, OS X, Unix의 경우:

    aws iam create-policy \ --policy-name rds-s3-integration-policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3integration", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::your-s3-bucket-arn", "arn:aws:s3:::your-s3-bucket-arn/*" ] } ] }'

    Windows의 경우:

    aws iam create-policy ^ --policy-name rds-s3-integration-policy ^ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3integration", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::your-s3-bucket-arn", "arn:aws:s3:::your-s3-bucket-arn/*" ] } ] }'
  2. Amazon RDS가 Amazon S3 버킷에 액세스하기 위해 사용자 대신 가정할 수 있는 IAM 역할을 만듭니다. 자세한 내용은 IAM 사용 설명서의 역할을 만들어 IAM 사용자에게 권한 위임 단원을 참조하십시오.

    다음 예에서는 AWS CLI 명령을 사용해 rds-s3-integration-role이라는 역할을 생성하는 방법을 보여줍니다.

    Linux, OS X, Unix의 경우:

    aws iam create-role \ --role-name rds-s3-integration-role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'

    Windows의 경우:

    aws iam create-role ^ --role-name rds-s3-integration-role ^ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'
  3. 생성한 IAM 역할에 생성한 IAM 정책을 연결합니다.

    다음 AWS CLI 명령은 앞서 생성한 정책을 rds-s3-integration-role이라는 역할에 연결합니다. your-policy-arn을 이전 단계에서 기록한 정책 ARN으로 교체합니다.

    Linux, OS X, Unix의 경우:

    aws iam attach-role-policy \ --policy-arn your-policy-arn \ --role-name rds-s3-integration-role

    Windows의 경우:

    aws iam attach-role-policy ^ --policy-arn your-policy-arn ^ --role-name rds-s3-integration-role
  4. 아래 설명된 대로 AWS Management 콘솔 또는 AWS CLI를 사용해 PostgreSQL DB 인스턴스용 RDS에 IAM 역할을 추가합니다.

콘솔

콘솔을 사용하여 PostgreSQL DB 인스턴스에 대해 IAM 역할을 추가하려면

  1. AWS Management 콘솔에 로그인한 다음 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. 세부 정보를 표시하고자 하는 PostgreSQL DB 인스턴스 이름을 선택합니다.

  3. Connectivity & security(연결성 및 보안) 탭에 있는 Manage IAM roles(IAM 역할 관리) 섹션의 Add IAM roles to this instance(이 인스턴스에 IAM 역할 추가)에서 추가할 역할을 선택합니다.

  4. 기능에서 s3Import를 선택합니다.

  5. [Add role]을 선택합니다.

AWS CLI

CLI를 사용하여 PostgreSQL DB 인스턴스에 대해 IAM 역할을 추가하려면

  • 다음 명령을 사용해 mydbinstance라는 PostgreSQL DB 인스턴스에 역할을 추가합니다. your-role-arn을 이전 단계에서 기록한 정책 ARN으로 교체합니다. --feature-name 옵션의 값에 대해 s3Import를 사용합니다.

    Linux, OS X, Unix의 경우:

    aws rds add-role-to-db-instance \ --db-instance-identifier mydbinstance \ --feature-name s3Import \ --role-arn your-role-arn \ --region us-west-2

    Windows의 경우:

    aws rds add-role-to-db-instance ^ --db-instance-identifier mydbinstance ^ --feature-name s3Import ^ --role-arn your-role-arn ^ --region us-west-2

보안 자격 증명을 사용해 Amazon S3 파일에 액세스

aws_s3.table_import_from_s3 함수 호출 시 IAM 역할을 제공하거나, credentials 파라미터를 제공하여 Amazon S3 파일에 대한 액세스를 허용합니다.

credentials 파라미터는 AWS 자격 증명을 포함하는 aws_commons._aws_credentials_1 유형의 구조입니다. 다음과 같이 aws_commons.create_aws_credentials 함수를 사용해 aws_commons._aws_credentials_1 구조에서 액세스 키와 비밀 키를 설정하십시오.

psql=> SELECT aws_commons.create_aws_credentials( '<sample_access_key>', '<sample_secret_key>', '') AS creds \gset

다음과 같이 aws_commons._aws_credentials_1 구조를 생성한 후 aws_s3.table_import_from_s3 함수를 사용해 데이터를 가져옵니다.

psql=> SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', :'s3_uri', :'creds' );

또는 aws_commons.create_aws_credentials 함수 호출 인라인을 aws_s3.table_import_from_s3 함수 호출에 포함할 수 있습니다.

psql=> SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', :'s3_uri', aws_commons.create_aws_credentials('<sample_access_key>', '<sample_secret_key>', '') );

Amazon S3 파일 형식 처리

다음 예에서는 가져오기를 수행할 때 다양한 종류의 파일을 지정하는 방법을 보여줍니다.

참고

다음 예에서는 Amazon S3 파일에 액세스할 수 있는 권한을 제공하기 위해 IAM 역할 방법을 사용합니다. 따라서 aws_s3.table_import_from_s3 함수 호출에는 자격 증명 파라미터가 없습니다.

사용자 지정 구분 기호를 사용하는 Amazon S3 파일 가져오기

다음 예에서는 사용자 지정 구분 기호를 사용하는 파일을 가져오는 방법을 보여줍니다. 또한 aws_s3.table_import_from_s3 함수의 column_list 파라미터를 사용해 데이터베이스 테이블에서 데이터를 배치할 곳을 제어하는 방법을 보여줍니다.

이 예에서는 다음 정보가 Amazon S3 파일의 파이프로 구분된 열에 정리되어 있다고 가정합니다.

1|foo1|bar1|elephant1 2|foo2|bar2|elephant2 3|foo3|bar3|elephant3 4|foo4|bar4|elephant4 ...

사용자 지정 구분 기호를 사용하는 파일을 가져오려면

  1. 가져온 데이터에 대해 데이터베이스에서 테이블을 생성합니다.

    psql=> CREATE TABLE test (a text, b text, c text, d text, e text); CREATE TABLE
  2. aws_s3.table_import_from_s3 함수의 다음과 같은 형식을 사용해 Amazon S3 파일에서 데이터를 가져옵니다.

    aws_commons.create_s3_uri 함수 호출 인라인을 aws_s3.table_import_from_s3 함수 호출에 포함하여 파일을 지정할 수 있습니다.

    psql=> SELECT aws_s3.table_import_from_s3( 'test', 'a,b,d,e', 'DELIMITER ''|''', aws_commons.create_s3_uri('sampleBucket', 'pipeDelimitedSampleFile', 'us-east-2') );

이제 데이터는 다음 열의 테이블에 있습니다.

psql=> SELECT * FROM test; a | b | c | d | e ---+------+---+---+------+----------- 1 | foo1 | | bar1 | elephant1 2 | foo2 | | bar2 | elephant2 3 | foo3 | | bar3 | elephant3 4 | foo4 | | bar4 | elephant4

Amazon S3 압축(gzip) 파일 가져오기

다음 예에서는 gzip으로 압축된 Amazon S3에서 파일을 가져오는 방법을 보여줍니다.

파일이 다음 Amazon S3 메타데이터를 포함하고 있는지 확인합니다.

  • 키: Content-Encoding

  • 값: gzip

이 값을 Amazon S3 메타데이터에 추가하는 것에 관한 자세한 내용은 Amazon Simple Storage Service 콘솔 사용 설명서S3 객체에 메타데이터를 추가하려면 어떻게 해야 합니까?를 참조하십시오.

아래와 같이 gzip 파일을 PostgreSQL DB 인스턴스용 RDS로 가져옵니다.

psql=> CREATE TABLE test_gzip(id int, a text, b text, c text, d text); CREATE TABLE psql=> SELECT aws_s3.table_import_from_s3( 'test_gzip', '', '(format csv)', 'myS3Bucket', 'test-data.gz', 'us-east-2' );

인코딩된 Amazon S3 파일 가져오기

다음 예에서는 Windows-1252 인코딩이 있는 Amazon S3에서 파일을 가져오는 방법을 보여줍니다.

psql=> SELECT aws_s3.table_import_from_s3( 'test_table', '', 'encoding ''WIN1252''', aws_commons.create_s3_uri('sampleBucket', 'SampleFile', 'us-east-2') );

함수 참조

aws_s3.table_import_from_s3

Amazon S3 데이터를 Amazon RDS 테이블로 가져옵니다. aws_s3 확장은 aws_s3.table_import_from_s3 함수를 제공합니다.

세 가지 필수 파라미터는 table_name, column_listoptions입니다. 이 파라미터에서는 데이터베이스 테이블을 식별하고 데이터가 테이블로 복사되는 방식을 지정합니다.

다음 파라미터도 사용할 수 있습니다.

  • s3_info 파라미터는 가져올 Amazon S3 파일을 지정합니다. 이 파라미터를 사용하는 경우 IAM 역할에서 PostgreSQL DB 인스턴스에 대해 Amazon S3에 액세스할 수 있는 권한을 제공합니다.

    aws_s3.table_import_from_s3 ( table_name text, column_list text, options text, s3_info aws_commons._s3_uri_1 )
  • credentials 파라미터에서는 Amazon S3에 액세스할 수 있는 자격 증명을 지정합니다. 이 파라미터를 사용할 때는 IAM 역할을 사용하지 마십시오.

    aws_s3.table_import_from_s3 ( table_name text, column_list text, options text, s3_info aws_commons._s3_uri_1, credentials aws_commons._aws_credentials_1 )

aws_s3.table_import_from_s3 파라미터는 다음 표에 설명되어 있습니다.

파라미터 설명
table_name 데이터를 가져올 필수 텍스트 문자열로서, PostgreSQL 데이터베이스 테이블의 이름을 포함합니다.
column_list

데이터를 복사할 PostgreSQL 데이터베이스 테이블 열의 목록(선택 사항)을 포함하는 필수 텍스트 문자열입니다. 문자열이 비어 있는 경우 테이블의 모든 열이 사용됩니다. 문제 해결 예는 사용자 지정 구분 기호를 사용하는 Amazon S3 파일 가져오기 단원을 참조하십시오.

options

PostgreSQL COPY 명령에 대한 인수를 포함하는 필수 텍스트 스트링입니다. 이 인수에서는 데이터가 PostgreSQL 테이블에 복사되는 방식을 지정합니다. 자세한 내용은 PostgreSQL COPY 설명서를 참조하십시오.

s3_info

S3 객체에 대한 다음 정보를 포함하는 aws_commons._s3_uri_1 복합 키입니다.

  • bucket – 파일을 포함하는 Amazon S3 버킷 이름입니다.

  • file_path – 파일의 Amazon S3 경로입니다.

  • region – 파일이 위치한 AWS 리전입니다.

aws_commons._s3_uri_1 복합 구조를 생성하려면 aws_commons.create_s3_uri 단원을 참조하십시오.

credentials

가져오기 작업에 사용할 다음 자격 증명을 포함하는 aws_commons._aws_credentials_1 복합 유형입니다.

  • 액세스 키

  • 비밀 키

  • 세션 토큰

aws_commons._aws_credentials_1 복합 구조를 생성하려면 aws_commons.create_aws_credentials 단원을 참조하십시오.

대체 파라미터

s3_infocredentials 파라미터 대신에 확장 파라미터 집합을 사용하면 테스트에 도움이 됩니다. 다음은 aws_s3.table_import_from_s3 함수에 대한 추가 구문 변형입니다.

  • s3_info 파라미터를 사용해 Amazon S3 파일을 식별하는 대신 bucket, file_pathregion 파라미터의 조합을 사용하십시오. IAM 역할은 이러한 형식의 함수를 통해 PostgreSQL DB 인스턴스에 대해 Amazon S3에 액세스할 수 있는 권한을 제공합니다.

    aws_s3.table_import_from_s3 ( table_name text, column_list text, options text, bucket text, file_path text, region text )
  • credentials 파라미터를 사용해 Amazon S3 액세스를 지정하는 대신 access_key, session_keysession_token 파라미터의 조합을 사용하십시오.

    aws_s3.table_import_from_s3 ( table_name text, column_list text, options text, bucket text, file_path text, region text, access_key text, secret_key text, session_token text )

이러한 대체 파라미터에 대한 설명을 다음 표에서 확인하십시오.

파라미터 설명
bucket

파일이 들어 있는 Amazon S3 버킷의 이름이 포함된 텍스트 문자열입니다.

file_path

파일의 Amazon S3 경로가 포함된 텍스트 문자열입니다.

region 파일이 위치한 AWS 리전이 포함된 텍스트 문자열입니다.
access_key 가져오기 작업에 사용할 액세스 키가 포함된 텍스트 문자열입니다. 기본값은 NULL입니다.
secret_key 가져오기 작업에 사용할 비밀 키가 포함된 텍스트 문자열입니다. 기본값은 NULL입니다.
session_token (선택 사항) 가져오기 작업에 사용할 세션 키가 포함된 텍스트 문자열입니다. 기본값은 NULL입니다.

aws_commons.create_s3_uri

Amazon S3 파일 정보를 저장할 aws_commons._s3_uri_1 구조를 생성합니다. aws_s3.table_import_from_s3 함수의 s3_info 파라미터에서 aws_commons.create_s3_uri 함수의 결과를 사용합니다. 함수 구문은 다음과 같습니다.

aws_commons.create_s3_uri( bucket text, file_path text, region text )

aws_commons.create_s3_uri 함수 파라미터는 다음 표에 설명되어 있습니다.

파라미터 설명
bucket

파일의 Amazon S3 버킷 이름이 포함된 필수 텍스트 문자열입니다.

file_path

파일의 Amazon S3 경로가 포함된 필수 텍스트 문자열입니다.

region

파일이 위치한 AWS 리전이 포함된 필수 텍스트 문자열입니다.

aws_commons.create_aws_credentials

aws_commons._aws_credentials_1 구조에서 액세스 키와 비밀 키를 설정합니다. aws_s3.table_import_from_s3 함수의 credentials 파라미터에서 aws_commons.create_aws_credentials 함수의 결과를 사용합니다. 함수 구문은 다음과 같습니다.

aws_commons.create_aws_credentials( access_key text, secret_key text, session_token text )

aws_commons.create_aws_credentials 함수 파라미터는 다음 표에 설명되어 있습니다.

파라미터 설명
access_key

Amazon S3 파일 가져오기에 사용할 액세스 키가 포함된 필수 텍스트 문자열입니다. 기본값은 NULL입니다.

secret_key Amazon S3 파일 가져오기에 사용할 비밀 키가 포함된 필수 텍스트 문자열입니다. 기본값은 NULL입니다.
session_token Amazon S3 파일 가져오기에 사용할 세션 토큰이 포함된 텍스트 문자열(선택 사항)입니다. 기본값은 NULL입니다. 선택 사항인 session_token을 제공하는 경우 임시 자격 증명을 사용할 수 있습니다.