PostgreSQL:语法错误,位于“DO”附近。

4

我想运行一个DO块,例如这个(从论坛上复制的):

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

但发生了什么:

错误:在“DO”附近有语法错误

SQL 状态:42601

字符:1

无论我运行哪个 DO 块,DO 语句都不起作用(包括从文档复制/粘贴的示例),我想知道原因是什么。请问有人能帮帮我吗?

非常感谢。


PostgreSQL 的版本是多少? - hobbs
3
好的,我尽力而为。我猜测你想知道的是DO在Postgres 9.0中被添加了。如果使用旧版本,请参考Postgres < 9.0的DO块的等效语句是什么? - hobbs
9.3版本或更高版本。 - jkt
1
显示 select version(); 的输出。 - Clodoaldo Neto
2
对不起,这是8.4.20版本。我正在使用新安装的服务器工作,没有想到可能已经安装了早期版本。谢谢! - jkt
2个回答

6

您正在使用旧版本的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();

在旧版本中。

3
这并不完全正确。我在 PostgreSQL 14 上也遇到了同样的错误,并来到这里寻求解决方案。 - Tom

1

如果您在使用postgreSQL 9.0+时遇到了相同的错误,那么原因是执行类型错误。pgAdminIII有两个执行(绿色三角形)按钮:

  • 执行查询
  • 执行pgScript

要运行DO $$,您需要使用第一个按钮。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接