PostgreSQL 13 安装与配置全指南:从零搭建高性能数据库环境
2026/8/12 13:22:05 网站建设 项目流程

1. 项目概述:为什么PostgreSQL 13值得你花时间安装?

如果你正在寻找一个功能强大、开源且完全免费的关系型数据库,PostgreSQL(常被简称为Postgres)几乎总是那个最靠谱的答案。我接触过不少数据库,从MySQL到一些商业产品,但PostgreSQL在数据完整性、功能丰富性和标准遵循度上,一直给我留下深刻印象。今天要聊的PostgreSQL 13,虽然已经不是最新的版本,但它是一个非常重要的长期支持(LTS)版本,在性能、管理和开发体验上带来了许多实质性的改进。对于大多数生产环境和新项目来说,它依然是一个非常稳定和优秀的选择。

简单来说,安装PostgreSQL 13,就是为你未来的应用搭建一个坚实、可靠且“聪明”的数据基石。它能做什么?从支撑一个简单的个人博客,到处理复杂的金融交易、地理空间数据,甚至作为JSON文档存储,它都能胜任。无论你是刚入门数据库的开发者,还是需要为团队搭建一套新环境的运维,这篇从零开始的安装指南,都会手把手带你走完整个过程,并分享一些只有踩过坑才知道的实用技巧。

2. 安装前的核心考量与环境准备

在真正动手敲命令之前,花几分钟理清思路和准备环境,能避免后面90%的麻烦。安装数据库不是简单地运行一个安装程序,它关乎到后续的稳定运行、数据安全以及维护便利性。

2.1 系统平台选择:Linux发行版是首选

PostgreSQL可以运行在Windows、macOS和各种Linux发行版上。但从我的经验来看,对于生产环境和大多数学习、开发场景,Linux发行版是毫无疑问的首选。原因有几个:首先,PostgreSQL在Linux上的生态最完善,社区支持最好,遇到问题更容易找到解决方案。其次,Linux系统本身在稳定性、资源管理和安全性方面更适合长期运行服务。最后,绝大多数关于PostgreSQL的优化、运维知识,都是基于Linux环境的。

在Linux发行版中,我主要推荐两个系列:

  1. 基于Debian/Ubuntu的系统:如Ubuntu 20.04 LTS、Debian 10/11。它们的包管理工具apt用起来非常顺手,软件源中的PostgreSQL版本更新也比较及时。对于新手来说,Ubuntu的文档和社区资源极其丰富。
  2. 基于RHEL/CentOS/Fedora的系统:如CentOS 7/8(虽然CentOS 8已停止维护,但仍有大量存量)、Rocky Linux 8、AlmaLinux 8或Fedora。它们使用yumdnf作为包管理器,在企业环境中非常常见。

本次演示我将以Ubuntu 20.04 LTS作为标准环境,因为它在开发者和云平台中保有量极大,步骤具有普适性。如果你用的是其他系统,核心思路完全一致,只是包管理命令(apt换成yumdnf)和少量文件路径会有不同。

2.2 版本确认与仓库添加

Ubuntu 20.04 默认的软件源可能提供的是 PostgreSQL 12。我们需要添加PostgreSQL官方的软件仓库来安装版本13。使用官方仓库的好处是,你能确保获得经过充分测试的、纯净的安装包,并且未来可以无缝接收安全更新和错误修复。

首先,更新本地软件包索引,这是一个好习惯:

sudo apt update

接着,安装用于通过HTTPS访问仓库的依赖包:

sudo apt install wget curl gnupg2 -y

然后,导入PostgreSQL官方签名密钥,这能确保你下载的软件包未被篡改:

sudo curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /usr/share/keyrings/postgresql-keyring.gpg

最后,将PostgreSQL 13的官方仓库添加到你的系统源列表。这里我们为Ubuntu 20.04 (Focal)添加源:

echo "deb [signed-by=/usr/share/keyrings/postgresql-keyring.gpg] http://apt.postgresql.org/pub/repos/apt focal-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list

注意:上面的命令是针对focal(即Ubuntu 20.04)的。如果你的系统是其他版本,需要替换代号,例如Ubuntu 22.04是jammy。你可以通过命令lsb_release -cs查看你的系统代号。

添加完成后,再次更新软件包列表,让系统识别新加的仓库:

sudo apt update

现在,你的系统就已经准备好安装PostgreSQL 13了。

3. 核心安装步骤与初始化详解

准备工作就绪,现在进入核心安装环节。这个过程分为安装软件、初始化数据库集群和启动服务三步。

3.1 执行安装命令

安装PostgreSQL 13服务器和客户端工具(psql等)以及一些常用的贡献模块:

sudo apt install postgresql-13 postgresql-client-13 -y

这个命令会自动处理所有依赖,包括所需的库文件。-y参数表示自动确认安装,避免中途需要手动输入‘Y’。

安装完成后,PostgreSQL服务应该已经自动启动,并且设置为开机自启。我们可以用以下命令验证:

sudo systemctl status postgresql@13-main.service

如果看到active (running)的字样,说明服务正在运行。如果没有自动启动,可以手动启动它:

sudo systemctl start postgresql@13-main.service sudo systemctl enable postgresql@13-main.service # 设置开机自启

3.2 理解“数据库集群”初始化

这里有一个非常重要的概念需要理解:PostgreSQL安装完成后进行的“初始化”,创建的是一个数据库集群(Database Cluster),而不是单个数据库。这里的“集群”并非指多台服务器的集群,而是指单个PostgreSQL服务实例管理下的所有数据库的集合,它们共享同一套配置、用户权限和底层存储结构。

初始化过程主要做了以下几件事:

  1. 创建了一个名为postgres的超级用户(对应操作系统用户也是postgres)。
  2. 创建了默认的数据库模板(template0,template1)。
  3. 创建了第一个数据库,名字也叫postgres
  4. 在指定的数据目录(通常是/var/lib/postgresql/13/main)下生成所有必要的系统表和文件结构。

当你使用包管理工具安装时,初始化过程通常是自动完成的,数据目录也由包管理脚本预设好。这是最省心的方式。

3.3 切换到PostgreSQL管理账户并验证

PostgreSQL安装后,出于安全考虑,默认不允许直接用root账户或你的普通账户来管理数据库。它创建了一个专用的系统用户postgres。所有数据库文件和服务进程都归这个用户所有。

要开始操作数据库,我们需要切换到postgres用户:

sudo -i -u postgres

执行这个命令后,你的命令行提示符会改变,表示你现在正以postgres用户的身份进行操作。

接着,启动PostgreSQL的交互式终端psqlpsql是管理和查询PostgreSQL最核心的工具:

psql

如果一切顺利,你会看到类似以下的提示符,表示你已经成功连接到了默认的postgres数据库:

psql (13.12 (Ubuntu 13.12-1.pgdg20.04+1)) Type "help" for help. postgres=#

psql提示符下,输入以下命令查看数据库版本,确认安装的是13:

SELECT version();

你会看到包含“PostgreSQL 13.x”的详细版本信息。输入\q并按回车可以退出psql,再输入exit可以退出postgres用户身份,回到你自己的用户。

4. 基础安全配置与远程连接设置

默认安装出于安全考虑,配置比较保守。为了让其他机器能够访问,或者使用图形化工具(如DBeaver、pgAdmin)连接,我们需要进行一些调整。

4.1 修改PostgreSQL用户密码

默认的postgres数据库用户没有密码,这显然不安全。首先,我们为它设置一个强密码。 以postgres用户身份进入psql

sudo -u postgres psql

psql中执行以下SQL命令(将YourStrongPassword123!替换成你自己的复杂密码):

ALTER USER postgres WITH PASSWORD 'YourStrongPassword123!';

执行成功后,输入\q退出。

4.2 配置客户端认证:pg_hba.conf

PostgreSQL使用pg_hba.conf(Host-Based Authentication)文件来控制哪些主机、哪些用户、通过哪种方式可以连接哪个数据库。这是安全配置的核心。

首先找到这个文件的位置,通常在/etc/postgresql/13/main/pg_hba.conf

sudo nano /etc/postgresql/13/main/pg_hba.conf

你会看到文件末尾有类似这样的行:

# IPv4 local connections: host all all 127.0.0.1/32 scram-sha-256 # IPv6 local connections: host all all ::1/128 scram-sha-256

默认只允许本地(127.0.0.1)连接。如果你想允许同一局域网内的其他机器连接(例如你的开发机IP是192.168.1.100),可以添加一行:

host all all 192.168.1.100/32 scram-sha-256

如果你想允许所有IP连接(仅建议用于测试环境或配合防火墙使用,生产环境务必限制IP),可以修改或添加:

host all all 0.0.0.0/0 scram-sha-256

这里的scram-sha-256是PostgreSQL 10以后推荐的强密码加密认证方式,比过去的md5更安全。

重要安全提示:在生产环境中,永远不要将all0.0.0.0/0组合使用。应该根据最小权限原则,指定具体的数据库、用户和客户端IP地址范围。例如:host myappdb appuser 192.168.1.0/24 scram-sha-256

4.3 配置监听地址:postgresql.conf

默认PostgreSQL只监听本地回环地址(localhost)。要接受远程连接,还需要修改监听地址。

打开主配置文件:

sudo nano /etc/postgresql/13/main/postgresql.conf

找到listen_addresses这一行。默认可能是:

#listen_addresses = 'localhost'

去掉注释,并将其值改为'*'(监听所有网络接口)或你的服务器具体IP。对于测试或内网环境,可以设为'*'

listen_addresses = '*'

4.4 应用配置并重启服务

每次修改了pg_hba.confpostgresql.conf后,都需要重启PostgreSQL服务使配置生效:

sudo systemctl restart postgresql@13-main.service

重启后,务必再次检查服务状态,确保重启成功:

sudo systemctl status postgresql@13-main.service

5. 基本操作与日常管理入门

安装配置好后,我们来学习几个最常用的操作,让你能立刻用起来。

5.1 创建新数据库和用户

永远不要直接使用超级用户postgres来运行你的应用程序。最佳实践是:为每个应用创建专属的数据库和专属的用户。

首先,以postgres用户登录psql

sudo -u postgres psql

创建新用户(例如,创建一个名为myappuser的用户,并设置密码):

CREATE USER myappuser WITH ENCRYPTED PASSWORD 'AnotherStrongPassword456!';

创建新数据库(例如,创建一个名为myappdb的数据库),并指定其所有者为我们刚创建的用户:

CREATE DATABASE myappdb OWNER myappuser;

授予权限:虽然数据库所有者默认有一些权限,但为了清晰,我们可以显式地授予所有权限:

GRANT ALL PRIVILEGES ON DATABASE myappdb TO myappuser;

现在,你的应用程序就可以使用myappuser用户和myappdb数据库进行连接了。

5.2 使用psql进行基本操作

psql功能非常强大,这里介绍几个最常用的元命令(以\开头的命令):

  • \l:列出所有数据库。
  • \c database_name:切换到另一个数据库,例如\c myappdb
  • \dt:列出当前数据库中的所有表(切换数据库后使用)。
  • \du:列出所有用户及其权限。
  • \q:退出psql。
  • \?:查看所有元命令帮助。
  • \h:查看SQL命令帮助,例如\h CREATE TABLE

5.3 启用远程连接后的测试

从另一台机器(客户端)测试连接。你需要安装PostgreSQL客户端工具。 在Ubuntu/Debian客户端上:

sudo apt install postgresql-client-13 -y

然后使用以下命令连接(替换your_server_ipmyappdbmyappuser):

psql -h your_server_ip -d myappdb -U myappuser -W

系统会提示你输入myappuser的密码。连接成功后,你就能够在远程管理数据库了。

6. 性能调优与配置要点初探

PostgreSQL默认配置是为了兼容各种硬件环境,性能比较保守。根据你的机器配置进行调整,可以获得显著的性能提升。主要修改的文件依然是postgresql.conf

警告:修改配置前,务必先备份postgresql.conf文件。调优没有银弹,最佳值取决于你的数据量、并发量和硬件(尤其是内存和磁盘IO)。以下建议适用于拥有4GB-8GB内存的虚拟机或独立服务器,用于中小型应用。

sudo cp /etc/postgresql/13/main/postgresql.conf /etc/postgresql/13/main/postgresql.conf.backup sudo nano /etc/postgresql/13/main/postgresql.conf

几个关键参数

  1. shared_buffers:数据库服务器使用的共享内存缓冲区。通常设置为系统总内存的25%。对于4GB内存的机器,可以设为1GB。

    shared_buffers = 1GB
  2. effective_cache_size:PostgreSQL查询规划器假设操作系统和数据库可以使用的磁盘缓存总量。可以设置为系统总内存的50%-75%。

    effective_cache_size = 3GB
  3. work_mem:每个查询操作(如排序、哈希表)可以使用的内存。对于复杂查询或高并发场景,需要调整。可以保守地从4MB开始。

    work_mem = 4MB
  4. maintenance_work_mem:维护性操作(如VACUUM, CREATE INDEX)可用的内存。可以设得大一些,比如256MB。

    maintenance_work_mem = 256MB
  5. max_connections:最大并发连接数。默认100,对于Web应用可能不够。可以适当提高,但注意每个连接都会占用内存。设为200-300是一个常见的起点。

    max_connections = 200

修改完成后,重启服务使配置生效:

sudo systemctl restart postgresql@13-main.service

7. 常见问题排查与解决实录

即使按照步骤操作,你也可能会遇到一些问题。这里记录了几个我过去常遇到的“坑”及其解决方法。

7.1 连接被拒绝 (Connection refused)

现象:在客户端使用psql或应用程序连接时,报错“Connection refused”或“Could not connect to server”。排查思路

  1. 服务是否运行?:在服务器上执行sudo systemctl status postgresql确认服务状态。
  2. 监听地址是否正确?:检查postgresql.conf中的listen_addresses是否包含服务器IP或‘*’
  3. 防火墙是否放行?:PostgreSQL默认使用5432端口。确保服务器防火墙(如ufwfirewalld)允许该端口。
    • Ubuntu ufw:sudo ufw allow 5432/tcp
    • CentOS firewalld:sudo firewall-cmd --permanent --add-port=5432/tcp && sudo firewall-cmd --reload
  4. 认证规则是否允许?:仔细检查pg_hba.conf文件,确认添加了对应客户端IP的规则,并且认证方法(如scram-sha-256)正确。

7.2 认证失败 (Authentication failed)

现象:连接时提示密码认证失败。排查思路

  1. 密码是否正确?:确认输入的密码无误,注意大小写。
  2. pg_hba.conf规则是否生效?:确认你修改的pg_hba.conf文件已保存,并且重启了PostgreSQL服务。规则是按顺序匹配的,确保你的规则没有被前面的规则覆盖。
  3. 用户是否存在?:在服务器上以postgres用户登录psql,执行\du查看用户列表,确认你要连接的用户已创建。

7.3 忘记postgres用户密码

如果你完全无法用密码登录postgres用户,可以临时修改认证方式。

  1. 编辑pg_hba.conf,找到针对本地postgres用户的行,暂时将认证方法改为trust
    local all postgres trust
  2. 重启PostgreSQL服务:sudo systemctl restart postgresql
  3. 现在无需密码即可登录:sudo -u postgres psql
  4. psql中修改密码:ALTER USER postgres WITH PASSWORD ‘NewStrongPassword’;
  5. 重要:将pg_hba.conf中的trust改回scram-sha-256md5,然后再次重启服务。

7.4 磁盘空间不足导致的问题

PostgreSQL在运行中会产生日志(WAL)和临时文件。如果磁盘满了,数据库可能会挂起甚至崩溃。

  • 监控空间:定期检查数据库集群所在分区的使用情况:df -h /var/lib/postgresql
  • 清理日志:可以配置日志轮转和清理策略,在postgresql.conf中设置log_rotation_agelog_rotation_size
  • 使用VACUUM:对于频繁更新/删除的表,定期执行VACUUM(自动或手动)可以回收存储空间。PostgreSQL 13的自动VACUUM已经相当高效,但在负载低谷期手动执行VACUUM FULL(此命令会锁表)可以更彻底地回收空间。

7.5 性能突然下降

如果数据库突然变慢,可以按以下步骤排查:

  1. 检查当前活动连接:在psql中执行SELECT * FROM pg_stat_activity WHERE state = ‘active’;查看是否有长时间运行的查询或阻塞。
  2. 检查锁等待:执行SELECT * FROM pg_locks WHERE granted = false;查看是否有查询在等待锁。
  3. 检查系统资源:使用tophtop命令查看CPU、内存和IO使用情况。数据库性能瓶颈常常在磁盘IO。
  4. 分析慢查询:启用慢查询日志(在postgresql.conf中设置log_min_duration_statement,例如设为1000毫秒),然后分析日志中记录的慢SQL,进行优化。

安装和配置只是第一步,要让PostgreSQL在你的项目中稳定高效地运行,还需要结合具体的应用场景进行持续的监控、备份和优化。建议你熟悉pg_dump/pg_dumpall进行逻辑备份,了解基于时间点恢复(PITR)的概念,并逐步探索复制、分区等高级特性。PostgreSQL的官方文档非常出色,是你遇到问题时最好的老师。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询