AWS Redshift Cursor 失败:DECLARE CURSOR may only be used in transaction blocks;

时间:2021-03-26 19:15:39

标签: amazon-web-services amazon-redshift datagrip database-cursor

首先,我知道游标的性能不佳,但在我的特定情况下我需要一个。

在 AWS Redshift 中,我有以下代码:

BEGIN;
  DECLARE newCursor CURSOR FOR SELECT * FROM DBFoo.TableBar;
  FETCH NEXT FROM newCursor;
  CLOSE newCursor;

我收到以下错误:

<块引用>

亚马逊无效操作:DECLARE CURSOR 只能在交易区块中使用;

自从“开始;”直接在“DECLARE newCursor CURSOR”之前我不明白它为什么失败,或者如何让它工作

编辑:我通过 Datagrip 连接到 Redshift。这是一个全新的会议。如果我在BEGIN之前声明游标也失败,因为它需要一个事务块

2 个答案:

答案 0 :(得分:1)

您的会话可能处于“自动提交”模式。这基本上意味着每个 ';'是一个隐含的 COMMIT。您可以通过查看会话的 svl_statementtext 并查看您的语句的 xid 是否在发出 BEGIN 后继续更改来确认这一点。如果这是原因,您需要参考 Datagrip 文档来确定如何关闭自动提交。

答案 1 :(得分:0)

DataGrip documentation about transaction modeexecution behavior

此外,您可以从每个控制台/会话的控制台工具栏中更改它

Tx:mode

并为每个数据源设置

Tx:mode for data source