使用 psql 检索大型结果集
问题:有时您需要检索非常大的结果集 - 例如,为了通过管道导出到文件。由于 psql 通常在单个操作中获取整个结果集,因此您可能会遇到“内存不足”错误。
解决方案:设置 psql 的FETCH_COUNT参数,这将导致 psql 分块检索数据FETCH_COUNT行,从而限制内存使用。
以下示例 - 使用FETCH_COUNT设置为一个不切实际的低值 - 演示了FETCH_COUNT的作用 - 由于行正在以 5 个块进行获取,因此默认对齐格式被应用于每个块中的值,而不是整个数据集,导致输出错位。(由于FETCH_COUNT的主要目的是处理大型数据集,您通常不希望显示这些数据,因此这通常不是问题)。
testdb=# \set FETCH_COUNT 5 testdb=# SELECT id, order_code, distributor_id FROM orders LIMIT 15; id | order_code | distributor_id ---------+-----------------------+---------------- 1001984 | yuti59i76 | 1052 1002596 | 32556436 | 96 1002071 | 49667-009-347496671_1 | 103 1002070 | 49667-009-347496671_2 | 103 1002068 | 49667-009-347496672_2 | 103 1002069 | 49667-009-347496672_1 | 103 1002344 | 1338165747 | 67 1002355 | 43229_X1214EE | 15620 1002494 | 20121016-350371870_0_3017_0 | 55 1001979 | wrewqrwqr | 1052 1001980 | 3255325 | 1052 1001981 | 2346457658 | 1052 1002356 | sb1-jpz | 15620 1001982 | wqrtewtew | 1052 1001985 | 47568658 | 1052 (15 rows)