如何删除/创建具有大写字母的数据库名称?

Viv*_* S. 21 postgresql psql

例如我的Postgresql 数据库名称是Ajp

我不能删除/创建具有此名称的数据库,即. Ajp

我的drop脚本是

cd /D D:\\Apps
cd RSTAR PGSQL DOTCONNECT
cd bin
cd Debug
cd PG
psql -U postgres  -d postgres -c "DROP DATABASE  Ajp "
Run Code Online (Sandbox Code Playgroud)

执行此操作时出现此错误

D:\ Apps\RSTAR PGSQL DOTCONNECT\bin\Debug\PG> psql -U postgres -d postgres -c"DR OP DATABASE Ajp"错误:数据库"ajp"不存在

我试过psql -U postgres -d postgres -c "DROP DATABASE 'Ajp' "(引号内的db名称)

再次得到错误

错误:"'Ajp'或其附近的语法错误"第1行:DROP DATABASE'Ajp'

怎么解决这个问题?(请不要评论change your dbname to lower-case)

using : "PostgreSQL 9.2.4, compiled by Visual C++ build 1600, 32-bit"

这个问题的解决方案如下

  • Sholud使用逃脱角色 \
  • psql -U postgres -d postgres -c "DROP DATABASE \"Ajp\";"

    下面的评论

a_h*_*ame 32

区分大小写的SQL标识符需要用双引号括起来:

DROP DATABASE  "Ajp";
Run Code Online (Sandbox Code Playgroud)

如果您通过命令行传递它们,则不确定它们是否在Windows上正确保留.

您可能需要将其放入SQL脚本并将脚本名称传递给psql.

有关有效标识符的详细信息,请参阅手册:http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

  • @ user3682599正确转义windows'cmd.exe(也用于执行批处理文件)是`psql -U postgres -d postgres -c"DROP DATABASE \"Ajp \""` (4认同)