pg_dump:命令行参数过多

52
这个命令有什么问题:
pg_dump -U postgres -W admin --disable-triggers -a -t employees -f D:\ddd.txt postgres

这个错误提示是由于命令行参数过多导致的。

9个回答

48

2
@BhargavGor:省略-W admin,不仅仅是省略-W - Daniel Vérité

27

为了后代的记录,需要注意的是,pg_dump和pg_restore(以及许多其它命令)不能处理文本编辑器创建的长破折号。如果你从文本编辑器中复制粘贴命令行,请确保在编辑过程中没有将破折号转换成其他字符。否则,你将得到看似正确但会无法被这些工具的参数解析器正确处理的命令行。


这对我有帮助。 - VSO

21

如果您在命令中放置密码,pg_dump和pg_restore需要在命令行上询问密码,否则它们始终会给出“太多命令行参数”错误。您可以使用以下内容设置相关的环境变量:

在命令行或批处理文件中使用以下内容:

"SET PGPASSWORD=<password>"

这样你就不需要在批处理文件中手动输入密码了,它们使用给定的环境变量。


这太高科技了。它让我免于编写一个可怕的me expect/spawn bash脚本。谢谢。 - i0x539
1
这应该是被接受的答案。其他答案只是解决了拼写错误。 - Andrew Swan

11

不要使用-W标志传递密码,而是应该先设置postgres的临时变量:

PGPASSWORD="mypass" pg_dump -U postgres--disable-triggers -a -t employees -f D:\ddd.txt postgres

1
这个可行,但是"mypass"需要用单引号。 - Nirmal Seneviratne

5

我是通过复制粘贴得到这个问题的,其中一个破折号不同。

本来是:–-host=(第一个破折号是“长”破折号)更正为--host=后解决了它


兄弟,如果你在这里,我会亲你一口!哈哈。小心TextEdit自动更正。 - mangonights
愚蠢的问题...我写成了-jobs而不是--jobs。 - wmassingham

5

-W -> 将提示输入密码以进行完整的数据库转储。使用类似以下的内容:

pg_dump -h 192.168.44.200 -p 5432 -U postgres -W -c -C -Fc -f C:\MMM\backup10_3.backup DATABASE_NAME

3
此外,如果您不想要密码提示,则直接使用连接字符串。
pg_dump 'postgresql://<username>:<password>@localhost:5432/<dbname>'

因此,结合原问题中的选项:

pg_dump 'postgresql://postgres:<password>@localhost:5432/postgres' --table='"employees"' --format='t' --file='D:\ddd.txt' --data-only --disable-triggers

当你遇到大小写问题时,不要忘记使用引号

参考:


1
另一种选择是添加一个内容如下的~/.pgpass文件:
hostname:port:database:username:password

阅读更多 这里


0

2021年11月30日,pg v12,Windows 10

pg_dump -U postgres -W -F t postgres > C:\myfolder\pg.tar

-U "postgres" 作为用户名,

-W 表示提示输入密码,

-F t 表示格式为 .tar,

> C:\myfolder\pg.tar 是目标路径和文件名。


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