简介
使用 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=postgrespsql
如果您不需要以 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
按 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。