Postgresql

pg_dump 在 Git Bash 中掛起,但在 Windows 命令行中有效

  • November 4, 2021

我試圖從 Git Bash 環境中備份數據庫,但執行檔沒有輸出任何內容。

如果我使用-f標誌指定文件名,則會創建一個空白文件,因此執行檔顯然會執行,但它不執行任何操作 - 沒有輸出或活動。使用該-v標誌也不會使其產生任何輸出。

如果我執行pg_dump --help,我會得到輸出。

當我從 Windows 命令行執行相同操作時,我被要求輸入密碼並且轉儲進行得很好。

pg_dump在那裡不工作的 Git Bash 環境有什麼不同?有什麼解決方法嗎?如果可能的話,我寧願遠離 Windows 命令行。

TLDR:代替pg_dump ..., 使用winpty pg_dump ...

Git Bash 的不同之處在於它是一個在mintty不支持 Windows Terminal API 的視窗中執行的 POSIX 程序(除非您啟用了某個可選的並且仍然不是生產就緒功能)。失敗最常見於嘗試使用該 API 讀取密碼而不在使用者鍵入密碼時列印的程序。

您的版本pg_dump可能已編譯為使用 Windows 終端 API,以便它可以讀取密碼而不回顯它。(如果它是用 POSIX API 編譯的,在 Windows 終端中執行時不顯示密碼的嘗試會失敗。)如果你在minttywith中執行它,winpty你可能會看到密碼提示並且能夠輸入密碼。

winpty是一個 shim,它啟動一個隱藏的 Windows 控制台視窗,執行你給它的程序連接到 I/O,然後輪詢該控制台的螢幕以將輸出發送回你的 MinGW 終端。

引用自:https://dba.stackexchange.com/questions/302089