如何在到达psql时立即查看结果?

时间:2014-03-15 13:46:12

标签: postgresql

使用psql客户端在Postgres数据库上执行SQL查询时,它可以很好地格式化结果并将其显示在寻呼机中(默认情况下)。如何更改此行为以使psql在可用时立即显示结果而不是等待计算完整结果集(在更大的计算中)?当然,在这种情况下不能预期对齐的输出,因为在打印之前不知道各列的宽度。

2 个答案:

答案 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的回答