

# Amazon RDS에서 PostgreSQL로 데이터 가져오기
<a name="PostgreSQL.Procedural.Importing"></a>

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란 무엇입니까?](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 참조하세요.

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

DB 인스턴스 설정을 다음과 같이 수정합니다.
+ DB 인스턴스 백업 비활성화(backup\$1retention을 0으로 설정).
+ Multi-AZ 비활성화.

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


| 파라미터 | 가져오기 시 권장 값 | 설명 | 
| --- | --- | --- | 
|  `maintenance_work_mem`  |  524288, 1048576, 2097152 또는 4194304(KB). 이들 설정은 512MB, 1GB, 2GB 및 4GB에 해당합니다.  |  이 설정의 값은 호스트 크기에 따라 달라집니다. 이 파라미터는 CREATE INDEX 문에서 사용되며 각 병렬 명령은 이 크기의 메모리를 사용할 수 있습니다. 이 값을 너무 높게 설정하여 메모리가 부족해지지 않도록 최선의 값을 계산합니다.  | 
|  `max_wal_size`  |  256(버전 9.6), 4096(버전 10 이상)  |  자동 체크포인트 중에 WAL이 증가할 수 있는 최대 크기입니다. 이 파라미터를 늘리면 충돌 복구에 소요되는 시간이 늘어날 수 있습니다. 이 파라미터는 PostgreSQL 9.6 이상에서 `checkpoint_segments`를 대체합니다. PostgreSQL 버전 9.6의 경우 이 값은 16MB 단위입니다. 이후 버전의 경우 이 값은 1MB 단위입니다. 예를 들어 버전 9.6에서 128은 각각 16MB 크기인 128개의 청크를 의미합니다. 버전 12.4에서 2048는 각각 1MB 크기인 2048개의 청크를 의미합니다.  | 
|  `checkpoint_timeout`  |  1800  |  이 설정의 값은 WAL 교체 빈도를 줄일 수 있습니다.  | 
|  `synchronous_commit`  |  Off  |  쓰기 속도를 높이려면 이 설정을 비활성화합니다. 이 파라미터를 끄면 서버 충돌 시 데이터 손실 위험이 증가합니다(FSYNC를 끄지 않음).  | 
|  `wal_buffers`  |   8192  |  이 값은 8KB 단위입니다. 이는 다시 WAL 생성 속도에 도움이 됩니다.  | 
|  `autovacuum`  |  0  |  리소스를 사용하지 않으므로 데이터를 로드하는 동안에는 PostgreSQL auto-vacuum 파라미터를 비활성화합니다.  | 

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

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

**Topics**
+ [Amazon EC2 인스턴스에서 PostgreSQL 데이터베이스 가져오기](PostgreSQL.Procedural.Importing.EC2.md)
+ [\$1copy 명령을 사용하여 PostgreSQL DB 인스턴스의 테이블로 데이터 가져오기](PostgreSQL.Procedural.Importing.Copy.md)
+ [PostgreSQL DB 인스턴스용 RDS로 Amazon S3 데이터 가져오기](USER_PostgreSQL.S3Import.md)
+ [DB 인스턴스 간에 PostgreSQL 데이터베이스 전송](PostgreSQL.TransportableDB.md)

# Amazon EC2 인스턴스에서 PostgreSQL 데이터베이스 가져오기
<a name="PostgreSQL.Procedural.Importing.EC2"></a>

Amazon EC2 인스턴스상의 PostgreSQL 서버에 데이터가 있는데 이를 PostgreSQL DB 인스턴스로 이동하려는 경우 다음 프로세스를 사용하여 데이터를 마이그레이션할 수 있습니다.

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

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

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

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

다음 섹션에서는 위에 나열된 각 단계에 대한 자세한 내용을 제공합니다.

## 1단계: 로드할 데이터를 포함하여 pg\$1dump로 파일 생성
<a name="PostgreSQL.Procedural.Importing.EC2.Step1"></a>

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

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

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

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

## 2단계: 대상 DB 인스턴스 만들기
<a name="PostgreSQL.Procedural.Importing.EC2.Step2"></a>

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 인스턴스에서 데이터베이스를 만들고 데이터 로드
<a name="PostgreSQL.Procedural.Importing.EC2.Step3"></a>

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

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

대상 LinuxmacOS, 또는Unix:

```
psql \
   -f mydb2dump.sql \
   --host mypginstance.555555555555.aws-region.rds.amazonaws.com \
   --port 8199 \
   --username myawsuser \
   --password password \
   --dbname mydb2
```

Windows의 경우:

```
psql ^
   -f mydb2dump.sql ^
   --host mypginstance.555555555555.aws-region.rds.amazonaws.com ^
   --port 8199 ^
   --username myawsuser ^
   --password password ^
   --dbname mydb2
```

**참고**  
보안 모범 사례로 여기에 표시된 프롬프트 이외의 암호를 지정하는 것이 좋습니다.

## 4단계: DB 인스턴스의 DB 스냅샷 만들기
<a name="PostgreSQL.Procedural.Importing.EC2.Step4"></a>

데이터가 DB 인스턴스로 로드된 것을 확인했으면, 대상 PostgreSQL DB 인스턴스의 DB 스냅샷을 만드는 것이 좋습니다. DB 스냅샷은 DB 인스턴스를 알려진 상태로 복원하는 데 사용할 수 있는 DB 인스턴스의 완전한 백업입니다. 로드 직후에 생성된 DB 스냅샷은 사고 발생 시 데이터를 다시 로드하지 않아도 됩니다. 또한 이러한 스냅샷을 사용하여 새 DB 인스턴스를 시드할 수 있습니다. DB 스냅샷 생성에 대한 정보는 [Amazon RDS의 단일 AZ DB 인스턴스에 대한 DB 스냅샷 생성](USER_CreateSnapshot.md) 단원을 참조하세요.

# \$1copy 명령을 사용하여 PostgreSQL DB 인스턴스의 테이블로 데이터 가져오기
<a name="PostgreSQL.Procedural.Importing.Copy"></a>

PostgreSQL `\copy` 명령은 `psql` 대화형 클라이언트 도구에서 사용할 수 있는 메타 명령입니다. `\copy`를 사용하여 RDS for PostgreSQL DB 인스턴스의 테이블로 데이터를 가져올 수 있습니다. `\copy` 명령을 사용하려면 먼저 `\copy`가 대상 DB 인스턴스에 복사할 데이터의 대상을 갖도록 테이블 구조를 생성해야 합니다.

`\copy`를 사용하여 클라이언트 워크스테이션으로 내보내고 저장된 파일과 같은 쉼표로 구분된 값(CSV) 파일에서 데이터를 로드할 수 있습니다.

CSV 데이터를 대상 RDS for PostgreSQL DB 인스턴스로 가져오려면 먼저 `psql`을 사용하여 대상 DB 인스턴스에 연결합니다.

```
psql --host=db-instance.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=target-db
```

그리고 다음 파라미터와 함께 `\copy` 명령을 실행하여 데이터 대상과 해당 형식을 식별합니다.
+ `target_table` - CSV 파일에서 복사되는 데이터를 수신해야 하는 테이블의 이름입니다.
+ `column_list` - 테이블의 열 사양입니다.
+ `'filename'`- 로컬 워크스테이션에 있는 CSV 파일의 전체 경로입니다.

```
 \copy target_table from '/path/to/local/filename.csv' WITH DELIMITER ',' CSV;
```

CSV 파일에 열 머리글 정보가 있는 경우 이 버전의 명령 및 파라미터를 사용할 수 있습니다.

```
\copy target_table (column-1, column-2, column-3, ...)
    from '/path/to/local/filename.csv' WITH DELIMITER ',' CSV HEADER;
```

 `\copy` 명령이 실패하면 PostgreSQL이 오류 메시지를 출력합니다.

다음 예와 같이 `\copy` 메타 명령과 함께 `psql` 명령을 사용하여 데이터베이스 미리 보기 환경에서 새 DB 인스턴스를 생성합니다. 이 예제에서는 *source-table*을 원본 테이블 이름으로, *source-table.csv*를 .csv 파일로, *target-db*를 대상 데이터베이스로 사용합니다.

대상 LinuxmacOS, 또는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 ','"
```

`\copy` 명령에 대한 자세한 내용은 PostgreSQL 설명서의 *메타 명령*(Meta-Commands) 섹션에서 [psql](http://www.postgresql.org/docs/current/static/app-psql.html) 페이지를 참조하세요.

# PostgreSQL DB 인스턴스용 RDS로 Amazon S3 데이터 가져오기
<a name="USER_PostgreSQL.S3Import"></a>

Amazon Simple Storage Service를 사용하여 저장된 데이터를 Aurora PostgreSQL DB 클러스터 인스턴스의 테이블로 가져올 수 있습니다. 이 작업을 수행하려면 먼저 RDS for PostgreSQL `aws_s3` 확장을 설치해야 합니다. 이 확장은 Amazon S3 버킷에서 데이터를 가져오는 데 사용하는 기능을 제공합니다. *버킷*은 객체 또는 파일에 대한 Amazon S3 컨테이너입니다. 데이터는 쉼표로 구분된 값 (CSV) 파일, 텍스트 파일 또는 압축 (gzip) 파일에 있을 수 있습니다. 다음에서는 확장 프로그램을 설치하는 방법과 Amazon S3에서 테이블로 데이터를 가져오는 방법을 알아볼 수 있습니다.

Amazon S3를 RDS for PostgreSQL로 가져오려면 데이터베이스에서 PostgreSQL 버전 10.7 이상을 실행 중이어야 합니다. 

Amazon S3 데이터가 저장되지 않은 경우 먼저 버킷을 생성하고 데이터를 저장해야 합니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 다음 주제를 참조하세요.
+ [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#creating-bucket)
+ [버킷에 객체 추가](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#uploading-an-object-bucket) 

Amazon S3에서 계정 간 가져오기가 지원됩니다. 자세한 내용은 **Amazon Simple Storage Service 사용 설명서의 [계정 간 권한 부여](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html)를 참조하세요.

S3에서 데이터를 가져오는 동안 고객 관리형 키를 암호화에 사용할 수 있습니다. 자세한 내용은 **Amazon Simple Storage Service 사용 설명서의 [AWS KMS에 저장된 KMS 키](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)를 참조하세요.

**Topics**
+ [aws\$1s3 확장 설치](USER_PostgreSQL.S3Import.InstallExtension.md)
+ [Amazon S3 데이터에서 데이터 가져오기 개요](USER_PostgreSQL.S3Import.Overview.md)
+ [Amazon S3 버킷에 대한 액세스 권한 설정](USER_PostgreSQL.S3Import.AccessPermission.md)
+ [Amazon S3에서 RDS for PostgreSQL DB 인스턴스로 데이터 가져오기](USER_PostgreSQL.S3Import.FileFormats.md)
+ [함수 참조](USER_PostgreSQL.S3Import.Reference.md)

# aws\$1s3 확장 설치
<a name="USER_PostgreSQL.S3Import.InstallExtension"></a>

Amazon S3를 RDS for PostgreSQL DB 인스턴스와 함께 사용하려면 먼저 `aws_s3` 확장을 설치해야 합니다. 이 확장은 Amazon S3에서 데이터를 가져오기 위한 함수도 제공합니다. 또한 RDS for PostgreSQL DB 인스턴스에서 Amazon S3 버킷으로 데이터를 내보내는 기능도 제공합니다. 자세한 내용은 [RDS for PostgreSQL DB 인스턴스에서 Amazon S3로 데이터 내보내기](postgresql-s3-export.md) 단원을 참조하세요. `aws_s3` 확장은 필요할 때 자동으로 설치되는 `aws_commons` 확장의 일부 도우미 기능에 따라 다릅니다.

**`aws_s3` 확장을 설치하려면**

1. psql(또는 PGAdmin)을 사용하여 RDS for PostgreSQL DB 인스턴스에 `rds_superuser` 권한을 가진 사용자로 연결합니다. 설정 과정에서 기본 이름을 계속 사용했다면 `postgres`로 연결합니다.

   ```
   psql --host=111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
   ```

1. 다음 명령을 실행하여 확장을 생성합니다.

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

1. 확장 프로그램이 설치되었는지 확인하려면 psql `\dx` 메타 명령을 사용하면 됩니다.

   ```
   postgres=> \dx
          List of installed extensions
       Name     | Version |   Schema   |                 Description
   -------------+---------+------------+---------------------------------------------
    aws_commons | 1.2     | public     | Common data types across AWS services
    aws_s3      | 1.1     | public     | AWS S3 extension for importing data from S3
    plpgsql     | 1.0     | pg_catalog | PL/pgSQL procedural language
   (3 rows)
   ```

이제 Amazon S3에서 데이터를 가져오고 Amazon S3로 데이터를 내보내는 기능을 사용할 수 있습니다.

# Amazon S3 데이터에서 데이터 가져오기 개요
<a name="USER_PostgreSQL.S3Import.Overview"></a>

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

먼저 함수에 제공해야 하는 세부 정보를 수집합니다. 여기에는 RDS for PostgreSQL DB 인스턴스의 테이블 이름과 버킷 이름, 파일 경로, 파일 유형 및 Amazon S3 데이터가 저장된 AWS 리전이 포함됩니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [객체 보기](https://docs.aws.amazon.com/AmazonS3/latest/userguide/OpeningAnObject.html)를 참조하세요.
**참고**  
Amazon S3에서 멀티 파트 데이터 가져오기는 현재 지원되지 않습니다.

1. `aws_s3.table_import_from_s3` 함수가 데이터를 가져올 테이블의 이름을 가져옵니다. 예를 들어 다음 명령은 이후 단계에서 사용할 수 있는 테이블 `t1`을 만듭니다.

   ```
   postgres=> CREATE TABLE t1 
       (col1 varchar(80), 
       col2 varchar(80), 
       col3 varchar(80));
   ```

1. Amazon S3 버킷 및 가져올 데이터에 대한 세부 정보를 가져옵니다. 이 작업을 수행하려면 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 Amazon S3 콘손을 열고 **버킷**을 선택합니다. 목록에서 데이터가 포함된 버킷을 찾습니다. 버킷을 선택하고 객체 개요 페이지를 연 다음 속성을 선택합니다.

   버킷 이름, 경로, AWS 리전, 파일 형식을 적어 둡니다. IAM 역할을 통해 Amazon S3에 대한 액세스를 설정하는 Amazon 리소스 이름(ARN) 이 나중에 필요합니다. 자세한 내용은 [Amazon S3 버킷에 대한 액세스 권한 설정](USER_PostgreSQL.S3Import.AccessPermission.md) 단원을 참조하세요. 다음 그림에 예가 나와 있습니다.  
![\[Amazon S3 버킷에 있는 파일 객체의 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/aws_s3_import-export_s3_bucket-info.png)

1. AWS CLI 명령 `aws s3 cp`를 사용하여 Amazon S3 버킷의 데이터 경로를 확인할 수 있습니다. 정보가 정확하면 이 명령이 Amazon S3 파일의 복사본을 다운로드합니다.

   ```
   aws s3 cp s3://amzn-s3-demo-bucket/sample_file_path ./ 
   ```

1. Amazon S3 버킷의 파일에 대한 액세스를 허용하도록 RDS for PostgreSQL DB 인스턴스에 대한 권한을 설정합니다. 이렇게 하려면 AWS Identity and Access Management(IAM) 역할 또는 보안 자격 증명을 사용합니다. 자세한 내용은 [Amazon S3 버킷에 대한 액세스 권한 설정](USER_PostgreSQL.S3Import.AccessPermission.md) 단원을 참조하세요.

1. 경로 및 수집된 기타 Amazon S3 객체 세부 정보(2단계 참조)를 `create_s3_uri` 함수에 제공하여 Amazon S3 URI 객체를 생성합니다. 이 함수에 대한 자세한 내용은 [aws\$1commons.create\$1s3\$1uri](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_s3_uri) 단원을 참조하세요. 다음은 psql 세션 중에 이 객체를 구성하는 예입니다.

   ```
   postgres=> SELECT aws_commons.create_s3_uri(
      'docs-lab-store-for-rpg',
      'versions_and_jdks_listing.csv',
      'us-west-1'
   ) AS s3_uri \gset
   ```

   다음 단계에서는 이 객체(`aws_commons._s3_uri_1`)를 `aws_s3.table_import_from_s3` 함수에 전달하여 데이터를 테이블로 가져옵니다.

1. `aws_s3.table_import_from_s3` 함수를 호출하여 Amazon S3에서 테이블로 데이터를 가져옵니다. 참조 정보는 [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) 단원을 참조하세요. 예시는 [Amazon S3에서 RDS for PostgreSQL DB 인스턴스로 데이터 가져오기](USER_PostgreSQL.S3Import.FileFormats.md) 섹션을 참조하세요.

# Amazon S3 버킷에 대한 액세스 권한 설정
<a name="USER_PostgreSQL.S3Import.AccessPermission"></a>

Amazon S3 파일에서 데이터를 가져오려면 RDS for PostgreSQL DB 인스턴스에 파일이 저장된 Amazon S3 버킷에 액세스할 수 있는 권한을 부여합니다. 다음 항목에서 설명하는 두 방법 중 하나를 사용하여 Amazon S3 버킷에 대한 액세스 권한을 부여합니다.

**Topics**
+ [IAM 역할을 사용해 Amazon S3 버킷에 액세스](#USER_PostgreSQL.S3Import.ARNRole)
+ [보안 자격 증명을 사용해 Amazon S3 버킷에 액세스](#USER_PostgreSQL.S3Import.Credentials)
+ [Amazon S3 액세스 문제 해결](#USER_PostgreSQL.S3Import.troubleshooting)

## IAM 역할을 사용해 Amazon S3 버킷에 액세스
<a name="USER_PostgreSQL.S3Import.ARNRole"></a>

Amazon S3 파일에서 데이터를 로드하기 전에 RDS for PostgreSQL DB 인스턴스에 파일이 저장된 Amazon S3 버킷에 액세스할 수 있는 권한을 부여합니다. 그러면 추가 자격 증명 정보를 관리하거나 [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) 함수 호출에서 제공할 필요가 없습니다.

이렇게 하려면 Amazon S3 버킷에 대한 액세스 권한을 부여하는 IAM 정책을 생성합니다. IAM 역할을 생성하여 정책을 역할에 연결합니다. 그런 다음 IAM 역할을 DB 인스턴스에 할당합니다.

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

1. IAM 정책을 생성합니다.

   이 정책은 RDS for PostgreSQL DB 인스턴스가 Amazon S3에 액세스할 수 있도록 허용하는 버킷 및 객체 권한을 부여합니다.

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

   정책에 다음 리소스를 포함하여 Amazon S3 버킷 및 그 안의 객체를 식별합니다. 다음은 Amazon S3에 액세스하기 위한 Amazon 리소스 이름(ARN) 형색입니다.
   + arn:aws:s3:::*amzn-s3-demo-bucket*
   + arn:aws:s3:::*amzn-s3-demo-bucket*/\$1

   RDS for PostgreSQL용 IAM 정책 생성에 대한 자세한 내용은 [IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용](UsingWithRDS.IAMDBAuth.IAMPolicy.md) 섹션을 참조하세요. *IAM 사용 설명서*의 [자습서: 첫 번째 고객 관리형 정책 생성 및 연결](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html)도 참조하세요.

   다음 AWS CLI 명령은 이 옵션으로 `rds-s3-import-policy`라는 IAM 정책을 만듭니다. *amzn-s3-demo-bucket*이라는 버킷에 대한 액세스 권한을 부여합니다.
**참고**  
이 명령에서 반환되는 정책 Amazon 리소스 이름(ARN)을 적어 둡니다. IAM 역할에 정책을 연결할 때 이후 단계에 ARN이 필요합니다.  
**Example**  

   대상 LinuxmacOS, 또는Unix:

   ```
   aws iam create-policy \
      --policy-name rds-s3-import-policy \
      --policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Sid": "s3import",
            "Action": [
              "s3:GetObject",
              "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
              "arn:aws:s3:::amzn-s3-demo-bucket", 
              "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ] 
          }
        ] 
      }'
   ```

   Windows의 경우:

   ```
   aws iam create-policy ^
      --policy-name rds-s3-import-policy ^
      --policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Sid": "s3import",
            "Action": [
              "s3:GetObject",
              "s3:ListBucket"
            ], 
            "Effect": "Allow",
            "Resource": [
              "arn:aws:s3:::amzn-s3-demo-bucket", 
              "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ] 
          }
        ] 
      }'
   ```

1. IAM 역할을 생성합니다.

   이렇게 하면, Amazon RDS에서 IAM 역할을 수임하여 사용자 대신 Amazon S3 버킷에 액세스할 수 있도록 역할을 생성할 수 있습니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM 사용자에게 권한을 위임하기 위한 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)을 참조하세요.

   서비스 권한을 특정 리소스로 제한하는 리소스 기반 정책의 `[aws:SourceArn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)` 및 `[aws:SourceAccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)` 전역 조건 컨텍스트 키를 사용하는 것이 좋습니다. 이는 [혼동된 대리자 문제](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)를 방지하는 가장 효과적인 방법입니다.

   두 전역 조건 컨텍스트 키와 계정 ID를 포함한 `aws:SourceArn` 값을 모두 사용하는 경우, `aws:SourceAccount` 값 및 `aws:SourceArn` 값의 계정은 동일한 정책 문에서 사용될 경우 반드시 같은 계정 ID를 사용해야 합니다. 
   + 단일 리소스에 대한 교차 서비스 액세스를 원하는 경우 `aws:SourceArn`을 사용하세요.
   + 해당 계정의 모든 리소스가 교차 서비스 사용과 연결되도록 허용하려는 경우 `aws:SourceAccount`를 사용하세요.

   정책에서는 리소스의 전체 ARN이 포함된 `aws:SourceArn` 전역 조건 컨텍스트 키를 사용해야 합니다. 다음 예제에서는 AWS CLI 명령을 사용하여 `rds-s3-import-role`이라는 역할을 생성하는 방법을 보여줍니다.  
**Example**  

   대상 LinuxmacOS, 또는Unix:

   ```
   aws iam create-role \
      --role-name rds-s3-import-role \
      --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
               "Service": "rds.amazonaws.com"
             },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                   "aws:SourceAccount": "111122223333",
                   "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:db:dbname"
                   }
                }
          }
        ] 
      }'
   ```

   Windows의 경우:

   ```
   aws iam create-role ^
      --role-name rds-s3-import-role ^
      --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
               "Service": "rds.amazonaws.com"
             },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                   "aws:SourceAccount": "111122223333",
                   "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:db:dbname"
                   }
                }
          }
        ] 
      }'
   ```

1. 생성한 IAM 역할에 생성한 IAM 정책을 연결합니다.

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

   대상 LinuxmacOS, 또는Unix:

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

   Windows의 경우:

   ```
   aws iam attach-role-policy ^
      --policy-arn your-policy-arn ^
      --role-name rds-s3-import-role
   ```

1. IAM 역할을 DB 인스턴스에 추가합니다.

   이렇게 하려면 다음에 설명한 대로 AWS Management Console 또는 AWS CLI를 사용합니다.

### 콘솔
<a name="collapsible-section-1"></a>

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

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

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

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

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

1. [**Add role**]을 선택합니다.

### AWS CLI
<a name="collapsible-section-2"></a>

**CLI를 사용하여 PostgreSQL DB 인스턴스에 대해 IAM 역할을 추가하려면**
+ 다음 명령을 사용해 `my-db-instance`라는 PostgreSQL DB 인스턴스에 역할을 추가합니다. *`your-role-arn`*을 이전 단계에서 기록한 정책 ARN으로 교체합니다. `s3Import` 옵션의 값에 대해 `--feature-name`를 사용합니다.  
**Example**  

  대상 LinuxmacOS, 또는Unix:

  ```
  aws rds add-role-to-db-instance \
     --db-instance-identifier my-db-instance \
     --feature-name s3Import \
     --role-arn your-role-arn   \
     --region your-region
  ```

  Windows의 경우:

  ```
  aws rds add-role-to-db-instance ^
     --db-instance-identifier my-db-instance ^
     --feature-name s3Import ^
     --role-arn your-role-arn ^
     --region your-region
  ```

### RDS API
<a name="collapsible-section-3"></a>

Amazon RDS API를 사용하여 PostgreSQL DB 인스턴스에 대한 IAM 역할을 추가하려면 [ AddRoleToDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_AddRoleToDBInstance.html) 작업을 직접적으로 호출합니다.

## 보안 자격 증명을 사용해 Amazon S3 버킷에 액세스
<a name="USER_PostgreSQL.S3Import.Credentials"></a>

원할 경우 IAM 역할을 사용하는 대신 보안 자격 증명을 사용해 Amazon S3 버킷에 대한 액세스 권한을 부여여할 수 있습니다. [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) 함수 호출에서 `credentials` 파라미터를 지정하면 됩니다.

`credentials` 파라미터는 `aws_commons._aws_credentials_1` 자격 증명을 포함하는 AWS 유형의 구조입니다. 다음과 같이 [aws\$1commons.create\$1aws\$1credentials](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_aws_credentials) 함수를 사용해 `aws_commons._aws_credentials_1` 구조에서 액세스 키와 비밀 키를 설정하십시오.

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

다음과 같이 `aws_commons._aws_credentials_1 ` 구조를 생성한 후 [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) 함수를 `credentials` 파라미터와 함께 사용해 데이터를 가져옵니다.

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

또는 [aws\$1commons.create\$1aws\$1credentials](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_aws_credentials) 함수 호출 인라인을 `aws_s3.table_import_from_s3` 함수 호출에 포함할 수 있습니다.

```
postgres=> 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 액세스 문제 해결
<a name="USER_PostgreSQL.S3Import.troubleshooting"></a>

Amazon S3 파일 데이터를 가져오려 할 때 연결 문제가 발생할 경우 다음 권장 사항을 참조하세요.
+ [Amazon RDS 자격 증명 및 액세스 문제 해결](security_iam_troubleshoot.md)
+ [Amazon Simple Storage Service 사용 설명서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/troubleshooting.html)의 *Amazon S3 문제 해결*
+ *IAM 사용 설명서*의 [Amazon S3 문제 해결 및 IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_iam-s3.html)

# Amazon S3에서 RDS for PostgreSQL DB 인스턴스로 데이터 가져오기
<a name="USER_PostgreSQL.S3Import.FileFormats"></a>

aws\$1s3 확장의 `table_import_from_s3` 함수를 사용하여 Amazon S3 버킷에서 데이터를 가져옵니다. 참조 정보는 [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) 단원을 참조하세요.

**참고**  
다음 예에서는 Amazon S3 버킷에 대한 액세스 권한을 허용하기 위해 IAM 역할 메서드를 사용합니다. 따라서 `aws_s3.table_import_from_s3` 함수 호출에는 자격 증명 파라미터가 포함되지 않습니다.

다음은 대표적인 예를 보여줍니다.

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

파라미터는 다음과 같습니다.
+ `t1` – 데이터를 복사할 PostgreSQL DB 인스턴스의 테이블에 지정된 이름입니다.
+ `''` – 데이터베이스 테이블의 열 목록입니다(선택 사항). 이 파라미터를 사용해 S3 데이터 중 어떤 열이 어떤 테이블 열에 들어가는지 표시할 수 있습니다. 열을 지정하지 않으면 모든 열이 테이블에 복사됩니다. 열 목록 사용에 대한 예시는 [사용자 지정 구분 기호를 사용하는 Amazon S3 파일 가져오기](#USER_PostgreSQL.S3Import.FileFormats.CustomDelimiter) 단원을 참조하십시오.
+ `(format csv)` – PostgreSQL COPY 인수입니다. 복사 프로세스에서는 [PostgreSQL COPY](https://www.postgresql.org/docs/current/sql-copy.html) 명령의 인수와 형식을 사용하여 데이터를 가져옵니다. 형식에 대한 선택 사항에는 이 예에 표시된 대로 쉼표로 구분된 값(CSV), 텍스트 및 이진법이 있습니다. 기본값은 텍스트입니다.
+  `s3_uri` – Amazon S3 파일을 식별하는 정보가 포함된 구조입니다. [aws\$1commons.create\$1s3\$1uri](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_s3_uri) 함수를 사용하여 `s3_uri` 구조를 생성하는 예제는 [Amazon S3 데이터에서 데이터 가져오기 개요](USER_PostgreSQL.S3Import.Overview.md) 단원을 참조하세요.

이 함수에 대한 자세한 내용은 [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) 단원을 참조하세요.

이 `aws_s3.table_import_from_s3` 함수는 문자를 반환합니다. Amazon S3 버킷에서 가져올 다른 파일 종류를 지정하려면 다음 예 중 하나를 참조하세요.

**참고**  
0바이트 파일을 가져오면 오류가 발생합니다.

**Topics**
+ [사용자 지정 구분 기호를 사용하는 Amazon S3 파일 가져오기](#USER_PostgreSQL.S3Import.FileFormats.CustomDelimiter)
+ [Amazon S3 압축(gzip) 파일 가져오기](#USER_PostgreSQL.S3Import.FileFormats.gzip)
+ [인코딩된 Amazon S3 파일 가져오기](#USER_PostgreSQL.S3Import.FileFormats.Encoded)

## 사용자 지정 구분 기호를 사용하는 Amazon S3 파일 가져오기
<a name="USER_PostgreSQL.S3Import.FileFormats.CustomDelimiter"></a>

다음 예제에서는 사용자 지정 구분 기호를 사용하는 파일을 가져오는 방법을 보여줍니다. 또한 `column_list` 함수의 [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) 파라미터를 사용해 데이터베이스 테이블에서 데이터를 배치할 곳을 제어하는 방법을 보여줍니다.

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

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

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

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

   ```
   postgres=> CREATE TABLE test (a text, b text, c text, d text, e text);
   ```

1. [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) 함수의 다음과 같은 형식을 사용해 Amazon S3 파일에서 데이터를 가져옵니다.

   [aws\$1commons.create\$1s3\$1uri](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_s3_uri) 함수 호출 인라인을 `aws_s3.table_import_from_s3` 함수 호출에 포함하여 파일을 지정할 수 있습니다.

   ```
   postgres=> SELECT aws_s3.table_import_from_s3(
      'test',
      'a,b,d,e',
      'DELIMITER ''|''', 
      aws_commons.create_s3_uri('amzn-s3-demo-bucket', 'pipeDelimitedSampleFile', 'us-east-2')
   );
   ```

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

```
postgres=> 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) 파일 가져오기
<a name="USER_PostgreSQL.S3Import.FileFormats.gzip"></a>

다음 예에서는 gzip으로 압축된 Amazon S3에서 파일을 가져오는 방법을 보여줍니다. 가져오는 파일에 다음과 같은 Amazon S3 메타데이터가 있어야 합니다.
+ 키: `Content-Encoding`
+ 값: `gzip`

AWS Management Console을 사용하여 파일을 업로드하는 경우 일반적으로 시스템에서 메타데이터를 적용합니다. AWS Management Console, AWS CLI 또는 API를 사용하여 Amazon S3에 파일을 업로드하는 방법에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [객체 업로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)를 참조하세요.

Amazon S3 메타데이터에 대한 자세한 내용과 시스템 제공 메타데이터에 대한 세부 정보는 *Amazon Simple Storage Service 사용 설명서*의 [Amazon S3 콘솔에서 객체 메타데이터 편집](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-object-metadata.html)을 참조하세요.

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

```
postgres=> CREATE TABLE test_gzip(id int, a text, b text, c text, d text);
postgres=> SELECT aws_s3.table_import_from_s3(
 'test_gzip', '', '(format csv)',
 'amzn-s3-demo-bucket', 'test-data.gz', 'us-east-2'
);
```

## 인코딩된 Amazon S3 파일 가져오기
<a name="USER_PostgreSQL.S3Import.FileFormats.Encoded"></a>

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

```
postgres=> SELECT aws_s3.table_import_from_s3(
 'test_table', '', 'encoding ''WIN1252''',
 aws_commons.create_s3_uri('amzn-s3-demo-bucket', 'SampleFile', 'us-east-2')
);
```

# 함수 참조
<a name="USER_PostgreSQL.S3Import.Reference"></a>

**Topics**
+ [aws\$1s3.table\$1import\$1from\$1s3](#aws_s3.table_import_from_s3)
+ [aws\$1commons.create\$1s3\$1uri](#USER_PostgreSQL.S3Import.create_s3_uri)
+ [aws\$1commons.create\$1aws\$1credentials](#USER_PostgreSQL.S3Import.create_aws_credentials)

## aws\$1s3.table\$1import\$1from\$1s3
<a name="aws_s3.table_import_from_s3"></a>

Amazon S3 데이터를 Amazon RDS 테이블로 가져옵니다. `aws_s3` 확장은 `aws_s3.table_import_from_s3` 함수를 제공합니다. 반환 값은 텍스트입니다.

### 구문
<a name="aws_s3.table_import_from_s3-syntax"></a>

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

다음 파라미터를 사용할 수도 있습니다.
+ `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
  )
  ```

### 파라미터
<a name="aws_s3.table_import_from_s3-parameters"></a>

 *table\$1name*   
데이터를 가져올 필수 텍스트 문자열로서, PostgreSQL 데이터베이스 테이블의 이름을 포함합니다.

 *column\$1list*   
데이터를 복사할 PostgreSQL 데이터베이스 테이블 열의 목록(선택 사항)을 포함하는 필수 텍스트 문자열입니다. 문자열이 비어 있는 경우 테이블의 모든 열이 사용됩니다. 관련 예시는 [사용자 지정 구분 기호를 사용하는 Amazon S3 파일 가져오기](USER_PostgreSQL.S3Import.FileFormats.md#USER_PostgreSQL.S3Import.FileFormats.CustomDelimiter) 단원을 참조하십시오.

 *options*   
PostgreSQL `COPY` 명령에 대한 인수를 포함하는 필수 텍스트 스트링입니다. 이 인수에서는 데이터가 PostgreSQL 테이블에 복사되는 방식을 지정합니다. 자세한 내용은 [PostgreSQL COPY 설명서](https://www.postgresql.org/docs/current/sql-copy.html)를 참조하십시오.

 *s3\$1info*   
S3 객체에 대한 다음 정보를 포함하는 `aws_commons._s3_uri_1` 복합 키입니다.  
+ `bucket` – 파일이 포함된 Amazon S3 버킷의 이름입니다.
+ `file_path` – 파일 경로를 포함한 Amazon S3 파일 이름입니다.
+ `region` - 파일이 위치한 AWS 리전입니다. AWS 리전 이름 및 연결된 값의 목록은 [리전, 가용 영역 및 로컬 영역](Concepts.RegionsAndAvailabilityZones.md) 섹션을 참조하십시오.

 *credentials*   
가져오기 작업에 사용할 다음 자격 증명을 포함하는 `aws_commons._aws_credentials_1` 복합 유형입니다.  
+ 액세스 키
+ 비밀 키
+ 세션 토큰
`aws_commons._aws_credentials_1` 복합 구조 생성에 대한 자세한 내용은 [aws\$1commons.create\$1aws\$1credentials](#USER_PostgreSQL.S3Import.create_aws_credentials) 단원을 참조하십시오.

### 대체 구문
<a name="aws_s3.table_import_from_s3-alternative-syntax"></a>

`s3_info` 및 `credentials` 파라미터 대신에 확장 파라미터 집합을 사용하면 테스트에 도움이 됩니다. 다음은 `aws_s3.table_import_from_s3` 함수에 대한 추가 구문 변형입니다.
+ `s3_info` 파라미터를 사용해 Amazon S3 파일을 식별하는 대신 `bucket`, `file_path` 및 `region` 파라미터의 조합을 사용하십시오. 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_key` 및 `session_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 
  )
  ```

### 대체 파라미터
<a name="aws_s3.table_import_from_s3-alternative-parameters"></a>

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

*file\$1path*  
파일 경로를 포함한 Amazon S3 파일 이름이 포함된 텍스트 문자열입니다.

*리전*  
파일의 AWS 리전 위치를 식별하는 텍스트 문자열입니다. AWS 리전 이름 및 연결된 값의 목록은 [리전, 가용 영역 및 로컬 영역](Concepts.RegionsAndAvailabilityZones.md) 섹션을 참조하세요.

*access\$1key*  
가져오기 작업에 사용할 액세스 키가 포함된 텍스트 문자열입니다. 기본값은 NULL입니다.

*secret\$1key*  
가져오기 작업에 사용할 비밀 키가 포함된 텍스트 문자열입니다. 기본값은 NULL입니다.

*session\$1token*  
(선택 사항) 가져오기 작업에 사용할 세션 키가 포함된 텍스트 문자열입니다. 기본값은 NULL입니다.

## aws\$1commons.create\$1s3\$1uri
<a name="USER_PostgreSQL.S3Import.create_s3_uri"></a>

Amazon S3 파일 정보를 저장할 `aws_commons._s3_uri_1` 구조를 생성합니다. `aws_commons.create_s3_uri` 함수의 `s3_info` 파라미터에서 [aws\$1s3.table\$1import\$1from\$1s3](#aws_s3.table_import_from_s3) 함수의 결과를 사용합니다.

### 구문
<a name="USER_PostgreSQL.S3Import.create_s3_uri-syntax"></a>

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

### 파라미터
<a name="USER_PostgreSQL.S3Import.create_s3_uri-parameters"></a>

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

*file\$1path*  
파일 경로를 포함한 Amazon S3 파일 이름이 포함된 필수 텍스트 문자열입니다.

*리전*  
파일이 위치한 AWS 리전이 포함된 필수 텍스트 문자열입니다. AWS 리전 이름 및 연결된 값의 목록은 [리전, 가용 영역 및 로컬 영역](Concepts.RegionsAndAvailabilityZones.md) 섹션을 참조하세요.

## aws\$1commons.create\$1aws\$1credentials
<a name="USER_PostgreSQL.S3Import.create_aws_credentials"></a>

`aws_commons._aws_credentials_1` 구조에서 액세스 키와 비밀 키를 설정합니다. `aws_commons.create_aws_credentials` 함수의 `credentials` 파라미터에서 [aws\$1s3.table\$1import\$1from\$1s3](#aws_s3.table_import_from_s3) 함수의 결과를 사용합니다.

### 구문
<a name="USER_PostgreSQL.S3Import.create_aws_credentials-syntax"></a>

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

### 파라미터
<a name="USER_PostgreSQL.S3Import.create_aws_credentials-parameters"></a>

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

*secret\$1key*  
Amazon S3 파일 가져오기에 사용할 비밀 키가 포함된 필수 텍스트 문자열입니다. 기본값은 NULL입니다.

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

# DB 인스턴스 간에 PostgreSQL 데이터베이스 전송
<a name="PostgreSQL.TransportableDB"></a>

Amazon RDS에 대해 PostgreSQL 전송 가능 데이터베이스를 사용하여 두 DB 인스턴스 간에 PostgreSQL 데이터베이스를 전송할 수 있습니다. 이 방법은 서로 다른 DB 인스턴스 간에 대규모 데이터베이스를 마이그레이션하는 매우 빠른 방법입니다. 이 방법을 사용하여 DB 인스턴스가 모두 동일한 메이저 버전의 PostgreSQL을 실행해야 합니다.

이 기능을 사용하려면 소스와 대상 DB 인스턴스 모두에 `pg_transport` 확장을 설치해야 합니다. `pg_transport` 확장은 최소한의 처리로 데이터베이스 파일을 이동하는 물리적 전송 메커니즘을 제공합니다. 이 메커니즘은 기존의 덤프 및 로드 프로세스보다 적은 가동 중지로 훨씬 빠르게 데이터를 이동합니다.

**참고**  
PostgreSQL 전송 가능 데이터베이스는 RDS for PostgreSQL 11.5 이상 및 RDS for PostgreSQL 버전 10.10 이상에서 사용할 수 있습니다.

RDS for PostgreSQL DB 인스턴스에서 다른 RDS로 PostgreSQL DB 인스턴스를 전송하려면 먼저 [ 전송을 위해 DB 인스턴스 설정](PostgreSQL.TransportableDB.Setup.md)에 설명된 대로 소스 및 대상 인스턴스를 설정합니다. 그런 다음 [ PostgreSQL 데이터베이스 전송](PostgreSQL.TransportableDB.Transporting.md)에 설명된 함수를 사용하여 데이터베이스를 전송할 수 있습니다.

**Topics**
+ [데이터베이스 전송 중 발생하는 사항](#PostgreSQL.TransportableDB.DuringTransport)
+ [PostgreSQL 전송 가능 데이터베이스 사용에 대한 제한 사항](#PostgreSQL.TransportableDB.Limits)
+ [PostgreSQL 데이터베이스를 전송하도록 설정](PostgreSQL.TransportableDB.Setup.md)
+ [PostgreSQL 데이터베이스를 소스에서 대상으로 전송](PostgreSQL.TransportableDB.Transporting.md)
+ [전송 가능한 데이터베이스 함수 참조](PostgreSQL.TransportableDB.transport.import_from_server.md)
+ [전송 가능한 데이터베이스 파라미터 참조](PostgreSQL.TransportableDB.Parameters.md)

## 데이터베이스 전송 중 발생하는 사항
<a name="PostgreSQL.TransportableDB.DuringTransport"></a>

PostgreSQL 전송 가능 데이터베이스 기능은 소스 DB 인스턴스에서 대상으로 데이터베이스를 가져오는 풀링 모델을 사용합니다. `transport.import_from_server` 함수는 대상 DB 인스턴스에서 전송 중 데이터베이스를 생성합니다. 전송 기간 동안에는 대상 DB 인스턴스에서 전송 중 데이터베이스에 액세스할 수 없습니다.

전송이 시작되면 소스 데이터베이스의 모든 현재 세션이 종료됩니다. 소스 DB 인스턴스의 소스 데이터베이스 이외의 모든 데이터베이스는 전송의 영향을 받지 않습니다.

소스 데이터베이스는 특수한 읽기 전용 모드로 설정됩니다. 이 모드에 있는 동안 소스 데이터베이스에 연결하고 읽기 전용 쿼리를 실행할 수 있습니다. 그러나 쓰기 가능 쿼리 및 일부 다른 유형의 명령은 차단됩니다. 전송되는 특정 소스 데이터베이스만 이러한 제한의 영향을 받습니다.

전송 중에는 대상 DB 인스턴스를 특정 시점으로 복원할 수 없습니다. 전송은 트랜잭션이 아니며 PostgreSQL 미리 쓰기 로그를 사용하여 변경 사항을 기록하지 않기 때문입니다. 대상 DB 인스턴스에 자동 백업이 활성화되어 있으면 전송이 완료된 후 백업이 자동으로 수행됩니다. 특정 시점으로 복원은 백업이 완료된 *후* 일정 시간 동안 사용할 수 있습니다.

전송이 실패하면 `pg_transport` 확장은 소스 및 대상 DB 인스턴스에 대한 모든 변경을 취소하려고 시도합니다. 여기에는 대상에 부분적으로 전송된 데이터베이스 제거가 포함됩니다. 실패 유형에 따라 소스 데이터베이스는 쓰기 가능 쿼리를 계속 거부할 수 있습니다. 이 경우 다음 명령을 사용하여 쓰기 가능 쿼리를 허용하십시오.

```
ALTER DATABASE db-name SET default_transaction_read_only = false;
```

## PostgreSQL 전송 가능 데이터베이스 사용에 대한 제한 사항
<a name="PostgreSQL.TransportableDB.Limits"></a>

전송 가능 데이터베이스에는 다음과 같은 제한 사항이 있습니다.
+ **읽기 전용 복제본** – 읽기 전용 복제본 또는 읽기 전용 복제본의 상위 인스턴스에서 전송 가능 데이터베이스를 사용할 수 없습니다.
+ **지원되지 않는 열 유형** – 이 방법으로 전송하려는 데이터베이스 테이블에서는 `reg` 데이터 유형을 사용할 수 없습니다. 이러한 유형은 전송 중에 자주 변경되는 시스템 카탈로그 객체 ID(OID)에 따라 다릅니다.
+ **테이블스페이스** – 모든 소스 데이터베이스 객체는 기본 `pg_default` 테이블스페이스에 있어야 합니다.
+ **호환성** – 소스 및 대상 DB 인스턴스는 모두 동일한 메이저 버전의 PostgreSQL을 실행해야 합니다.
+ **확장** - 소스 DB 인스턴스에는 `pg_transport`만 설치할 수 있습니다.
+ **역할 및 ACL** – 소스 데이터베이스의 액세스 권한 및 소유권 정보는 대상 데이터베이스로 전달되지 않습니다. 모든 데이터베이스 객체는 전송의 로컬 대상 사용자가 생성하고 소유합니다.
+ **동시 전송** - 작업자 프로세스가 올바르게 구성된 경우 단일 DB 인스턴스에서 가져오기와 내보내기를 포함하여 최대 32개의 동시 전송을 지원할 수 있습니다.
+ **RDS for PostgreSQL DB 인스턴스 전용** - RDS for PostgreSQL DB 인스턴스에 대해 PostgreSQL 전송 가능 데이터베이스만 지원할 수 있습니다. Amazon EC2에서 실행되는 온프레미스 데이터베이스 또는 데이터베이스에는 사용할 수 없습니다.

# PostgreSQL 데이터베이스를 전송하도록 설정
<a name="PostgreSQL.TransportableDB.Setup"></a>

시작하기 전에 RDS for PostgreSQL DB 인스턴스가 다음 요구 사항을 충족하는지 확인하세요.
+ 소스 및 대상 RDS for PostgreSQL DB 인스턴스는 동일한 버전의 PostgreSQL을 실행해야 합니다.
+ 대상 DB에는 전송할 소스 DB와 같은 이름의 데이터베이스를 가질 수 없습니다.
+ 전송을 실행하는 데 사용하는 계정은 소스 DB와 대상 DB 모두에 대한 `rds_superuser` 권한이 필요합니다.
+ 소스 DB 인스턴스의 보안 그룹은 대상 DB 인스턴스의 인바운드 액세스를 허용해야 합니다. 소스 및 대상 DB 인스턴스가 VPC에 있는 경우 이미 해당 경우일 수 있습니다. 보안 그룹에 대한 자세한 내용은 [보안 그룹을 통한 액세스 제어](Overview.RDSSecurityGroups.md)를(을) 참조하세요.

소스 DB 인스턴스에서 대상 DB 인스턴스로 데이터베이스를 전송하려면 각 인스턴스와 연결된 DB 파라미터 그룹을 몇 번 변경해야 합니다. 즉, 소스 DB 인스턴스에 대한 사용자 지정 DB 파라미터 그룹을 생성하고 대상 DB 인스턴스에 대한 사용자 지정 DB 파라미터 그룹을 생성해야 합니다.

**참고**  
DB 인스턴스가 이미 사용자 지정 DB 파라미터 그룹을 사용하여 구성된 경우 다음 절차의 2단계부터 시작할 수 있습니다.

**데이터베이스 전송을 위한 사용자 지정 DB 그룹 파라미터 구성**

다음 단계에서는 `rds_superuser` 권한을 가진 계정을 사용하세요.

1. 소스 및 대상 DB 인스턴스가 기본 DB 파라미터 그룹을 사용하는 경우 인스턴스에 적합한 버전을 사용하여 사용자 지정 DB 파라미터 그룹을 생성해야 합니다. 이렇게 하면 여러 파라미터의 값을 변경할 수 있습니다. 자세한 내용은 [Amazon RDS의 파라미터 그룹](USER_WorkingWithParamGroups.md) 섹션을 참조하세요.

1. 사용자 지정 DB 파라미터 그룹에서 다음 파라미터 값을 변경합니다.
   + `shared_preload_libraries` - 라이브러리 목록에 `pg_transport`를 추가합니다.
   + `pg_transport.num_workers` - 기본값은 3입니다. 데이터베이스에 필요한 경우 이 값을 늘리거나 줄입니다. 200GB 데이터베이스의 경우 8이하의 값이 좋습니다. 이 파라미터의 기본값을 늘리면 `max_worker_processes` 값도 늘려야 합니다.
   + `pg_transport.work_mem` - 기본값은 PostgreSQL 버전에 따라 128MB 또는 256MB입니다. 기본 설정은 일반적으로 변경되지 않을 수 있습니다.
   + `max_worker_processes` - 이 파라미터의 값은 다음 계산을 사용하여 설정해야 합니다.

     ```
     (3 * pg_transport.num_workers) + 9
     ```

     전송과 관련된 다양한 백그라운드 작업자 프로세스를 처리하기 위해 대상에서 필요한 값입니다. `max_worker_processes,`에 관한 자세한 내용은 PostgreSQL 문서에서 [리소스 소비](https://www.postgresql.org/docs/current/runtime-config-resource.html)를 참조하세요.

   `pg_transport` 파라미터에 대한 자세한 내용은 [전송 가능한 데이터베이스 파라미터 참조](PostgreSQL.TransportableDB.Parameters.md) 단원을 참조하십시오.

1. 소스 RDS for PostgreSQL DB 인스턴스 및 대상 인스턴스를 재부팅하면 파라미터 설정이 적용됩니다.

1. RDS for PostgreSQL 소스 DB 인스턴스에 연결합니다.

   ```
   psql --host=source-instance.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
   ```

1. DB 인스턴스의 퍼블릭 스키마에서 불필요한 확장을 제거합니다. 실제 전송 작업 중에만 `pg_transport` 확장이 허용됩니다.

1. 다음과 같이 `pg_transport` 확장을 설치합니다.

   ```
   postgres=> CREATE EXTENSION pg_transport;
   CREATE EXTENSION
   ```

1. RDS for PostgreSQL 대상 DB 인스턴스에 연결합니다. 불필요한 확장을 제거한 다음 `pg_transport` 확장을 설치합니다.

   ```
   postgres=> CREATE EXTENSION pg_transport;
   CREATE EXTENSION
   ```

# PostgreSQL 데이터베이스를 소스에서 대상으로 전송
<a name="PostgreSQL.TransportableDB.Transporting"></a>

[PostgreSQL 데이터베이스를 전송하도록 설정](PostgreSQL.TransportableDB.Setup.md)에 설명된 프로세스를 완료한 후에는 전송을 시작할 수 있습니다. 이렇게 하려면 대상 DB 인스턴스에서 `transport.import_from_server` 함수를 실행합니다. 다음 구문에서는 함수 파라미터를 찾을 수 있습니다.

```
SELECT transport.import_from_server( 
   'source-db-instance-endpoint', 
    source-db-instance-port, 
   'source-db-instance-user', 
   'source-user-password', 
   'source-database-name', 
   'destination-user-password', 
   false);
```

예에 표시된 `false` 값은 함수에 이것이 모의 실습이 아님을 알려줍니다. 전송 설정을 테스트하려면 다음에서 처럼 함수를 호출할 때 `dry_run` 옵션에서 `true`를 지정할 수 있습니다.

```
postgres=> SELECT transport.import_from_server(
    'docs-lab-source-db.666666666666aws-region.rds.amazonaws.com', 5432,
    'postgres', '********', 'labdb', '******', true);
INFO:  Starting dry-run of import of database "labdb".
INFO:  Created connections to remote database        (took 0.03 seconds).
INFO:  Checked remote cluster compatibility          (took 0.05 seconds).
INFO:  Dry-run complete                         (took 0.08 seconds total).
 import_from_server
--------------------

(1 row)
```

INFO 행은 `pg_transport.timing` 파라미터가 기본값인 `true`로 설정하므로 출력됩니다. 다음과 같이 명령을 실행하고 소스 데이터베이스를 대상으로 가져올 때 `dry_run`을 `false`로 설정합니다.

```
INFO:  Starting import of database "labdb".
INFO:  Created connections to remote database        (took 0.02 seconds).
INFO:  Marked remote database as read only           (took 0.13 seconds).
INFO:  Checked remote cluster compatibility          (took 0.03 seconds).
INFO:  Signaled creation of PITR blackout window     (took 2.01 seconds).
INFO:  Applied remote database schema pre-data       (took 0.50 seconds).
INFO:  Created connections to local cluster          (took 0.01 seconds).
INFO:  Locked down destination database              (took 0.00 seconds).
INFO:  Completed transfer of database files          (took 0.24 seconds).
INFO:  Completed clean up                            (took 1.02 seconds).
INFO:  Physical transport complete              (took 3.97 seconds total).
import_from_server
--------------------
(1 row)
```

이 함수를 사용하려면 데이터베이스 사용자 암호를 제공해야 합니다. 따라서 전송이 완료된 후 사용한 사용자 역할의 암호를 변경하는 것이 좋습니다. 또는 SQL 바인드 변수를 사용하여 임시 사용자 역할을 생성할 수 있습니다. 전송에 이러한 임시 역할을 사용한 후 나중에 해당 역할을 삭제하십시오.

전송에 성공하지 못하면 다음과 같은 오류 메시지가 표시될 수 있습니다.

```
pg_transport.num_workers=8 25% of files transported failed to download file data
```

"파일 데이터를 다운로드 실패" 오류 메시지는 작업자 프로세스 수가 데이터베이스 크기에 맞게 올바르게 설정되지 않았음을 나타냅니다. `pg_transport.num_workers`에 대한 값 세트를 늘리거나 줄여야 할 수 있습니다. 각 실패는 완료 비율을 보고하므로 변경 사항이 미치는 영향을 확인할 수 있습니다. 예를 들어 한 경우에 8에서 4로 설정을 변경하면 다음과 같은 결과가 발생합니다.

```
pg_transport.num_workers=4 75% of files transported failed to download file data
```

`max_worker_processes` 파라미터는 전송 프로세스 중에도 고려됩니다. 다시 말해 데이터베이스를 성공적으로 전송하려면 `pg_transport.num_workers`와 `max_worker_processes` 두 가지를 모두 수정해야 할 수 있습니다. 표시된 예제는 `pg_transport.num_workers`가 2로 설정되었을 때 마침내 작동했습니다.

```
pg_transport.num_workers=2 100% of files transported
```

`transport.import_from_server` 함수와 해당 파라미터에 대한 자세한 내용은 [전송 가능한 데이터베이스 함수 참조](PostgreSQL.TransportableDB.transport.import_from_server.md) 섹션을 참조하세요.

# 전송 가능한 데이터베이스 함수 참조
<a name="PostgreSQL.TransportableDB.transport.import_from_server"></a>

`transport.import_from_server` 함수는 PostgreSQL 데이터베이스를 소스 DB 인스턴스에서 대상 DB 인스턴스로 가져와서 전송합니다. 물리적 데이터베이스 연결 전송 메커니즘을 사용하여 이를 수행합니다.

전송을 시작하기 전에 이 함수는 소스 및 대상 DB 인스턴스가 동일한 버전이며 마이그레이션을 위해 호환되는지 확인합니다. 또한 대상 DB 인스턴스 소스에 충분한 공간이 있는지 확인합니다.

**구문**

```
transport.import_from_server(
   host text,
   port int,
   username text,
   password text,
   database text,
   local_password text,
   dry_run bool
)
```

**반환 값**

없음.

**Parameters**

다음 표에서 `transport.import_from_server` 함수 파라미터에 대한 설명을 확인할 수 있습니다.


****  

| 파라미터 | 설명 | 
| --- | --- | 
| host |  소스 DB 인스턴스의 엔드포인트입니다.  | 
| port | 소스 DB 인스턴스의 포트를 나타내는 정수입니다.PostgreSQL DB 인스턴스는 종종 포트 5432를 사용합니다. | 
| username |  소스 DB 인스턴스의 사용자입니다. 이 사용자는 `rds_superuser` 역할의 멤버여야 합니다.  | 
| password |  소스 DB 인스턴스의 사용자 암호입니다.  | 
| database |  전송할 소스 DB 인스턴스의 데이터베이스 이름입니다.  | 
| local\$1password |  대상 DB 인스턴스에 대한 현재 사용자의 로컬 암호입니다. 이 사용자는 `rds_superuser` 역할의 멤버여야 합니다.  | 
| dry\$1run | 모의 실습 수행 여부를 지정하는 선택적 부울 값입니다. 기본값은 `false`이며 이는 전송이 진행됨을 의미합니다.실제 전송을 수행하지 않고 소스와 대상 DB 인스턴스 간의 호환성을 확인하려면 dry\$1run을 true로 설정하십시오. | 

예****

관련 예제는 [PostgreSQL 데이터베이스를 소스에서 대상으로 전송](PostgreSQL.TransportableDB.Transporting.md) 섹션을 참조하세요

# 전송 가능한 데이터베이스 파라미터 참조
<a name="PostgreSQL.TransportableDB.Parameters"></a>

`pg_transport` 확장 동작을 제어하는 몇 가지 파라미터입니다. 다음에서 이러한 파라미터에 대한 설명을 확인할 수 있습니다.

**`pg_transport.num_workers`**  
전송 프로세스에 사용할 작업자 수입니다. 기본값은 3입니다. 유효한 값은 1 – 32입니다. 대용량 데이터베이스 전송에서도 일반적으로 8명 미만 작업자가 필요합니다. 전송 중에 대상 DB 인스턴스의 이 설정 값은 대상 및 소스 모두에서 사용됩니다.

**`pg_transport.timing` **  
전송 중 타이밍 정보를 보고할지 여부를 지정합니다. 기본값은 `true`로, 타이밍 정보가 보고됩니다. 이 파라미터는 설정은 `true`로 두어 진행 상황을 모니터링할 수 있을 것을 권장합니다. 예제 출력은 [PostgreSQL 데이터베이스를 소스에서 대상으로 전송](PostgreSQL.TransportableDB.Transporting.md)을 참조하세요.

**`pg_transport.work_mem`**  
각 작업자에게 할당할 최대 메모리 양입니다. 기본값은 PostgreSQL 버전에 따라 131072킬로바이트(KB) 또는 262144KB(256MB)입니다. 최소값은 64MB(65,536KB)입니다. 유효한 값은 이진 base-2 단위로 나타낸 킬로바이트(KB)입니다(1KB = 1024바이트).  
전송 시 이 파라미터에 지정된 것보다 적은 메모리를 사용할 수 있습니다. 대용량 데이터베이스 전송에서도 일반적으로 작업자당 256MB(262144KB) 미만의 메모리가 필요합니다.