如何(以编程方式)知道何时在 PostgreSQL/Amazon Redshift 上完成查询?

Posted

技术标签:

【中文标题】如何(以编程方式)知道何时在 PostgreSQL/Amazon Redshift 上完成查询?【英文标题】:How to know (programmatically) when a query is done on PostgreSQL/Amazon Redshift? 【发布时间】:2013-11-06 07:45:32 【问题描述】:

有没有办法以编程方式检查 Redshift/PostgreSQL 中的查询状态? 我如何知道查询何时完成运行?

我有一个应用程序可以按顺序运行一系列 SQL 查询。它运行一个查询并等待它完成,然后再执行下一个查询。我需要知道查询何时完成运行。

我无法同步运行它们,因为有时 Redshift/PostgreSQL 在执行完查询后不提供放弃控制(对于长查询)。有什么办法吗?

【问题讨论】:

【参考方案1】:

查看 Redshift 中的 stv_recents 表。

例如要检索当前运行的查询列表:

select pid, trim(user_name), starttime, query
from stv_recents
where status = 'Running'
order by starttime ASC; 

【讨论】:

我使用表 stv_recents 手动检查我的查询是否执行完毕。但我不知道如何从代码中使用它,可能有多个人在运行查询(具有相同的用户名), 您可以检查query 列是否与您的查询匹配。您还可以在 SQL 中添加一些随机注释并检查它是否处于运行状态。 谢谢。对于我运行的每个查询,我都会添加一个 UUID 作为注释以检查查询状态。 是否有一个与 stv_recents 类似的表,我可以在其中检查查询在执行时是否引发了异常? 只有COPY like 查询可以在执行期间抛出错误。它的错误存储在STL_LOAD_ERRORS table。如果 SQL 有任何问题,将不会执行任何其他查询。【参考方案2】:

当查询完成时,Redshift 总是放弃控制。如果您的应用程序没有收到该控制,则意味着您遇到了 TCP 超时/保持连接问题。

以下是解决此问题的文档:http://docs.aws.amazon.com/redshift/latest/mgmt/connecting-firewall-guidance.html

【讨论】:

以上是关于如何(以编程方式)知道何时在 PostgreSQL/Amazon Redshift 上完成查询?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 应用程序是不是可以通过编程方式知道 APNS 警报何时到达设备?

如何以编程方式知道 Adob​​e Reader 已完成文件加载?

如何以编程方式监控 Web 浏览器中的 JavaScript 执行?

如何在Objective-C中以编程方式而不是由用户控制UISwitch的状态?

如何以编程方式使身体睡眠和醒来?

如何使用java套接字编程知道网络何时关闭