在PowerShell中创建带C排序规则的PostgreSQL数据库时遇参数错误
解决Windows PowerShell中createdb命令参数过多的错误
嘿,这个问题我太熟悉了!在Windows PowerShell里执行PostgreSQL的createdb命令时,单引号的处理逻辑和Linux/macOS终端不一样,这就是你碰到createdb: too many command-line arguments (first is "C")错误的根源。
错误原因
PostgreSQL的createdb是外部可执行文件,而PowerShell对单引号包裹的参数解析方式和类Unix环境有差异。你原来命令里的-l 'C',在PowerShell中会被拆分成-l、'C'两个独立参数,导致createdb误以为'C'是额外的数据库名或其他参数,从而触发报错。
解决方案
试试下面两种方法,都能快速解决这个问题:
改用双引号包裹locale参数:在PowerShell中,双引号能更好地将参数值完整传递给外部命令:
createdb -U postgres -h localhost -p 5432 -O apm apm -l "C" -T template0使用长参数名
--locale:有时候长参数名在PowerShell的参数解析中更稳定,避免歧义:createdb -U postgres -h localhost -p 5432 -O apm apm --locale="C" -T template0
额外说明
如果你用的是Windows CMD而不是PowerShell,原来的单引号命令其实可以正常运行,但PowerShell的参数解析逻辑不同,所以必须调整引号类型。另外,你指定-T template0的做法是完全正确的——只有从template0模板创建数据库时,才能自定义排序规则,这步没做错哦!
内容的提问来源于stack exchange,提问作者Vikram
相关产品推荐
相关产品推荐

