首页 > 解决方案 > 当表仍在接收插入时,使用 pg_dump/ysql_dump 和 YugabyteDB 导出数据的推荐方法是什么?

问题描述

当此工作负载(来自https://github.com/YugaByte/yb-sample-apps/的 SqlSecondaryIndex 工作负载)仍在运行时

% java -jar yb-sample-apps.jar --workload SqlSecondaryIndex --nodes
127.0.0.1:5433 --num_threads_read 4 --num_threads_write 2

尝试使用 ysql_dump 导出表会导致“查询错误:需要重新启动读取”错误。

$ ./ysql_dump -h 127.0.0.1 -d postgres --data-only --table sqlsecondaryindex  -f out.txt
ysql_dump: Dumping the contents of table "sqlsecondaryindex" failed: PQgetResult() failed.
ysql_dump: Error message from server: ERROR:  Query error: Restart read required at: { read: { physical: 1592265362684030 } local_limit: { physical: 1592265375906038 } global_limit: <min> in_txn_limit: <max> serial_no: 0 }

但是如果在工作负载停止时执行相同的命令,则 ysql_dump 命令成功完成,没有任何问题。这是预期的行为吗?

标签: databasepg-dumpdistributed-databaseyugabyte-db

解决方案


要读取一致的快照并避免遇到“读取重启”错误,请将--serializable-deferrable选项传递给ysql_dump. 例如:

~/tserver/postgres/bin/ysql_dump -h 127.0.0.1 -d postgres \
   --data-only --table sqlsecondaryindex \
   --serializable-deferrable -f data1.csv

推荐阅读