pg_cron 在使用事务块时失败

huangapple go评论61阅读模式
英文:

pg_cron failing when using transaction block

问题

FATAL: EndTransactionBlock: unexpected state BEGIN 错误是由于在 pg_cron 中运行时出现的问题。该错误表示在事务中的状态不符合预期。在标准 PostgreSQL 中,事务应该以 BEGIN 开始,然后以 COMMITROLLBACK 结束。但是,pg_cron 可能对事务有一些特殊要求或限制。

你需要查看 pg_cron 的文档或更多细节,以了解它对事务的要求,以便正确在其中运行你的查询。可能需要对你的查询进行一些修改,以适应 pg_cron 的特殊要求。

英文:

I have a query as a transaction, using BEGIN and COMMIT. When I run this as a query it succeeds, however when I run it through pg_cron I receive the following error:

FATAL: EndTransactionBlock: unexpected state BEGIN

BEGIN;TRUNCATE app_top50;INSERT INTO xxx...;COMMIT;

Googling the error returns very few results.

答案1

得分: 3

pg_cron的源代码中有一条关于它的注释:

/*
 * 我们不允许像COMMIT和ABORT这样的事务控制命令在这里。整个SQL语句作为一个单一事务执行,如果没有遇到错误,则提交。
*/

因此,您不需要添加BEGIN; ... COMMIT;块。只需添加查询,它们将作为单一事务执行。

英文:

pg_cron source code has a comment about it:

/*
 * We don't allow transaction-control commands like COMMIT and ABORT
 * here.  The entire SQL statement is executed as a single transaction
 * which commits if no errors are encountered.
*/

So you don't need to add BEGIN; ... COMMIT; block. Just add queries and they will be executed as single transaction.

huangapple
  • 本文由 发表于 2023年2月23日 20:43:46
  • 转载请务必保留本文链接:https://go.coder-hub.com/75545014.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定