

# 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) 섹션을 참조하세요.