Postgres CLI命令中含短横线数据库名的语法错误解决方法
解决PostgreSQL数据库名含短横线的SQL语法错误问题
你的问题核心是shell解析双引号导致SQL语句中的数据库名未被正确包裹。PostgreSQL规定,包含短横线这类特殊字符的标识符(如数据库名)必须用双引号"括起来,但原命令里外层的双引号被shell处理后,内层双引号丢失,传到PostgreSQL的SQL变成了无引号的famdb-develop,因此触发语法错误。
以下是两种可行的修复方案:
方案1:转义shell中的双引号
在需要传递给PostgreSQL的双引号前添加反斜杠\,让shell保留双引号并传递给psql:
/usr/bin/psql postgres -h localhost -U postgres -c "GRANT CONNECT ON DATABASE \"famdb-develop\" TO fullwood;"
方案2:用单引号包裹整个SQL命令
shell中,单引号'包裹的内容不会被解析,因此可以用单引号把-c后的整个SQL命令括起来,内部直接用双引号包裹数据库名:
/usr/bin/psql postgres -h localhost -U postgres -c 'GRANT CONNECT ON DATABASE "famdb-develop" TO fullwood;'
两种方法都能让PostgreSQL正确识别带短横线的数据库名"famdb-develop",执行授权命令时就不会报错了。
内容的提问来源于stack exchange,提问作者beli3ver
相关产品推荐
相关产品推荐

