PostgreSQL 有一个单独的命令行工具psql,该工具已经使用了几十年,并且包含在任何 PostgreSQL 安装中。许多 PostgreSQL 的长期用户、开发人员和管理员都依赖它来帮助他们快速连接到数据库、检查模式和执行 SQL 查询。
了解如何安装和使用基本psql命令是任何连接到 PostgreSQL 的人都必须具备的基本技能。
一、安装psql
命令行 (CLI)工具 psql 在 Linux、MacOS 和 Windows 上可用。它预先捆绑在 PostgreSQL 服务器安装包中,也可以作为独立的 CLI 应用程序进行安装。
此外,psql与 PostgreSQL 一起进行版本控制,因为它在您使用元命令运行的查询需要使用较新的目录模式。
二、检查psql
因为 psql 与 PostgreSQL 服务器捆绑在一起,所以如果您曾经安装过PostgreSQL,则您的计算机上可能已经可以使用它。在终端或 Windows 命令提示符下键入以下内容:
$> psql --version2
psql (PostgreSQL) 15.0 (Ubuntu 15.0-1.pgdg20.04+1)
如果您看到列出psql版本信息,那么说明您已经安装了psql。如果版本较旧,请考虑更新它。
一个好的经验是尝试拥有一个与PostgreSQL 相匹配的psql版本。对于我们在下面介绍的基本命令,您拥有的任何版本很可能都可以使用,但保持psql更新是一个值得遵循的好习惯。
三、在Linux上安装
所有主要的 Linux 发行版都应该有postgresql-client., 这可用于仅安装服务器以外的 PostgreSQL 工具,包括psql、pg_dump、 pg_restore等工具。
我们将使用 Ubuntu 作为示例,但是您的发行版的包管理器应该具有相同(或非常相似)的包名称来执行相同的操作。下面的命令将安装最新版本的工具。
在终端提示符下,运行以下命令:
$> sudo apt-get update
$> sudo apt-get install postgresql-client
完成后,psql如前所示通过检查版本来验证安装。
四、Dockers
最后,如果我没有提到 Docker 作为替代方案,那我就是失职了。通过交互式 Docker shell,可以使用任何官方 PostgreSQL 容器来连接和使用psql. 无论您是尝试连接到 Docker 实例本身上的 PostgreSQL 还是远程连接,psql都可以使用已安装的应用程序(假设网络设置正确)。
例如,以下命令可用于下载和启动 PostgreSQL Docker 容器,连接到正在运行的 shell,并在容器内部使用psql。
ryan@redgate-laptop:~$ docker run --name pg15 -p 5432:5432 -e POSTGRES_PASSWORD=password -d postgres
ryan@redgate-laptop:~$ docker exec -it pg15 bash
root@80049acea1c0:/# psql -h localhost -U postgres
五、连接到PostgreSQL
安装后,psql有两种方法可以指定目标数据库的基本连接参数。您将需要以下信息来连接到 PostgreSQL。
1、主机名
2、端口(默认为 5432)
3、用户名
4、密码
5、数据库名称
六、指定个别参数
有了以上信息,使用这些参数连接到数据库。如果 PostgreSQL 服务器在默认端口 5432 上运行,您可以省略-p开关,psql将自动尝试连接到该端口。
psql -h [hostname] -p [port] -U [username] -d [database name]
如果所有信息都正确,系统将提示您输入密码。使用单独的参数连接到PostgreSQL时,无法在命令行上提供密码。您将始终收到提示,或者您可以在文件中.pgpass指定它。
使用 PostgreSQL 连接 URI
或者,您可以使用连接参数创建 PostgreSQL 连接 URI 以连接到数据库。
psql postgresql://[username]:[password]@[hostname]:[port]/[database name]
使用这种形式,您可以在连接字符串中指定密码,只要它不包含分号 ; 或 @ 符号,因为它们会干扰连接
URI 解析。如果省略密码,PostgreSQL 会提示您。
七、结论
命令行psql是任何使用 PostgreSQL 的人的首选工具。凭借数十年的发展和数百个内置的元命令来帮助开发人员和管理员快速高效地使用 PostgreSQL,知道如何安装和使用它来连接数据库是 PostgreSQL 用户的一项基本技能。