Transporting a PostgreSQL database to the destination from the source - Amazon Relational Database Service

Transporting a PostgreSQL database to the destination from the source

After you complete the process described in Setting up to transport a PostgreSQL database, you can start the transport. To do so, run the transport.import_from_server function on the destination DB instance. In the syntax following you can find the function parameters.

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);

The false value shown in the example tells the function that this is not a dry run. To test your transport setup, you can specify true for the dry_run option when you call the function, as shown following:

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)

The INFO lines are output because the pg_transport.timing parameter is set to its default value, true. Set the dry_run to false when you run the command and the source database is imported to the destination, as shown following:

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)

This function requires that you provide database user passwords. Thus, we recommend that you change the passwords of the user roles you used after transport is complete. Or, you can use SQL bind variables to create temporary user roles. Use these temporary roles for the transport and then discard the roles afterwards.

If your transport isn't successful, you might see an error message similar to the following:

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

The "failed to download file data" error message indicates that the number of worker processes isn't set correctly for the size of the database. You might need to increase or decrease the value set for pg_transport.num_workers. Each failure reports the percentage of completion, so you can see the impact of your changes. For example, changing the setting from 8 to 4 in one case resulted in the following:

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

Keep in mind that the max_worker_processes parameter is also taken into account during the transport process. In other words, you might need to modify both pg_transport.num_workers and max_worker_processes to successfully transport the database. The example shown finally worked when the pg_transport.num_workers was set to 2:

pg_transport.num_workers=2 100% of files transported

For more information about the transport.import_from_server function and its parameters, see Transportable databases function reference.