跳至主要内容

连接到 PostgreSQL 数据库

介绍

使用 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 实例进行开发,但您的暂存和生产数据库几乎肯定需要身份验证。能够在任何情况下进行身份验证将使您能够在不同的环境中良好工作。

© . This site is unofficial and not affiliated with Prisma Data, Inc.