简介
在使用 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
按下回车键后,系统会提示您输入密码,您可以使用 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。