亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

命令 StdinPipe 過早關閉

命令 StdinPipe 過早關閉

Go
Helenr 2022-06-21 09:57:58
我一直在嘗試pg_restore使用數據庫轉儲文件中的數據 來調用exec.Command和提供數據,它適用于 1Mb 以下的小文件,但對于較大的轉儲,它會因錯誤而失敗。我還嘗試逐行掃描并寫入管道,但它導致了相同的錯誤,并且像在單獨的 goroutine 中一樣運行也無濟于事。StdinPipewrite |1: broken pipecmd.Run()去:1.14 操作系統:macOScmd := exec.Command("pg_restore", "--clean", "-n public", "--dbname=DB_URI")cmd.Stdout = os.Stdoutcmd.Stderr = os.Stderrpw, err := cmd.StdinPipe()defer pw.Close()...done := make(chan struct{})errCh := make(chan error)file, err := os.Open("dumpfile")defer file.Close()if err := cmd.Start(); err != nil {    return err}_, err = io.Copy(pw, file)我做錯了什么或如何保持管道暢通?
查看完整描述

3 回答

?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

包括cmd.Wait()應該解決您的問題,就像您的評論之一說的那樣。



查看完整回答
反對 回復 2022-06-21
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

使用cat代替時pg_restore,您的代碼有效。另一方面,
在使用時,我遇到了與您相同的錯誤,這實際上是預期的。head -10

由于您是cmd在異步模式下啟動的,因此如果pg_restore在使用它的所有之前停止,如果它嘗試在封閉的管道上寫入STDIN,io.Copy則會遇到這種錯誤。

檢查您的pg_restore命令的狀態(最終返回碼、打印在其 STDERR 上的內容、日志...)以查看是否存在實際錯誤。

您可以將此錯誤視為您不應再向此命令提供輸入的正常指示。


查看完整回答
反對 回復 2022-06-21
?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

在我同事的幫助下,我們發現命令參數格式錯誤,因為 Go 直接使用系統調用,程序的每個參數都必須是單獨的,所以這 -n public導致了問題

"pg_restore", "--clean", "-n public", "--dbname=DB_URI"

并且修復也很清楚 - 拆分它們-n,public

"pg_restore", "--clean", "-n", "public", "--dbname=DB_URI"


查看完整回答
反對 回復 2022-06-21
  • 3 回答
  • 0 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號