使用 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)