Ошибка AWS Redshift Cursor: DECLARE CURSOR может использоваться только в блоках транзакций;

Во-первых, я понимаю, что курсоры неэффективны, но мне они нужны в моем конкретном случае.

В AWS Redshift у меня есть следующий код:

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

Я получаю следующую ошибку:

Amazon Недопустимая операция: DECLARE CURSOR можно использовать только в блоках транзакций;

С НАЧАЛА; непосредственно предшествует DECLARE newCursor CURSOR Я не понимаю, почему он не работает или как заставить его работать

edit: я подключаюсь к Redshift через Datagrip. Это совершенно новая сессия. Если я объявлю курсор до того, как BEGIN также завершится ошибкой, потому что для этого требуется блок транзакции


person MikeJYQuestion    schedule 26.03.2021    source источник
comment
Вы совершили или откатили любую предыдущую транзакцию? Это произойдет, если вы объявите курсор как самое первое, что вы делаете в сеансе? Если на то пошло, как вы подключаетесь к Redshift (psql, программно или каким-то инструментом?).   -  person Parsifal    schedule 26.03.2021
comment
Я подключаюсь к Redshift через Datagrip. Это совершенно новая сессия. Если я объявлю курсор до того, как BEGIN также завершится ошибкой, потому что для этого требуется блок транзакции   -  person MikeJYQuestion    schedule 26.03.2021


Ответы (2)


Ваш сеанс, вероятно, находится в режиме автоматической фиксации. Это в основном означает, что каждый ';' является подразумеваемым COMMIT. Вы можете убедиться в этом, просмотрев svl_statementtext для своего сеанса и увидев, продолжает ли изменяться xid ваших операторов даже после выдачи BEGIN. Если это причина, вам нужно будет обратиться к документации Datagrip, чтобы определить, как отключить автофиксацию.

person Bill Weiner    schedule 26.03.2021
comment
Спасибо! Да, он был настроен на автоматическую фиксацию. Когда я изменил его на ручную фиксацию, он работал нормально - person MikeJYQuestion; 27.03.2021

документация DataGrip о режиме транзакций и поведение выполнения.

Кроме того, вы можете изменить его с панели инструментов консоли для каждой консоли/сеанса.

Передача:режим

и установите его для каждого источника данных

Tx:режим для источника данных

person Vasilii Chernov    schedule 30.03.2021