Незавершенная строка в долларовых кавычках, равная или близкая к "$$"

Я пытаюсь объявить некоторые переменные с помощью DBeaver и продолжаю сталкиваться с этой ошибкой.

Unterminated dollar-quoted string at or near "$$

 DO $$
 DECLARE A integer; B integer;

BEGIN   
END$$;

Любые идеи?


person user1158745    schedule 17.09.2015    source источник
comment
postgresql.org/docs/current/static/sql-do.html и postgresql. org/docs/9.4/static/   -  person Milen A. Radev    schedule 17.09.2015


Ответы (4)


DBeaver был проблемой. Перешел на PGAdmin и больше никаких проблем.

person user1158745    schedule 21.09.2015

Начиная с DBeaver 6, вы можете выполнять скрипт с помощью ALT-X (в Windows), который не пытается выполнять захват/интерполяцию переменных с использованием знаков доллара.

person Hobotron    schedule 30.08.2019
comment
Судя по иконкам в редакторе, alt+x выполняет весь скрипт. Это более простое решение, но вы также можете выделить весь запрос и выполнить один оператор, и это не даст никаких ошибок. - person GammaGames; 28.10.2019

Опубликованный синтаксис в порядке. Ваша проблема в том, что клиентское приложение или драйвер искажают запрос, вероятно, потому, что не понимают долларовые кавычки.

Возможно, он пытается разбить его на отдельные операторы с точкой с запятой, выполняя:

  • DO $$ DECLARE A integer;
  • B integer;
  • BEGIN END$$;

в виде трех отдельных утверждений. Это приведет к сообщенной ошибке, например.

$ psql -c 'DO $$ DECLARE A integer;'
ERROR:  unterminated dollar-quoted string at or near "$$ DECLARE A integer;"
LINE 1: DO $$ DECLARE A integer;
           ^

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


Другая возможность для некоторых клиентов заключается в том, что он может рассматривать $ как экранированный заполнитель параметра запроса и заменять его одним $ или пытаться заменить его заполнителем на стороне сервера, например $1. Однако это не то, что здесь происходит.

person Craig Ringer    schedule 18.09.2015

DBeaver также выдает эту ошибку, когда в сценарии есть синтаксическая ошибка SQL. В моем случае это была пара несовпадающих скобок в выбранном вычисляемом столбце.

person Joel MC    schedule 11.02.2020