如何(以编程方式)知道何时在 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 警报何时到达设备?
如何以编程方式知道 Adobe Reader 已完成文件加载?
如何以编程方式监控 Web 浏览器中的 JavaScript 执行?