簡介
使用 PostgreSQL 資料庫時,您首先需要考慮的事情之一是如何連線和互動。這需要在資料庫用戶端(您用來與資料庫互動的組件)和資料庫伺服器(實際的 PostgreSQL 實例,用於儲存、組織和提供對您資料的存取)之間進行協調。
因此,您需要了解如何以用戶端身分連線,並提供所需的資訊以進行身份驗證。在本指南中,我們將介紹如何使用原生 psql
命令列用戶端(與資料庫實例互動最常見且最有用的方式之一)連線到 PostgreSQL 資料庫。
在配套指南中,您可以了解如何設定 PostgreSQL 的身份驗證以滿足您專案的需求。請考慮閱讀這兩個指南,以更完整地了解 PostgreSQL 中的身份驗證運作方式。
如果您的資料庫用戶端或函式庫要求連線 URI,您可能需要查看我們關於了解 PostgreSQL 連線 URI 的指南。
關於 psql
用戶端的基本資訊
psql
用戶端是 PostgreSQL 的原生命令列用戶端,可以連線到資料庫實例以提供互動式會話或將命令傳送至伺服器。在實作您的初始設定並將基本配置就定位後,在透過應用程式函式庫與資料庫互動之前,它尤其有用。此外,psql
非常適合在開發您的程式將使用的存取模式時進行互動式探索或臨時查詢。
連線方式取決於 PostgreSQL 伺服器的配置以及可用於驗證帳戶的選項。在以下各節中,我們將介紹一些基本連線選項。為了清楚起見,我們將區分本機連線和遠端連線
- 本機連線:用戶端和 PostgreSQL 實例位於同一伺服器上的連線
- 遠端連線:用戶端連線到在不同電腦上執行的網路可存取 PostgreSQL 實例
讓我們從從同一部電腦連線到資料庫開始。
使用 psql
連線到本機資料庫
不帶任何引數,psql
命令會嘗試連線到 Unix socket 檔案以存取本機資料庫。它會使用您的作業系統使用者名稱作為您嘗試連線的 PostgreSQL 使用者名稱和資料庫名稱。
預設情況下,現代版本的 PostgreSQL 配置為稱為 對等身份驗證 的功能。對等身份驗證會在存在與使用者作業系統使用者名稱相符的有效 PostgreSQL 使用者時自動驗證使用者。
因此,如果您目前的使用者是本機資料庫上的有效 PostgreSQL 使用者,您可以透過輸入以下內容進行連線
psql
但是,您的正常作業系統使用者名稱不太可能已經有相關聯的 PostgreSQL 使用者名稱。因此,通常您需要使用已經有相關聯 PostgreSQL 角色的作業系統使用者名稱登入 PostgreSQL。
預設情況下,PostgreSQL 的超級使用者或管理員帳戶稱為 postgres
。安裝後,也會在作業系統上建立一個名為 postgres
的使用者。因此,要以 postgres
使用者身分登入 PostgreSQL,您需要以 postgres
作業系統使用者身分連線。有很多方法可以做到這一點。
在大多數系統上,以 postgres
使用者身分取得 shell 的最簡單方法是使用 sudo
命令。要為 postgres
使用者開啟 shell 會話,然後登入資料庫,您可以輸入
sudo --login --user=postgrespsql
如果您不需要以 postgres
使用者身分執行任何其他 shell 命令,您也可以直接以 postgres
使用者身分執行 psql
命令。這會讓您立即登入 PostgreSQL 會話,而不是先進入 shell
sudo --login --user=postgres psql
這些方法中的任何一種都應該允許您登入 postgres
PostgreSQL 使用者帳戶。
連線到遠端資料庫
由於安全原因以及對本機 socket 檔案的依賴,對等身份驗證不能用於遠端連線。相反,使用者需要使用其他方法登入。
可用的身份驗證方法因 PostgreSQL 實例的配置而異。不過,最常見的是,您將能夠透過提供以下資訊進行身份驗證
選項 | 描述 |
---|---|
hostname | 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
按下 Enter 鍵後,系統會提示您輸入密碼,您可以在其中使用 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 實例,但您的暫存和生產環境中的資料庫幾乎肯定需要身份驗證。能夠在任一情況下進行身份驗證將使您能夠在不同的環境中良好地工作。
PostgreSQL 資料庫連接器可以幫助您從 JavaScript 和 TypeScript 應用程式管理 PostgreSQL 資料庫。了解如何將 Prisma 新增到現有專案,或如何從頭開始使用 Prisma。