如何在 Ubuntu 上安装 PostgreSQL
引言
PostgreSQL,通常简称为 Postgres,是一个强大的开源对象关系数据库系统。经过30多年的积极开发,PostgreSQL 以其可靠性、功能强大和性能卓越而赢得了良好的声誉。
在 Ubuntu 上安装 PostgreSQL 是许多开发者和数据库管理员的热门选择,原因如下:
-
兼容性: Ubuntu 作为最广泛使用的 Linux 发行版之一,与 PostgreSQL 有极佳的兼容性。
-
性能: Ubuntu 的高效性与 PostgreSQL 强大的架构相结合,可实现高性能的数据库操作。
-
安全性: Ubuntu 和 PostgreSQL 都以强大的安全特性而闻名,使这种组合非常适合处理敏感数据。
-
社区支持: Ubuntu 和 PostgreSQL 都拥有庞大而活跃的社区,确保在需要时能够轻松获得帮助。
-
免费开源: 两个系统都是免费使用和开源的,允许进行经济高效的部署,并在需要时进行定制。
本指南将引导您完成在 Ubuntu 系统上安装 PostgreSQL 的过程,从准备工作到基本使用。无论您是在搭建开发环境还是准备生产服务器,本教程都将为您提供在 Ubuntu 上启动和运行 PostgreSQL 所需的必要步骤。
前提条件
在开始安装过程之前,确保您的系统满足必要的要求并且您拥有适当的权限是很重要的。让我们来看看前提条件:
Ubuntu 系统要求
-
Ubuntu 版本: 本指南适用于 Ubuntu 20.04 LTS (Focal Fossa) 及更新版本。然而,为了稳定性,建议使用最新的长期支持(LTS)版本。
-
系统资源: PostgreSQL 可以在资源有限的系统上运行,但为了获得最佳性能,请考虑以下建议:
- CPU: 1 GHz 或更快的处理器
- 内存: 至少 1 GB (生产环境建议 4 GB 或更多)
- 存储: PostgreSQL 安装需要 512 MB,外加数据库所需的额外空间
-
网络连接: 您需要有活跃的网络连接来下载 PostgreSQL 及其依赖项。
用户权限
要安装 PostgreSQL,您需要在 Ubuntu 系统上拥有 sudo 权限。这意味着您应该以 root 用户身份登录,或拥有可以使用 sudo 执行 root 权限命令的账户。
要检查您的用户是否拥有 sudo 权限,可以在终端中运行以下命令:
sudo -v
如果系统提示您输入密码,且命令执行时没有出现错误,则表示您的用户拥有 sudo 权限。
终端访问
由于我们将使用终端进行大部分安装和配置过程,您应该熟悉使用命令行界面(CLI)。
备份数据
如果您要在已有重要数据的系统上安装 PostgreSQL,在进行任何重大软件安装之前,最好先备份您的数据。
更新系统
在安装 PostgreSQL 之前,确保您的 Ubuntu 系统是最新的非常重要。这一步骤很重要,原因如下:
- 安全性: 更新通常包含重要的安全补丁。
- 稳定性: 最新的更新可以修复 bug 并提高系统稳定性。
- 兼容性: 拥有最新的软件包可以防止在 PostgreSQL 安装过程中出现潜在的兼容性问题。
更新 Ubuntu 的步骤
按照以下步骤更新您的 Ubuntu 系统:
-
打开终端。您可以按
Ctrl + Alt + T
或在 Ubuntu 仪表板中搜索"终端"来完成此操作。 -
首先,更新用于升级和新软件包安装的软件包列表。运行以下命令:
sudo apt update
此命令刷新可用软件包及其版本的列表,但不会安装或升级任何软件包。
-
更新完成后,将已安装的软件包升级到最新版本:
sudo apt upgrade
此命令将显示即将升级的软件包列表。按 'Y' 然后按 'Enter' 确认并继续升级。
-
可选地,您可以运行完整的系统升级,这也会智能地处理新版本软件包的依赖关系变化:
sudo apt full-upgrade
使用此命令时要谨慎,因为它可能会在需要时删除一些软件包以升级其他软件包。
-
升级过程完成后,最好重启系统以确保所有更新都正确应用:
sudo reboot
验证更新
系统重启后,您可以通过检查 Ubuntu 版本来验证更新是否成功:
lsb_release -a
此命令将显示有关您的 Ubuntu 发行版的信息,包括版本号。
添加 PostgreSQL 仓库
虽然 PostgreSQL 在 Ubuntu 的默认仓库中可用,但通常不是最新版本。为确保我们安装最新的稳定版 PostgreSQL,我们将向系统添加官方 PostgreSQL 仓库。
为什么要添加官方 PostgreSQL 仓库?
- 最新版本: 官方仓库提供最新版本的 PostgreSQL。
- 及时更新: 通过官方仓库可以更快获得安全补丁和 bug 修复。
- 一致性: 使用官方仓库确保 PostgreSQL 及其扩展之间的兼容性。
添加 PostgreSQL 仓库的步骤
按照以下步骤将 PostgreSQL 仓库添加到您的 Ubuntu 系统:
-
首先,我们需要添加 PostgreSQL 签名密钥。这个密钥用于验证我们即将安装的软件包的真实性。运行以下命令:
sudo apt-get install wget ca-certificates wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
-
接下来,我们需要将 PostgreSQL 仓库添加到系统的源列表中。在
/etc/apt/sources.list.d/
目录中创建一个名为pgdg.list
的新文件:sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
此命令创建一个包含仓库信息的新文件。
$(lsb_release -cs)
部分会自动检测您的 Ubuntu 版本并插入正确的代号。 -
添加仓库后,再次更新软件包列表以包含新添加的 PostgreSQL 仓库:
sudo apt update
验证仓库添加
要验证 PostgreSQL 仓库是否已成功添加,您可以检查 pgdg.list
文件的内容:
cat /etc/apt/sources.list.d/pgdg.list
您应该看到类似以下的一行:
deb http://apt.postgresql.org/pub/repos/apt focal-pgdg main
(注意: "focal" 可能会被替换为您的 Ubuntu 版本代号)
安装 PostgreSQL
现在我们已经添加了 PostgreSQL 仓库并更新了系统,我们准备安装 PostgreSQL 了。这个过程很简单,只需几个简单的命令就可以完成。
安装 PostgreSQL 的命令
我们将使用 apt
包管理器来安装 PostgreSQL。以下是安装最新版 PostgreSQL 及一个常用扩展的命令:
sudo apt install postgresql postgresql-contrib
让我们来解析这个命令:
postgresql
: 这是 PostgreSQL 的核心包。postgresql-contrib
: 这个包包含一些不属于核心 PostgreSQL 系统但经常有用的额外实用程序和功能。
在安装过程中,系统可能会提示您确认安装。如果出现提示,输入 'Y' 并按 Enter 键继续。
验证安装
安装完成后,重要的是要验证 PostgreSQL 是否正确安装并运行。以下是几种验证方法:
-
检查 PostgreSQL 版本:
psql --version
这应该显示已安装的 PostgreSQL 版本。
-
检查 PostgreSQL 服务的状态:
sudo systemctl status postgresql
您应该看到指示服务处于活动(运行)状态的输出。
-
验证 PostgreSQL 是否在监听连接:
sudo ss -tunelp | grep 5432
此命令检查 PostgreSQL 是否在其默认端口(5432)上监听。如果 PostgreSQL 正常运行,您应该看到输出。
PostgreSQL 初始设置
当您在 Ubuntu 上安装 PostgreSQL 时,它会自动创建一个名为 postgres
的新用户账户。这个账户与默认的 Postgres 角色相关联。要使用这个账户与 PostgreSQL 交互,您可以这样切换:
sudo -i -u postgres
然后,您可以通过输入以下命令访问 PostgreSQL 提示符:
psql
这将使您登录到 PostgreSQL 提示符,您会看到类似这样的内容:
psql (13.x)
输入 "help" 来获取帮助。
postgres=#
要退出 PostgreSQL 提示符,输入:
\q
要返回到您的常规用户账户,只需输入:
exit
恭喜! 您已经成功在 Ubuntu 系统上安装了 PostgreSQL。在下一节中,我们将介绍如何根据您的需求配置 PostgreSQL。
配置 PostgreSQL
安装 PostgreSQL 后,根据您的需求正确配置它很重要。本节将介绍创建新数据库、设置新用户以及配置身份验证方法。
创建新数据库
默认情况下,PostgreSQL 创建一个名为 postgres
的数据库。然而,为您的项目创建单独的数据库是一个好习惯。以下是创建新数据库的方法:
-
切换到 postgres 用户:
sudo -i -u postgres
-
访问 PostgreSQL 提示符:
psql
-
使用 CREATE DATABASE 命令创建新数据库:
CREATE DATABASE myproject;
将
myproject
替换为您想要的数据库名称。 -
您可以使用以下命令验证数据库创建:
\l
这将列出所有数据库。
设置新用户
建议为每个应用程序创建一个新用户,而不是使用默认的 postgres 超级用户。方法如下:
-
在 psql 提示符下,创建一个新用户:
CREATE USER myuser WITH PASSWORD 'mypassword';
将
myuser
和mypassword
替换为您想要的用户名和密码。 -
授予新用户对新数据库的权限:
GRANT ALL PRIVILEGES ON DATABASE myproject TO myuser;
-
您可以使用以下命令验证用户创建:
\du
这将列出所有用户及其角色。
配置身份验证方法
PostgreSQL 使用不同的身份验证方法,这些方法在 pg_hba.conf
文件中配置。以下是修改它的方法:
-
退出 PostgreSQL 提示符:
\q
-
用文本编辑器打开
pg_hba.conf
文件(您可能需要 sudo 权限):sudo nano /etc/postgresql/13/main/pg_hba.conf
注意: 如果版本号不同,请将
13
替换为您的 PostgreSQL 版本号。 -
该文件包含决定用户如何进行身份验证的行。典型配置可能如下所示:
# TYPE DATABASE USER ADDRESS METHOD local all postgres peer local all all md5 host all all 127.0.0.1/32 md5 host all all ::1/128 md5
local
表示通过 Unix 域套接字连接host
表示通过 TCP/IP 连接md5
表示密码认证peer
表示系统用户名直接映射到 PostgreSQL 用户名
-
修改后,保存文件并退出编辑器。
-
重启 PostgreSQL 使更改生效:
sudo systemctl restart postgresql
请记住,这些是基本配置。根据您的具体需求,特别是在安全性至关重要的生产环境中,您可能需要进一步调整设置。
基本 PostgreSQL 命令
现在我们已经安装并配置了 PostgreSQL,让我们探索一些基本命令,这些命令将帮助您与数据库交互。这些命令对于管理数据库、表格和执行基本操作至关重要。
连接到 PostgreSQL
-
以 postgres 用户身份连接:
sudo -i -u postgres
-
启动 PostgreSQL 交互式终端:
psql
-
连接到特定数据库:
psql -d myproject
将
myproject
替换为您的数据库名称。
数据库操作
-
列出所有数据库:
\l
-
连接到特定数据库:
\c myproject
-
创建新数据库:
CREATE DATABASE newdb;
-
删除数据库:
DROP DATABASE newdb;
表格操作
-
列出当前数据库中的表格:
\dt
-
创建新表格:
CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(100), email VARCHAR(100) UNIQUE NOT NULL );
-
描述表格结构:
\d users
-
删除表格:
DROP TABLE users;
基本查询示例
-
向表格插入数据:
INSERT INTO users (name, email) VALUES ('张三', '[email protected]');
-
从表格中选择所有数据:
SELECT * FROM users;
-
更新表格中的数据:
UPDATE users SET name = '李四' WHERE id = 1;
-
从表格中删除数据:
DELETE FROM users WHERE id = 1;
其他有用的命令
-
显示 PostgreSQL 版本:
SELECT version();
-
列出所有用户及其角色:
\du
-
显示当前用户和数据库:
\conninfo
-
从文件执行命令:
\i filename.sql
-
退出 psql:
\q
请记住,这些只是基本命令,可以帮助您入门。PostgreSQL 提供了广泛的高级功能和命令,用于更复杂的操作和优化。
维护 PostgreSQL
正确维护您的 PostgreSQL 安装对于确保最佳性能、数据完整性和安全性至关重要。本节涵盖了一些您应该熟悉的基本维护任务。
启动和停止 PostgreSQL 服务
-
启动 PostgreSQL 服务:
sudo systemctl start postgresql
-
停止 PostgreSQL 服务:
sudo systemctl stop postgresql
-
重启 PostgreSQL 服务:
sudo systemctl restart postgresql
-
检查 PostgreSQL 服务的状态:
sudo systemctl status postgresql
备份和恢复数据库
定期备份您的数据库对于数据保护至关重要。PostgreSQL 提供了几种备份和恢复方法。
创建备份
-
备份单个数据库:
pg_dump dbname > dbname.sql
-
备份所有数据库:
pg_dumpall > all_databases.sql
从备份恢复
-
恢复单个数据库:
psql dbname < dbname.sql
-
恢复所有数据库:
psql -f all_databases.sql postgres
更新 PostgreSQL
保持 PostgreSQL 更新对于安全性和性能很重要。以下是更新方法:
-
更新软件包列表:
sudo apt update
-
升级 PostgreSQL:
sudo apt upgrade postgresql postgresql-contrib
监控 PostgreSQL
-
检查活动连接:
SELECT * FROM pg_stat_activity;
-
监控数据库大小:
SELECT pg_size_pretty(pg_database_size('dbname'));
-
检查表格大小:
SELECT relname, pg_size_pretty(pg_total_relation_size(relid)) FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC;
清理和分析
PostgreSQL 使用 MVCC(多版本并发控制),这可能导致表格和索引膨胀。VACUUM 命令有助于管理这个问题:
-
清理特定表格:
VACUUM tablename;
-
清理和分析(更新统计信息)数据库:
VACUUM ANALYZE;
-
对于自动清理,确保在 postgresql.conf 文件中启用了 autovacuum:
autovacuum = on
日志管理
PostgreSQL 日志可以提供宝贵的信息,用于故障排除和性能调优:
-
查找日志文件位置:
SHOW log_directory; SHOW log_filename;
-
您可以在 postgresql.conf 文件中修改日志设置,以调整记录的内容和方式。
请记住,这些是基本的维护任务。对于生产环境,您可能需要更高级的策略,包括设置复制、负载均衡和实施更复杂的备份和监控解决方案。
常见问题解决
即使经过仔细的设置和维护,您也可能遇到 PostgreSQL 安装的问题。以下是一些常见问题及其解决方案:
权限问题
-
问题: 尝试访问 PostgreSQL 时出现"权限被拒绝"错误。
解决方案:
- 确保用户拥有必要的权限:
sudo -i -u postgres createuser --interactive
- 授予用户必要的权限:
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
- 确保用户拥有必要的权限:
-
问题: 无法使用 Ubuntu 用户访问 PostgreSQL。
解决方案:
- 创建一个与 Ubuntu 用户同名的 PostgreSQL 角色:
sudo -u postgres createuser --interactive
- 创建一个与 Ubuntu 用户同名的 PostgreSQL 角色:
连接问题
-
问题: "连接被拒绝"错误。
解决方案:
- 检查 PostgreSQL 是否正在运行:
sudo systemctl status postgresql
- 如果没有运行,启动它:
sudo systemctl start postgresql
- 确保 PostgreSQL 在
postgresql.conf
中监听正确的地址:listen_addresses = 'localhost' # 或 '*' 表示所有接口
- 检查 PostgreSQL 是否正在运行:
-
问题: 无法远程连接。
解决方案:
- 修改
pg_hba.conf
以允许远程连接:host all all 0.0.0.0/0 md5
- 更新
postgresql.conf
:listen_addresses = '*'
- 重启 PostgreSQL:
sudo systemctl restart postgresql
- 修改
版本冲突
-
问题: PostgreSQL 版本与已安装的扩展不兼容。
解决方案:
- 检查 PostgreSQL 版本:
psql --version
- 确保扩展兼容。您可能需要升级扩展:
ALTER EXTENSION extension_name UPDATE TO 'new_version';
- 检查 PostgreSQL 版本:
性能问题
-
问题: 查询速度慢或整体性能差。
解决方案:
- 使用 EXPLAIN ANALYZE 了解查询执行情况:
EXPLAIN ANALYZE SELECT * FROM large_table WHERE condition;
- 确保适当的索引:
CREATE INDEX idx_name ON table_name (column_name);
- 调整
postgresql.conf
中的 PostgreSQL 配置参数:shared_buffers = 256MB effective_cache_size = 768MB
- 使用 EXPLAIN ANALYZE 了解查询执行情况:
-
问题: 数据库膨胀导致性能下降。
解决方案:
- 定期运行 VACUUM 和 ANALYZE:
VACUUM ANALYZE;
- 考虑设置 autovacuum 进行自动维护。
- 定期运行 VACUUM 和 ANALYZE:
磁盘空间问题
-
问题: 磁盘空间不足。
解决方案:
- 识别大型表格和索引:
SELECT relname, pg_size_pretty(pg_total_relation_size(relid)) FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC;
- 删除不必要的数据或归档旧数据。
- 考虑对非常大的表格进行分区。
- 识别大型表格和索引:
请记住,这些是一般解决方案。具体步骤可能因您的特定 PostgreSQL 版本和系统配置而异。在对数据库或其配置进行重大更改之前,请务必备份您的数据。
常见问题解答(FAQ)
问: 如何查看我正在运行的 PostgreSQL 版本?
答: 您可以在终端中使用以下命令:
psql --version
或者,如果您已经在 psql 提示符下:
SELECT version();
问: 我可以在同一个 Ubuntu 系统上安装多个版本的 PostgreSQL 吗?
答: 是的,可以安装多个版本。但是,您需要仔细管理端口和数据目录以避免冲突。
问: 如何更改 PostgreSQL 用户密码?
答: 您可以使用以下 SQL 命令更改密码:
ALTER USER username WITH PASSWORD '新密码';
问: 如何启用对我的 PostgreSQL 服务器的远程访问?
答: 您需要修改 postgresql.conf
和 pg_hba.conf
文件。在 postgresql.conf
中,设置 listen_addresses = '*'
,在 pg_hba.conf
中,添加一行如 host all all 0.0.0.0/0 md5
。记得在进行这些更改后重启 PostgreSQL。
问: PostgreSQL 中 TRUNCATE 和 DELETE 有什么区别?
答: TRUNCATE 更快,因为它移除表中的所有行而不逐个扫描它们。DELETE 一行一行地删除,并在事务日志中记录删除操作。TRUNCATE 还会重置序列,并且不会触发 DELETE 触发器。
问: 如何提高 PostgreSQL 的性能?
答: 提高性能的一些方法包括:
- 适当的索引
- 定期 VACUUM 和 ANALYZE
- 优化查询
- 调整 PostgreSQL 配置参数
- 升级硬件(特别是增加内存)