如果我在工作表中执行单个SQL语句(例如CREATE ROLE my_user LOGIN PASSWORD 'my_pwd' VALID UNTIL 'infinity';
),那么它可以正常工作。将它包装在匿名块中,如下所示:
DO
$$
BEGIN
CREATE ROLE my_user LOGIN PASSWORD 'my_pwd' VALID UNTIL 'infinity';
END
$$;
我收到以下错误消息:
Error starting at line : 3 in command -
BEGIN
CREATE ROLE my_user LOGIN PASSWORD 'my_pwd' VALID UNTIL 'infinity';
END
$$;
Error report -
ERROR: syntax error at or near "CREATE"
Position: 10
但是,当我在psql shell中执行它时,相同的脚本工作正常。我错过了一些明显的东西吗?
使用:
PostgreSQL版本9.4
Postgres JDBC驱动程序postgresql-9.3-1102.jdbc41
SQL Developer 4.0版(jdk 1.7.0_71)
答案 0 :(得分:1)
错误的来源是 JDBC无法正确处理美元引用(尚未)。相关回答:
在这种情况下,您可以规避问题:
DO
'
BEGIN
CREATE ROLE my_user LOGIN PASSWORD ''my_pwd'' VALID UNTIL ''infinity'';
END
';
如果这不起作用,请尝试设置不同的查询终止符 ,就像linked answer中建议的那样。
您似乎意识到您根本不需要DO
语句来代码示例代码。只是:
CREATE ROLE my_user LOGIN PASSWORD 'my_pwd' VALID UNTIL 'infinity';