

# Aurora PostgreSQL Limitless Database에서 COPY 명령 사용
<a name="limitless-load.copy"></a>

`psql` 유틸리티의 [\\copy](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMANDS-COPY) 기능을 사용하여 Aurora PostgreSQL Limitless Database로 데이터를 가져오고 내보낼 수 있습니다.

## COPY 명령을 사용하여 Aurora PostgreSQL Limitless Database로 데이터 로드
<a name="limitless-load.copy-to"></a>

Aurora PostgreSQL Limitless Database는 데이터 가져오기에서 `psql` 유틸리티의 [\\copy](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMANDS-COPY) 기능과 호환됩니다.

Aurora PostgreSQL과 같은 Limitless Database에서는 다음이 지원되지 않습니다.
+ DB 인스턴스에 대한 직접 SSH 액세스 - 데이터 파일(예: .csv 형식)을 DB 인스턴스 호스트에 복사하고 파일에서 `COPY`를 실행할 수 없습니다.
+ DB 인스턴스에서 로컬 파일 사용 - `COPY ... FROM STDIN` 및 `COPY ... TO STDOUT`을 사용합니다.

PostgreSQL의 `COPY` 명령에는 로컬 파일(`FROM/TO`)로 작업하고 클라이언트와 서버(`STDIN/STDOUT`) 간의 연결을 사용하여 데이터를 전송하는 옵션이 있습니다. 자세한 내용은 PostgreSQL 설명서의 [COPY](https://www.postgresql.org/docs/current/sql-copy.html)를 참조하세요.

PostgreSQL `psql` 유틸리티의 `\copy` 명령은 `psql` 클라이언트를 실행하는 컴퓨터의 로컬 파일과 호환됩니다. 연결된 원격(예: Limitless Database) 서버에서 해당 `COPY ... FROM STDIN` 또는 `COPY ... FROM STDOUT` 명령을 간접 호출합니다. 로컬 파일에서 `STDIN`로 데이터를 읽거나 `STDOUT`에서 여기에 데이터를 씁니다.

### 데이터를 여러 파일로 분할
<a name="limitless-load.copy-split"></a>

데이터는 Aurora PostgreSQL Limitless Database의 여러 샤드에 저장됩니다. `\copy`를 사용하여 데이터 로드 속도를 높이려면 데이터를 여러 파일로 분할할 수 있습니다. 그런 다음 별도의 `\copy` 명령을 병렬로 실행하여 각 데이터 파일에 대해 독립적으로 가져옵니다.

예를 들어 가져올 행이 300만 개인 CSV 형식의 입력 데이터 파일이 있습니다. 파일을 각각 20만 개의 행을 포함하는 청크(15개의 청크)로 분할할 수 있습니다.

```
split -l200000 data.csv data_ --additional-suffix=.csv -d
```

그러면 `data_00.csv`부터 `data_14.csv`까지의 파일이 생성됩니다. 그런 다음, 다음과 같은 15개의 병렬 `\copy` 명령을 사용하여 데이터를 가져올 수 있습니다.

```
psql -h dbcluster.limitless-111122223333.aws-region.rds.amazonaws.com -U username -c "\copy test_table from '/tmp/data_00.csv';" postgres_limitless &
psql -h dbcluster.limitless-111122223333.aws-region.rds.amazonaws.com -U username -c "\copy test_table FROM '/tmp/data_01.csv';" postgres_limitless &
...
psql -h dbcluster.limitless-111122223333.aws-region.rds.amazonaws.com -U username -c "\copy test_table FROM '/tmp/data_13.csv';" postgres_limitless &
psql -h dbcluster.limitless-111122223333.aws-region.rds.amazonaws.com -U username -c "\copy test_table FROM '/tmp/data_14.csv';" postgres_limitless
```

이 기법을 사용하면 단일 `\copy` 명령을 사용하는 것보다 약 10배 더 빠르게 동일한 양의 데이터를 가져옵니다.

## COPY 명령을 사용하여 Limitless Database 데이터를 파일로 복사
<a name="limitless-load.copy-from"></a>

다음 예시와 같이 [\\copy](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMANDS-COPY) 명령을 사용하여 무한 테이블의 데이터를 파일로 복사할 수 있습니다.

```
postgres_limitless=> \copy test_table TO '/tmp/test_table.csv' DELIMITER ',' CSV HEADER;
```