我试图从Git Bash环境中备份数据库,但是可执行文件没有输出任何内容。
如果我使用-f
标志指定文件名,则会创建一个空白文件,因此该可执行文件显然会运行,但它不会执行任何操作--没有输出或活动。使用-v
标志也不会使它产生任何输出。
但是,如果我运行pg_dump --help
,就会得到输出。
当我从Windows命令行执行同样的操作时,系统会要求我提供一个密码,转储程序也会进行得很好。
pg_dump
不工作的Git环境有什么不同?有什么解决办法吗?如果可能的话,我更愿意远离Windows命令行。
发布于 2021-11-04 02:57:00
不使用pg_dump ...
,而是使用winpty pg_dump ...
Git的不同之处在于,它是一个运行在mintty
窗口中的POSIX程序(除非您启用了某个可选的、仍未准备生产的特性),它不支持Windows。在尝试使用该API读取密码的程序中,最常见的情况是在用户键入密码时不打印密码。
您的pg_dump
版本可能是为了使用Windows来编译的,这样它就可以读取密码而不回显它。(如果使用POSIX API编译,则在Windows终端中运行时,不显示密码的尝试将失败。)如果您在带有mintty
的winpty
中运行它,您可能会看到密码提示,并能够键入密码。
winpty
是一个启动隐藏的Windows窗口的shim,运行连接到I/O的程序,然后轮询该控制台的屏幕,以获得输出发送回您的MinGW终端。
发布于 2021-11-03 13:11:09
在Windows命令行中也这样做,我被要求输入密码,转储程序进行得很好
我怀疑在Git Bash环境中,它也在等待密码,但是您没有看到它的提示(它正在提示的stdout/stderr是否可以被重定向到您的终端以外的其他地方?)。
尝试输入密码,就像被提示了一样,看看会发生什么。另外,尝试通过其他方法(就像这里覆盖的)提供密码。在这两种情况下,这可能不是一个pg_dump
特定的问题,而是一个bash/bashgit/windows/其他需要类似输入的工具,您将更有可能在其他地方得到有用的答案。
https://dba.stackexchange.com/questions/302089
复制