postgresql: синтаксическая ошибка в или около "DO"

Я пытаюсь запустить блок DO, например, этот (скопировано из поста на этом форуме)

DO $$
DECLARE x int;
    BEGIN
    x := 10;
    RAISE NOTICE '>>>%<<<', x;
END;
$$

но что происходит, это:

ОШИБКА: синтаксическая ошибка в или около "DO"

Состояние SQL: 42601

Персонаж: 1

Неважно, какой блок DO я запускаю, оператор DO просто не работает (в том числе на примерах, скопированных / вставленных из документа, и мне интересно, в чем может быть причина. Кто-нибудь может мне помочь, пожалуйста?

большое спасибо

2 ответа

Решение

Вы работаете на старой версии PostgreSQL.

В общем, если вы получаете неожиданную синтаксическую ошибку по ключевому слову или PostgreSQL жалуется на отсутствующую функцию, которая, очевидно, должна существовать, первое, что нужно сделать, это проверить, что функция, которую вы пытаетесь использовать, действительно существует в вашей версии.

Вы можете заменить DO блок с:

CREATE OR REPLACE FUNCTION some_func() RETURNS void AS 
$$
.. body of the DO block here...
$$ LANGUAGE plpgsql VOLATILE;

SELECT some_func();

DROP FUNCTION some_func();

в более старой версии.

Если у вас та же ошибка с PostgreSQL 9.0+, то это из-за неправильного типа выполнения. У pgAdiminIII есть две кнопки "Выполнить" (зеленый треугольник):

  • Выполнить запрос
  • Выполнить pgScript

Для того, чтобы бежать DO $$ вам нужен первый.

Другие вопросы по тегам