Postgresql

PostgreSQL vagrant VM 無法創建擴展

  • July 5, 2015

我在安裝 PostgreSQL 期間遇到了一些問題,我最終決定使用 vagrant 管理的 VM 解決方案,如postgresql wiki中所述。

(一開始我的動機只是為了解決安裝問題,但我發現虛擬機解決方案有很多優點)。

我開始使用它,一切看起來都很好。但最終我想使用crosstabdoc),但是tablefunc虛擬機中沒有安裝擴展,我找不到安裝它的方法。

虛擬機在您第一次執行應用程序時為它創建一個使用者,這很好,它也為應用程序創建一個數據庫。但是如果我嘗試使用應用程序使用者安裝擴展

create extension tablefunc;

我收到以下錯誤(無論如何都是預期的):

錯誤:創建擴展“tablefunc”的權限被拒絕

SQL 狀態:42501

提示:必須是超級使用者才能創建此擴展。

關鍵是我沒有postgres使用者密碼,所以我無法使用pgAdmin. (這已經是一個讓我有點害怕的問題,如果我有其他問題並且我需要管理員。但我一直在瀏覽並沒有找到任何關於此的評論。)

在 postgres wiki,上面的連結中,它描述了一種以超級使用者身份連接到 VM 的方法,我也嘗試過,

vagrant ssh
sudo su - postgres

但是當我再次嘗試執行安裝命令時,我被要求輸入postgres數據庫中使用者的密碼。例如,其中一項試驗:

postgres@postgresql:~$ psql -h localhost -U postgres -d vic -c 'create extension tablefunc'
Password for user postgres: 
psql: FATAL:  password authentication failed for user "postgres"

那麼我的問題是,是否有辦法為 vagrant VM 安裝擴展(或者無論如何用超級使用者執行任何命令)。此外,擁有超級使用者密碼我會更開心,這樣我就可以管理來自pgAdmin.

非常感謝您的閱讀和幫助。

postgres自動安裝後沒有密碼,預計通過該peer方法進行身份驗證。 sudo su - postgres是它的第一步。第二步是通過 Unix 本地域套接字連接,但您的命令不這樣做,它通過 TCP 連接,這就是您遇到密碼問題的原因。

安裝的pg_hba.conf文件可能以這兩個規則開頭,除了註釋:

# 通過 Unix 域套接字進行數據庫管理登錄
本地所有 postgres 同行

# IPv4 本地連接:
託管所有 127.0.0.1/32 md5
[...]

-h localhost...與第一個規則不匹配的 TCP 連接時。第二條規則匹配並觸發對密碼的要求,但由於沒有設置,這只能失敗(也不允許空密碼)。

-h localhost解決方案是從 psql 呼叫中刪除,取而代之的是第一個規則。由於它在 Unix 系統上,它將嘗試通過 Unix 域套接字進行連接。

以 postgres 使用者身份登錄到 psql 後,您可以使用以下\password命令設置密碼或ALTER USER postgres PASSWORD 'foobar';

另請參閱https://help.ubuntu.com/community/PostgreSQL

使用 pgAdmin III GUI部分中,他們建議在設置密碼後將pg_hba.conf第一條規則從 authpeer更改為 。md5我個人不太明白為什麼。我寧願不理會該規則並從我自己的 Unix 帳戶執行 pgAdmin,選擇 localhost TCP 連接。

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