PostgreSQL 13 安装与配置全指南:从零搭建高性能数据库环境 📅 2026/8/12 13:22:09 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发行版中我主要推荐两个系列基于Debian/Ubuntu的系统如Ubuntu 20.04 LTS、Debian 10/11。它们的包管理工具apt用起来非常顺手软件源中的PostgreSQL版本更新也比较及时。对于新手来说Ubuntu的文档和社区资源极其丰富。基于RHEL/CentOS/Fedora的系统如CentOS 7/8虽然CentOS 8已停止维护但仍有大量存量、Rocky Linux 8、AlmaLinux 8或Fedora。它们使用yum或dnf作为包管理器在企业环境中非常常见。本次演示我将以Ubuntu 20.04 LTS作为标准环境因为它在开发者和云平台中保有量极大步骤具有普适性。如果你用的是其他系统核心思路完全一致只是包管理命令apt换成yum或dnf和少量文件路径会有不同。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 postgresql13-main.service如果看到active (running)的字样说明服务正在运行。如果没有自动启动可以手动启动它sudo systemctl start postgresql13-main.service sudo systemctl enable postgresql13-main.service # 设置开机自启3.2 理解“数据库集群”初始化这里有一个非常重要的概念需要理解PostgreSQL安装完成后进行的“初始化”创建的是一个数据库集群Database Cluster而不是单个数据库。这里的“集群”并非指多台服务器的集群而是指单个PostgreSQL服务实例管理下的所有数据库的集合它们共享同一套配置、用户权限和底层存储结构。初始化过程主要做了以下几件事创建了一个名为postgres的超级用户对应操作系统用户也是postgres。创建了默认的数据库模板template0,template1。创建了第一个数据库名字也叫postgres。在指定的数据目录通常是/var/lib/postgresql/13/main下生成所有必要的系统表和文件结构。当你使用包管理工具安装时初始化过程通常是自动完成的数据目录也由包管理脚本预设好。这是最省心的方式。3.3 切换到PostgreSQL管理账户并验证PostgreSQL安装后出于安全考虑默认不允许直接用root账户或你的普通账户来管理数据库。它创建了一个专用的系统用户postgres。所有数据库文件和服务进程都归这个用户所有。要开始操作数据库我们需要切换到postgres用户sudo -i -u postgres执行这个命令后你的命令行提示符会改变表示你现在正以postgres用户的身份进行操作。接着启动PostgreSQL的交互式终端psql。psql是管理和查询PostgreSQL最核心的工具psql如果一切顺利你会看到类似以下的提示符表示你已经成功连接到了默认的postgres数据库psql (13.12 (Ubuntu 13.12-1.pgdg20.041)) Type help for help. postgres#在psql提示符下输入以下命令查看数据库版本确认安装的是13SELECT version();你会看到包含“PostgreSQL 13.x”的详细版本信息。输入\q并按回车可以退出psql再输入exit可以退出postgres用户身份回到你自己的用户。4. 基础安全配置与远程连接设置默认安装出于安全考虑配置比较保守。为了让其他机器能够访问或者使用图形化工具如DBeaver、pgAdmin连接我们需要进行一些调整。4.1 修改PostgreSQL用户密码默认的postgres数据库用户没有密码这显然不安全。首先我们为它设置一个强密码。 以postgres用户身份进入psqlsudo -u postgres psql在psql中执行以下SQL命令将YourStrongPassword123!替换成你自己的复杂密码ALTER USER postgres WITH PASSWORD YourStrongPassword123!;执行成功后输入\q退出。4.2 配置客户端认证pg_hba.confPostgreSQL使用pg_hba.confHost-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更安全。重要安全提示在生产环境中永远不要将all和0.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.conf或postgresql.conf后都需要重启PostgreSQL服务使配置生效sudo systemctl restart postgresql13-main.service重启后务必再次检查服务状态确保重启成功sudo systemctl status postgresql13-main.service5. 基本操作与日常管理入门安装配置好后我们来学习几个最常用的操作让你能立刻用起来。5.1 创建新数据库和用户永远不要直接使用超级用户postgres来运行你的应用程序。最佳实践是为每个应用创建专属的数据库和专属的用户。首先以postgres用户登录psqlsudo -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_ip、myappdb、myappuserpsql -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几个关键参数shared_buffers数据库服务器使用的共享内存缓冲区。通常设置为系统总内存的25%。对于4GB内存的机器可以设为1GB。shared_buffers 1GBeffective_cache_sizePostgreSQL查询规划器假设操作系统和数据库可以使用的磁盘缓存总量。可以设置为系统总内存的50%-75%。effective_cache_size 3GBwork_mem每个查询操作如排序、哈希表可以使用的内存。对于复杂查询或高并发场景需要调整。可以保守地从4MB开始。work_mem 4MBmaintenance_work_mem维护性操作如VACUUM, CREATE INDEX可用的内存。可以设得大一些比如256MB。maintenance_work_mem 256MBmax_connections最大并发连接数。默认100对于Web应用可能不够。可以适当提高但注意每个连接都会占用内存。设为200-300是一个常见的起点。max_connections 200修改完成后重启服务使配置生效sudo systemctl restart postgresql13-main.service7. 常见问题排查与解决实录即使按照步骤操作你也可能会遇到一些问题。这里记录了几个我过去常遇到的“坑”及其解决方法。7.1 连接被拒绝 (Connection refused)现象在客户端使用psql或应用程序连接时报错“Connection refused”或“Could not connect to server”。排查思路服务是否运行在服务器上执行sudo systemctl status postgresql确认服务状态。监听地址是否正确检查postgresql.conf中的listen_addresses是否包含服务器IP或‘*’。防火墙是否放行PostgreSQL默认使用5432端口。确保服务器防火墙如ufw或firewalld允许该端口。Ubuntu ufw:sudo ufw allow 5432/tcpCentOS firewalld:sudo firewall-cmd --permanent --add-port5432/tcp sudo firewall-cmd --reload认证规则是否允许仔细检查pg_hba.conf文件确认添加了对应客户端IP的规则并且认证方法如scram-sha-256正确。7.2 认证失败 (Authentication failed)现象连接时提示密码认证失败。排查思路密码是否正确确认输入的密码无误注意大小写。pg_hba.conf规则是否生效确认你修改的pg_hba.conf文件已保存并且重启了PostgreSQL服务。规则是按顺序匹配的确保你的规则没有被前面的规则覆盖。用户是否存在在服务器上以postgres用户登录psql执行\du查看用户列表确认你要连接的用户已创建。7.3 忘记postgres用户密码如果你完全无法用密码登录postgres用户可以临时修改认证方式。编辑pg_hba.conf找到针对本地postgres用户的行暂时将认证方法改为trustlocal all postgres trust重启PostgreSQL服务sudo systemctl restart postgresql现在无需密码即可登录sudo -u postgres psql在psql中修改密码ALTER USER postgres WITH PASSWORD ‘NewStrongPassword’;重要将pg_hba.conf中的trust改回scram-sha-256或md5然后再次重启服务。7.4 磁盘空间不足导致的问题PostgreSQL在运行中会产生日志WAL和临时文件。如果磁盘满了数据库可能会挂起甚至崩溃。监控空间定期检查数据库集群所在分区的使用情况df -h /var/lib/postgresql。清理日志可以配置日志轮转和清理策略在postgresql.conf中设置log_rotation_age和log_rotation_size。使用VACUUM对于频繁更新/删除的表定期执行VACUUM自动或手动可以回收存储空间。PostgreSQL 13的自动VACUUM已经相当高效但在负载低谷期手动执行VACUUM FULL此命令会锁表可以更彻底地回收空间。7.5 性能突然下降如果数据库突然变慢可以按以下步骤排查检查当前活动连接在psql中执行SELECT * FROM pg_stat_activity WHERE state ‘active’;查看是否有长时间运行的查询或阻塞。检查锁等待执行SELECT * FROM pg_locks WHERE granted false;查看是否有查询在等待锁。检查系统资源使用top或htop命令查看CPU、内存和IO使用情况。数据库性能瓶颈常常在磁盘IO。分析慢查询启用慢查询日志在postgresql.conf中设置log_min_duration_statement例如设为1000毫秒然后分析日志中记录的慢SQL进行优化。安装和配置只是第一步要让PostgreSQL在你的项目中稳定高效地运行还需要结合具体的应用场景进行持续的监控、备份和优化。建议你熟悉pg_dump/pg_dumpall进行逻辑备份了解基于时间点恢复PITR的概念并逐步探索复制、分区等高级特性。PostgreSQL的官方文档非常出色是你遇到问题时最好的老师。