使用psql客户端在Postgres数据库上执行SQL查询时,它可以很好地格式化结果并将其显示在寻呼机中(默认情况下)。如何更改此行为以使psql在可用时立即显示结果而不是等待计算完整结果集(在更大的计算中)?当然,在这种情况下不能预期对齐的输出,因为在打印之前不知道各列的宽度。
答案 0 :(得分:4)
在显示之前不处理完整的结果集意味着在psql
中有两个不同的东西:
1)对齐模式。要计算任何列的最大宽度以显示对齐的结果,必须在客户端中提取所有行。如果不需要,应使用\a
命令关闭此项:
\ a在未对齐和对齐输出之间切换 模式
2)FETCH_COUNT
。设置此参数(例如\set FETCH_COUNT 10000
)表示客户端应该通过块请求服务器的结果,而不是大的单个结果集。在内部它使用光标。记录为:
FETCH_COUNT If this variable is set to an integer value > 0, the results of SELECT queries are fetched and displayed in groups of that many rows, rather than the default behavior of collecting the entire result set before display. Therefore only a limited amount of memory is used, regardless of the size of the result set. Settings of 100 to 1000 are commonly used when enabling this feature. Keep in mind that when using this feature, a query might fail after having already displayed some rows.
组合FETCH_COUNT和未对齐模式将尽可能快地将结果显示在屏幕或文件中。
此外,我们已经发出警告(仍然来自psql的联机帮助页),以大块和对齐模式进行播放并不能很好地协同工作:
Tip Although you can use any output format with this feature, the default aligned format tends to look bad because each group of FETCH_COUNT rows will be formatted separately, leading to varying column widths across the row groups. The other output formats work better.
答案 1 :(得分:0)
遗憾的是,在标准的psql客户端中无法实现。
在大多数情况下,您可以使用LIMIT和OFFSET来限制需要获取的数据量,另请参阅CURSOR http://www.postgresql.org/docs/9.3/static/plpgsql-cursors.html 抱歉,你不能在psql中使用CURSOR。
可以创建一个以您想要的方式工作的客户端,这里有一些信息: http://www.postgresql.org/docs/9.3/static/libpq-single-row-mode.html
更新:以上内容不正确。你可以用ex来做到这一点。 \设置FETCH_COUNT 10
请参阅Daniels的回答