英文:
pg_cron failing when using transaction block
问题
FATAL: EndTransactionBlock: unexpected state BEGIN
错误是由于在 pg_cron
中运行时出现的问题。该错误表示在事务中的状态不符合预期。在标准 PostgreSQL 中,事务应该以 BEGIN
开始,然后以 COMMIT
或 ROLLBACK
结束。但是,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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论