2016-11-30 90 views
0

我是Postgres和Bash的新手,所以我不確定它們有什麼不同。sudo -u postgres psql和sudo psql -U postgres有什麼區別?

我想在bg腳本中自動化更新Postgres中的表。我有.sql文件,我創建了.pgpass文件,其中包含600.

提供給我的腳本使用sudo -u postgres psql db -w < .sql,並且因爲找不到該通道而失敗。

鑑於sudo psql -U postgres db -w < .sql不會提示通過並且能夠更新。

那有什麼區別?爲什麼第一個命令不能通過.pgpass傳遞?

+0

Stack Overflow是編程和開發問題的網站。這個問題似乎與題目無關,因爲它不涉及編程或開發。請參閱幫助中心的[我可以詢問哪些主題](http://stackoverflow.com/help/on-topic)。也許[超級用戶](http://superuser.com/)或[Unix&Linux堆棧交換](http://unix.stackexchange.com/)會是一個更好的地方。另請參閱[我在哪裏發佈有關Dev Ops的問題?](http://meta.stackexchange.com/q/134306) – jww

回答

2

sudo -u postgres運行命令串的其餘部分的UNIX用戶postgres

sudo psql -U postgres db -w運行命令作爲UNIX用戶root和(presumeably)連接到postgres的作爲用戶「postgres的」

大概.pgpass文件對於unix用戶postgres不存在。

+2

大多數安裝都配置「peer」身份驗證,因此'postgres'用戶可以獲得信任,因爲其unix用戶名匹配其postgres用戶名。 –

0

這是對等身份驗證的情況。如果你運行的是用戶x,並且你的數據庫上有用戶x,那麼你就可以被postgres信任,所以你不必使用密碼(安裝的默認設置)。運行sudo psql -u x你試圖從用戶root連接到數據庫,用戶名是x ... root!= x,所以你需要密碼。客戶端身份驗證由configuration file pg_hba.conf控制您也可以提供密碼via .pgpass file。你會在PostgreSQL文檔中找到所有需要的信息。

相關問題