分享到

簡介

使用 PostgreSQL 資料庫時,首先需要考慮的是如何連線和與資料庫例項互動。這需要資料庫客戶端(您用於與資料庫互動的元件)和資料庫伺服器(實際儲存、組織和提供資料訪問的 PostgreSQL 例項)之間的協調。

因此,您需要了解如何透過提供所需的認證資訊來作為客戶端連線。本指南將介紹如何使用原生的 psql 命令列客戶端連線到 PostgreSQL 資料庫——這是與資料庫例項互動最常見和最有用的方式之一。

在配套指南中,您可以瞭解如何配置 PostgreSQL 的認證以滿足您的專案需求。建議閱讀這兩份指南,以更全面地瞭解 PostgreSQL 中認證的工作方式。

如果您的資料庫客戶端或庫請求連線 URI,您可能需要檢視我們的理解 PostgreSQL 連線 URI 指南。

psql 客戶端的基本資訊

psql 客戶端是 PostgreSQL 的原生命令列客戶端,可以連線到資料庫例項以提供互動式會話或向伺服器傳送命令。它在實現初始設定和進行基本配置時特別有用,尤其是在透過應用程式庫與資料庫互動之前。此外,psql 非常適合在開發程式將使用的訪問模式時進行互動式探索或即席查詢。

連線方式取決於 PostgreSQL 伺服器的配置以及可用於認證到賬戶的選項。在以下部分中,我們將介紹一些基本的連線選項。為了清晰起見,我們將區分本地連線和遠端連線。

  • 本地連線:客戶端和 PostgreSQL 例項位於同一伺服器上的連線
  • 遠端連線:客戶端連線到執行在不同計算機上的網路可訪問的 PostgreSQL 例項

讓我們從連線到同一臺計算機上的資料庫開始。

使用 psql 連線到本地資料庫

在沒有任何引數的情況下,psql 命令會嘗試連線到 Unix 套接字檔案來訪問本地資料庫。它使用您的作業系統使用者名稱作為您嘗試連線的 PostgreSQL 使用者名稱和資料庫名。

預設情況下,現代版本的 PostgreSQL 配置了所謂的對等認證對等認證會在存在與使用者作業系統使用者名稱匹配的有效 PostgreSQL 使用者時自動認證使用者。

因此,如果您的當前使用者是本地資料庫上的有效 PostgreSQL 使用者,您可以透過輸入以下命令進行連線:

psql

然而,您的普通作業系統使用者名稱不太可能已經擁有關聯的 PostgreSQL 使用者名稱。所以通常,您需要使用已經擁有關聯 PostgreSQL 角色的作業系統使用者名稱登入 PostgreSQL。

預設情況下,PostgreSQL 的超級使用者或管理員賬戶稱為 postgres。安裝時,也會在作業系統上建立一個名為 postgres 的使用者。因此,要以 postgres 使用者身份登入 PostgreSQL,您需要以 postgres 作業系統使用者身份連線。有多種方法可以做到這一點。

在大多數系統上,作為 postgres 使用者獲取 shell 的最簡單方法是使用 sudo 命令。要為 postgres 使用者開啟一個 shell 會話,然後登入到資料庫,您可以輸入:

sudo --login --user=postgres
psql

如果您不需要以 postgres 使用者身份執行任何額外的 shell 命令,您也可以直接以 postgres 使用者身份執行 psql 命令。這會立即將您登入到 PostgreSQL 會話,而不是先帶您進入 shell:

sudo --login --user=postgres psql

這兩種方法都應該允許您登入到 postgres PostgreSQL 使用者賬戶。

連線到遠端資料庫

出於安全原因以及對本地套接字檔案的依賴,對等認證不能用於遠端連線。相反,使用者需要使用另一種方法登入。

可用的認證方法根據 PostgreSQL 例項的配置而異。然而,最常見的是,您將能夠透過提供以下資訊進行認證:

選項描述
主機名PostgreSQL 伺服器的網路主機名或 IP 地址。使用 -h 選項指定主機名。
網路埠PostgreSQL 伺服器執行的網路埠。預設情況下是埠 5432。如果使用預設值,可以省略此項。要指定不同的埠,可以使用 -p 選項。
PostgreSQL 使用者名稱您希望連線的資料庫使用者名稱。如果未指定,將使用您的作業系統使用者名稱。使用 -U 選項可以覆蓋預設值並定義要連線的使用者名稱。
PostgreSQL 密碼與指定使用者名稱關聯的 PostgreSQL 密碼。由於如果未提供密碼,psql 將會提示您輸入密碼,因此通常可以省略此項。
PostgreSQL 資料庫您要訪問的 PostgreSQL 資料庫名。如果未指定,您的作業系統使用者名稱將用作資料庫名。要指定不同的資料庫,請使用 -d 選項。

有多種方式可以將連線資訊提供給 psql。這裡,我們將介紹兩種最常見的方式:透過傳遞選項和使用連線字串。

透過選項將連線資訊傳遞給 psql

因此,連線到遠端資料庫的基本格式通常如下所示:

psql -h <hostname> -p <port> -U <username> -d <database>

遠端伺服器會指示它需要大多數賬戶的密碼,此時 psql 會提示您輸入密碼。如果您認證成功,將啟動一個新的互動式 PostgreSQL 會話。

例如,我們可以想象要連線到具有以下要求的資料庫:

  • 主機名:myhost
  • 埠:1234
  • 資料庫:applicationdb
  • 使用者名稱:myapplicationuser
  • 密碼:mypass

使用以下選項呼叫 psql 將允許您進行認證:

psql -h myhost -p 1234 -U myapplicationuser -d applicationdb

按下回車鍵後,您將被提示輸入密碼,您可以使用 mypass 進行認證。

透過連線字串將連線資訊傳遞給 psql

同樣的資訊也可以編碼為 PostgreSQL 連線字串。連線字串在一個 URI 字串中提供相同的資訊,該字串使用某些字元作為不同欄位之間的分隔符。

連線字串具有以下通用格式:

postgresql://<username>:<password>@<hostname>:<port>/<database>

如果不需要或預設值有效,則可以省略每個欄位。

我們可以選擇使用連線字串連線 psql,而不是使用我們之前示例中使用的選項:

psql postgresql://myapplicationuser:mypass@myhost:1234/applicationdb

psql 工具可以使用這兩種格式中的任何一種,因此請使用您喜歡的一種。您可能遇到的其他工具或庫可能會傾向於讓您更多地依賴其中一種。

調整 PostgreSQL 伺服器的認證配置

如果您想修改控制使用者如何認證到 PostgreSQL 例項的規則,可以透過修改伺服器的配置來實現。您可以在本文中瞭解如何修改 PostgreSQL 的認證配置

總結

在本指南中,我們從客戶端角度介紹了 PostgreSQL 認證。我們演示瞭如何使用 psql 命令列客戶端透過多種方法連線到本地和遠端資料庫例項。

在開始使用資料庫系統時,瞭解如何連線各種 PostgreSQL 例項至關重要。您可能執行本地 PostgreSQL 例項進行開發,該例項不需要任何特殊認證,但您的預生產和生產資料庫幾乎肯定需要認證。能夠在兩種情況下進行認證將使您能夠很好地在不同環境中工作。

作者簡介
Justin Ellingwood

賈斯汀·埃林伍德(Justin Ellingwood)

賈斯汀自 2013 年以來一直撰寫關於資料庫、Linux、基礎設施和開發者工具的文章。他目前與妻子和兩隻兔子住在柏林。他通常不需要以第三人稱寫作,這讓所有相關方都鬆了一口氣。
© . This site is unofficial and not affiliated with Prisma Data, Inc.