Postgresql 如何在结果到达psql后立即查看它们?

Postgresql 如何在结果到达psql后立即查看它们?,postgresql,Postgresql,当使用psql客户机在Postgres数据库上执行SQL查询时,它会很好地格式化结果并将其显示在寻呼机中(默认情况下)。如何更改此行为以使psql在结果可用时立即显示结果,而不是等待完整的结果集被计算(在较大的计算中)?当然,在这种情况下不能期望对齐的输出,因为在打印单个列之前,它们的宽度是未知的。不幸的是,这在标准psql客户端中是不可能的 在大多数情况下,您可以使用LIMIT和OFFSET来限制需要获取的数据量,另请参见CURSOR 对不起,您不能在psql中使用游标 可以创建一个以您想要的

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

不幸的是,这在标准psql客户端中是不可能的

在大多数情况下,您可以使用LIMIT和OFFSET来限制需要获取的数据量,另请参见CURSOR 对不起,您不能在psql中使用游标

可以创建一个以您想要的方式工作的客户端,以下是一些信息:

更新:上述内容不正确。您可以使用ex.\set FETCH\u COUNT 10来执行此操作


请参见Daniels的答案

,不幸的是,这在标准psql客户端中是不可能的

在大多数情况下,您可以使用LIMIT和OFFSET来限制需要获取的数据量,另请参见CURSOR 对不起,您不能在psql中使用游标

可以创建一个以您想要的方式工作的客户端,以下是一些信息:

更新:上述内容不正确。您可以使用ex.\set FETCH\u COUNT 10来执行此操作


请参见Daniels answer

在显示前不处理完整的结果集在
psql
中意味着两件不同的事情:

1) 对齐模式。要计算任何列的最大宽度以显示对齐结果,必须在客户机中获取所有行。不需要时,应使用
\a
命令关闭:

\未对齐和对齐输出之间的切换 模式

2)
FETCH\u COUNT
。设置此参数时(例如,
\set FETCH\u 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. 取数 如果此变量设置为大于0的整数值,则 SELECT查询将以如此多的组获取和显示 行,而不是收集整个 显示前的结果集。因此,只有有限数量的 无论结果集大小如何,都会使用内存。 启用此选项时,通常使用100到1000的设置 特色。请记住,使用此功能时,查询 可能在已经显示某些行后失败。 结合FETCH_COUNT和unaligned模式将使结果尽可能快地显示在屏幕或文件中

此外,正如我们所警告的(仍然来自psql的主页),分块获取和对齐模式不能很好地结合在一起:

提示 尽管您可以使用此功能的任何输出格式, 默认的对齐格式看起来很糟糕,因为每个 FETCH_COUNT行组将单独格式化, 导致行组中的列宽不同。这个 其他输出格式工作得更好。
在显示之前不处理完整的结果集在
psql
中意味着两件不同的事情:

1) 对齐模式。要计算任何列的最大宽度以显示对齐结果,必须在客户机中获取所有行。不需要时,应使用
\a
命令关闭:

\未对齐和对齐输出之间的切换 模式

2)
FETCH\u COUNT
。设置此参数时(例如,
\set FETCH\u 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. 取数 如果此变量设置为大于0的整数值,则 SELECT查询将以如此多的组获取和显示 行,而不是收集整个 显示前的结果集。因此,只有有限数量的 无论结果集大小如何,都会使用内存。 启用此选项时,通常使用100到1000的设置 特色。请记住,使用此功能时,查询 可能在已经显示某些行后失败。 结合FETCH_COUNT和unaligned模式将使结果尽可能快地显示在屏幕或文件中

此外,正如我们所警告的(仍然来自psql的主页),分块获取和对齐模式不能很好地结合在一起:

提示 尽管您可以使用此功能的任何输出格式, 默认的对齐格式看起来很糟糕,因为每个 FETCH_COUNT行组将单独格式化, 导致行组中的列宽不同。这个 其他输出格式工作得更好。
你能给出游标变体的完整示例吗?就我所知,你需要
开始;为SELECT…声明foo游标。可以使用
fetchnext FROM foo获取单行,但如何以迭代方式获取它们(或至少获取批)?抱歉,这有误导性,您不能在psql中使用游标来满足您的需要。我认为偏移量和限制是您最好的选择。游标也存在于更高的SQL级别,可以在psql或任何SQL客户端中使用。请参阅,您能否给出游标变体的完整示例?就我所知,你需要
开始;为SELECT…声明foo游标。可以使用
fetchnext FROM foo获取单行,但如何以迭代方式获取它们(或至少获取批)?抱歉,这有误导性,您不能在psql中使用游标来满足您的需要。我认为偏移量和限制是您最好的选择。游标也存在于更高的SQL级别,可以在psql或