将 PostgreSQL 数据库从源传输到目标
在完成 设置以传输 PostgreSQL 数据库 中所述的过程后,您可以启动传输。为此,请在目标数据库实例上运行 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.666666666666
aws-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)
由于 pg_transport.timing
参数设置为其默认值 true
,因此输出 INFO 行。运行该命令时将 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
“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
函数及其参数的更多信息,请参阅 可传输数据库函数参考。