PostgreSQL中的语法错误,位于“-”附近

41
我正在尝试运行一个查询来更新用户密码。
alter user dell-sys with password 'Pass@133';

但因为有-,所以它给我报错,报错信息如下:

ERROR:  syntax error at or near "-"
LINE 1: alter user dell-sys with password 'Pass@133';
                       ^

有人能给我解释一下吗?


http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS - user330315
4个回答

60

我在我的系统中重现了这个问题,

postgres=# alter user my-sys with password 'pass11';
ERROR:  syntax error at or near "-"
LINE 1: alter user my-sys with password 'pass11';
                       ^

这里是问题所在,

psql正在请求输入,而您又给出了alter查询,请参见postgres-#。这就是为什么在alter处会出现错误的原因。

postgres-# alter user "my-sys" with password 'pass11';
ERROR:  syntax error at or near "alter"
LINE 2: alter user "my-sys" with password 'pass11';
        ^

解决方法与错误一样简单,

postgres=# alter user "my-sys" with password 'pass11';
ALTER ROLE

27

用双引号将其括起来

alter user "dell-sys" with password 'Pass@133';

请注意,您必须使用创建用户时使用的相同大小写,使用双引号。例如,如果您创建了"Dell-Sys",则在提到该用户时必须精确地发出相同的内容。

我认为最好的做法是删除该用户,并重新创建一个没有非法标识符字符和双引号的用户,这样您可以随后以任何想要的大小写引用它。


尝试了这个,它给出了错误:ERROR: 在"alter"附近有语法错误。第二行:alter user "dell-sys" with password 'Pass@133'; - OpenCurious
1
@Heliconia 你确定你上一行代码以分号结尾了吗? - Roman Pekar

1
我试图将一个名为walters-ro的用户赋予对特定表的只读权限。所以当我运行SQL命令# GRANT SELECT ON table_name TO walters-ro;时,我收到了以下错误:`syntax error at or near "-" 解决方法基本上是将用户名用双引号括起来,因为用户名中有一个破折号(-)。
# GRANT SELECT ON table_name TO "walters-ro";

那解决了问题。


0
我遇到了类似的错误:
错误:在“)”附近有语法错误 第4行:);
因为我错误地放了一个尾随逗号,如下所示:
CREATE TABLE person(
  id SERIAL PRIMARY KEY,
  name VARCHAR(20),
               -- ↑ A trailing comma
);

所以,我删除了下面显示的尾随逗号,然后问题就解决了。
CREATE TABLE person(
  id SERIAL PRIMARY KEY,
  name VARCHAR(20)
               -- ↑ No trailing comma
);

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