例如我的
Postgresql
数据库名称是Ajp
我无法删除/创建具有此名称的数据库,即。
Ajp
我的放置脚本是
cd /D D:\\Apps
cd RSTAR PGSQL DOTCONNECT
cd bin
cd Debug
cd PG
psql -U postgres -d postgres -c "DROP DATABASE Ajp "
执行此操作时我收到此错误
D:\Apps\RSTAR PGSQL DOTCONNECT in\Debug\PG>psql -U postgres -d postgres -c "DR OP数据库Ajp“ 错误:数据库“ajp”不存在
我尝试了
psql -U postgres -d postgres -c "DROP DATABASE 'Ajp' "
(引号内的数据库名称)
又出错了
错误:“'Ajp'”处或附近有语法错误 第 1 行:删除数据库“Ajp”
如何解决这个问题? (请不要评论
change your dbname to lower-case
)
using : "PostgreSQL 9.2.4, compiled by Visual C++ build 1600, 32-bit"
此问题的解决方案如下
\
psql -U postgres -d postgres -c "DROP DATABASE \"Ajp\";"
请参阅下面的评论
区分大小写的 SQL 标识符需要用双引号括起来:
DROP DATABASE "Ajp";
如果您通过命令行传递它们,则不确定它们是否在 Windows 上正确保留。
您可能需要将其放入 SQL 脚本中并将脚本名称传递给 psql。
有关有效标识符的详细信息,请参阅手册:http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
我确信有人会使用 PowerShell 遇到这个问题,这也需要反斜杠和双引号。两者都需要通过勾选来逃脱。 (谢谢波兹)
(从 Xml 配置文件读取)
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
[xml]$config = Get-Content -Path "$PSScriptRoot\Installer\Config\install.config.xml"
$securePass = Read-Host "Enter password for postgres account" -AsSecureString
$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($securePass)
$pgPass = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
$env:PGPASSWORD = $pgPass
# Skip to here for usage:
$dropDbCmd = "DROP DATABASE IF EXISTS `\`"" + $config.Settings.dbName + "`\`";"
.\psql.exe -c $dropDbCmd -d "postgres" -p $config.Settings.dbPort -U "postgres"
这是一个老问题,但是,它可能对其他人有帮助。 试试这个:
echo "CREATE DATABASE \\"DataBaseName\\" ;" | psql --host=xxxx.postgres.database.azure.com --port=5432 --username=xxxx@xxxx --dbname=postgres
你试过这个吗?
psql -U postgres -d postgres -c "DROP DATABASE ""Ajp"" "