发布时间:2026/8/17 7:08:20
Ubuntu系统安装配置PostgreSQL 16完整指南:从零到生产环境部署 1. 项目概述为什么要在Ubuntu上安装PostgreSQL 16如果你正在搭建一个需要处理复杂查询、高并发事务或者对数据一致性要求极高的应用比如一个电商后台、一个内容管理系统或者一个数据分析平台那么数据库选型几乎绕不开PostgreSQL。它以其强大的功能、严格的标准遵循和活跃的社区生态被誉为“世界上最先进的开源关系数据库”。而PostgreSQL 16作为其最新的主要版本带来了一系列性能提升和新特性比如逻辑复制的并行应用、更精细的权限管理、以及查询性能的持续优化。对于追求稳定性和前沿特性的开发者或运维人员来说在Ubuntu这个最流行的Linux发行版之一上部署PG 16是一个既经典又紧跟技术潮流的组合。这篇内容就是为你准备的从零到一的完整指南。无论你是刚接触Linux和数据库的新手还是想升级现有环境的老手我都会带你走一遍最清晰、最稳妥的安装与配置流程。我们会从官方仓库安装确保获得稳定且易于维护的版本然后进行必要的安全加固和基础配置最后通过一个简单的测试确保一切就绪。整个过程我会穿插我踩过的坑和总结的经验让你不仅能“装上”更能“装好”理解每一步背后的考量。2. 安装前的系统准备与规划在动手安装任何服务之前充分的准备工作能避免后续很多麻烦。对于数据库这种核心服务尤其如此。2.1 系统环境确认与更新首先我们需要确认你的Ubuntu版本。PostgreSQL官方为不同的Ubuntu LTS长期支持版本提供了对应的仓库。主流的22.04 LTS (Jammy) 和 20.04 LTS (Focal) 都是很好的选择它们能获得长期的安全更新。你可以通过以下命令查看lsb_release -a输出会显示类似Ubuntu 22.04.3 LTS的信息。接下来更新系统的软件包列表并升级现有软件到最新版本这是一个好习惯可以确保系统基础组件的稳定性。sudo apt update sudo apt upgrade -y注意-y参数表示自动确认所有提示。在生产环境中建议先执行sudo apt upgrade查看将要升级的包列表确认无误后再进行升级。2.2 规划数据存储与运行用户数据库的核心是数据因此数据存储的位置至关重要。默认情况下PostgreSQL会将其数据目录称为PGDATA放在/var/lib/postgresql/[版本号]/main。你需要确保这个路径所在的磁盘有足够的空间。对于生产环境我强烈建议使用一块独立的、性能较好的磁盘如SSD并挂载到/var/lib/postgresql或一个自定义目录比如/pgdata。这能避免系统盘空间不足导致数据库崩溃也便于后续的备份和迁移。另一个关键点是运行用户。安装包会自动创建一个名为postgres的系统用户和用户组数据库进程将以这个用户的身份运行。这是出于安全考虑权限最小化原则。我们后续的所有管理操作很多都需要切换到postgres用户下进行。2.3 安装必要的辅助工具为了方便后续的调试和管理我们可以提前安装一些有用的工具sudo apt install -y wget curl gnupg lsb-releasewget/curl: 用于从网络下载文件比如添加仓库密钥。gnupg: 用于管理加密密钥验证软件包的来源。lsb-release: 我们刚才用到的命令用于获取系统版本信息。3. 通过官方仓库安装PostgreSQL 16Ubuntu的默认仓库可能不包含最新版本的PostgreSQL。为了安装PG 16我们需要添加PostgreSQL官方的APT仓库。这是最推荐的方式因为它能保证软件包的完整性和后续更新的便利性。3.1 添加PostgreSQL官方APT仓库首先导入仓库的GPG公钥用于验证软件包的签名sudo mkdir -p /etc/apt/keyrings curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/keyrings/postgresql.gpg接下来创建仓库源文件。这里需要根据你的Ubuntu版本替换代号。例如对于 Ubuntu 22.04 (Jammy)echo deb [signed-by/etc/apt/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main | sudo tee /etc/apt/sources.list.d/pgdg.list对于 Ubuntu 20.04$(lsb_release -cs)会自动替换为focal。实操心得使用$(lsb_release -cs)而不是硬编码版本代号可以使脚本更具通用性。tee命令同时将内容写入文件并显示在终端方便确认。3.2 安装PostgreSQL 16服务器与客户端更新本地APT包列表使其包含我们新添加的PG仓库sudo apt update现在可以安装PostgreSQL 16了。我们通常需要安装以下几个包sudo apt install -y postgresql-16 postgresql-client-16postgresql-16: 这是数据库服务器软件本身。postgresql-client-16: 包含连接和管理数据库的命令行工具如psql。安装过程会自动完成以下工作创建postgres系统用户和用户组。初始化一个默认的数据库集群cluster。创建默认的postgres数据库、template1数据库。启动PostgreSQL服务并设置为开机自启。安装完成后可以检查服务状态来确认是否正常运行sudo systemctl status postgresql16-main你应该看到状态显示为active (running)。16-main中的main是默认集群的名称。4. 初始安全配置与基础调优安装完成只是第一步默认配置是为了通用性并不安全。接下来我们进行一些关键的初始配置。4.1 修改PostgreSQL管理员密码安装后数据库有一个默认的超级用户postgres它通过本地peer认证方式即使用同名的操作系统用户登录初始时没有密码。这仅适用于本地管理。为了安全和使用密码连接我们需要为其设置一个密码。首先切换到postgres系统用户并进入其交互式命令行工具psqlsudo -u postgres psql在psql提示符 (postgres#) 下执行以下SQL命令修改密码ALTER USER postgres WITH PASSWORD 你的强密码;请务必将你的强密码替换为一个高强度的密码包含大小写字母、数字和特殊字符。完成后输入\q退出psql。4.2 配置客户端认证pg_hba.confpg_hba.conf(Host-Based Authentication) 文件是PostgreSQL的“防火墙”它控制哪些主机、哪些用户、通过哪种方式可以连接到哪个数据库。这是安全配置的重中之重。文件位于/etc/postgresql/16/main/pg_hba.conf。我们使用nano或vim编辑它sudo nano /etc/postgresql/16/main/pg_hba.conf你会看到文件末尾有一些规则。默认配置通常只允许本地通过 Unix socket 以peer或md5方式连接。我们需要根据需求调整。例如允许本地密码连接推荐找到针对本地IPv4 local connections和IPv6 local connections的行将peer或ident方法改为md5或scram-sha-256更安全。这允许你在本机使用psql -U postgres -h localhost并通过密码登录。# 原行可能类似 # local all all peer # 修改为 local all all scram-sha-256允许远程连接谨慎操作如果你需要从其他服务器连接需要添加规则。在生产环境中务必限制IP范围并考虑使用SSL。# 允许特定IP段例如 192.168.1.0/24的所有用户通过MD5密码连接所有数据库 host all all 192.168.1.0/24 scram-sha-256 # 或者只允许特定IP host all all 10.0.0.100/32 scram-sha-256重要警告切勿为了方便而添加host all all 0.0.0.0/0 trust这样的规则允许所有IP免密连接这等同于将数据库完全暴露在公网极其危险。修改后保存文件。4.3 配置监听地址与端口postgresql.conf默认情况下PostgreSQL只监听本地回环地址127.0.0.1这意味着它不接受来自网络的连接。如果你需要远程连接在配置了pg_hba.conf的前提下需要修改监听地址。编辑主配置文件sudo nano /etc/postgresql/16/main/postgresql.conf找到listen_addresses参数# 默认是 # listen_addresses localhost # 修改为 * 监听所有IP或指定IP如 localhost,192.168.1.100 listen_addresses *同时确认端口port 5432是你期望的。修改后保存。4.4 应用配置并重启服务任何对pg_hba.conf或postgresql.conf的修改都需要重启PostgreSQL服务才能生效。sudo systemctl restart postgresql16-main重启后再次检查服务状态确保重启成功。sudo systemctl status postgresql16-main5. 基础操作与连接测试现在PostgreSQL 16应该已经安装并配置完成。我们来测试一下基本的连接和操作。5.1 使用psql命令行工具连接有多种方式可以连接以postgres系统用户直接登录无需密码sudo -u postgres psql这种方式利用了peer认证如果未修改默认的local规则。使用密码通过TCP/IP连接本地psql -h localhost -U postgres -d postgres系统会提示你输入之前为postgres用户设置的密码。使用密码通过TCP/IP连接远程如果已配置psql -h 服务器IP地址 -U postgres -d postgres成功连接后你会进入psql提示符postgres#。5.2 执行基本SQL操作在psql中你可以执行所有SQL命令。我们来创建一个测试数据库、用户和表-- 创建一个新数据库 CREATE DATABASE testdb; -- 连接到这个新数据库 \c testdb -- 创建一个新用户并设置密码 CREATE USER testuser WITH ENCRYPTED PASSWORD UserPassword123!; -- 授予该用户在新数据库上的所有权限 GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser; -- 创建一张简单的表 CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, email VARCHAR(100), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 插入一些测试数据 INSERT INTO users (username, email) VALUES (alice, aliceexample.com), (bob, bobexample.com); -- 查询数据 SELECT * FROM users;这些操作验证了数据库的基本读写功能是正常的。5.3 常用psql元命令psql提供了一些以反斜杠\开头的元命令用于管理\l列出所有数据库。\du或\du列出所有用户角色及其权限。\c [database_name]切换到另一个数据库。\dt列出当前数据库中的所有表。\d [table_name]描述某张表的结构。\q退出psql。\?查看所有元命令帮助。\h [sql_command]查看SQL命令的帮助如\h CREATE TABLE。6. 常见问题排查与性能初调即使按照步骤操作你也可能会遇到一些问题。这里记录了一些常见情况及其解决方法。6.1 连接被拒绝问题排查表问题现象可能原因排查步骤与解决方案psql: error: connection to server at localhost (::1), port 5432 failed: Connection refused1. PostgreSQL服务未运行。2. 服务监听地址/端口错误。1. 运行sudo systemctl status postgresql16-main检查服务状态。如果未运行尝试sudo systemctl start postgresql16-main。2. 检查postgresql.conf中的listen_addresses和port。确保不是只监听localhost而客户端用了IP。重启服务。psql: error: connection to server at x.x.x.x, port 5432 failed: Connection timed out1. 服务器防火墙如UFW阻止了5432端口。2. 云服务商安全组未放行。1. 检查UFWsudo ufw status。如需放行sudo ufw allow 5432/tcp。2. 登录云服务器控制台检查安全组/防火墙规则添加入站规则允许TCP 5432端口。psql: error: connection to server at x.x.x.x, port 5432 failed: FATAL: no pg_hba.conf entry for host ...pg_hba.conf中没有允许该主机/IP的连接规则。1. 编辑pg_hba.conf为客户端IP添加一条host规则使用md5或scram-sha-256。2. 重启PostgreSQL服务。psql: error: connection to server at localhost, port 5432 failed: FATAL: password authentication failed for user postgres密码错误。1. 确认密码是否正确。如果忘记可以临时修改pg_hba.conf将对应的local或host行方法改为trust重启服务后无需密码登录再用ALTER USER修改密码最后改回md5并重启。切记操作后改回6.2 基础性能与监控点安装完成后了解几个简单的性能观察点很有帮助查看活动连接SELECT * FROM pg_stat_activity WHERE state active;这可以查看当前正在执行的查询。查看数据库大小SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size FROM pg_database;简单配置调优对于开发或小型生产环境 编辑postgresql.conf以下几个参数可以根据你的服务器内存进行调整假设服务器内存为4GBshared_buffers 1GB # 通常设为内存的25%用于缓存数据 work_mem 16MB # 每个排序/哈希操作的内存复杂查询多可适当增加 maintenance_work_mem 256MB # 维护操作如VACUUM, CREATE INDEX的内存 effective_cache_size 3GB # 操作系统和PostgreSQL可用于缓存数据的估计内存修改任何配置后都需要重启服务。6.3 日常维护命令备份单个数据库sudo -u postgres pg_dump dbname backup.sql备份所有数据库全局对象sudo -u postgres pg_dumpall alldb_backup.sql恢复数据库sudo -u postgres psql dbname backup.sql查看日志PostgreSQL日志通常在/var/log/postgresql/postgresql-16-main.log。遇到问题时这里是第一个需要查看的地方。sudo tail -f /var/log/postgresql/postgresql-16-main.log整个安装和初步配置过程到这里就完成了。从添加官方仓库、安装软件、进行关键的安全配置到测试连接和基础操作我们覆盖了一个生产就绪的PostgreSQL 16实例部署的核心步骤。记住数据库安全无小事尤其是pg_hba.conf的配置一定要遵循最小权限原则。对于更深入的性能调优、高可用架构如流复制、Patroni集群、备份策略等每个话题都值得展开详谈但有了这个稳定运行的基础你已经有了一块坚实的跳板可以在此基础上构建你的数据驱动型应用了。如果在后续使用中遇到特定的性能问题或想实现更高级的功能不妨从官方文档和活跃的社区开始你的探索。

相关新闻

2026/8/17 7:08:20

操作系统I/O系统深度解析:从轮询到eBPF的性能优化实战

1. 操作系统输入输出系统:从理论到实战的深度解析搞操作系统的,尤其是学到第六章输入输出系统这块,很多人会觉得头大。书上概念一堆:程序I/O、中断驱动、DMA、通道,还有设备独立性、SPOOLing这些听起来很玄乎的词。但当…

2026/8/17 7:08:20

TP-LINK WiFi7 AC+AP组网方案:全屋高速覆盖与无缝漫游部署指南

这次我们来看一套面向家庭和小型办公环境的WiFi7组网方案:TP-LINK的TL-7AP5102HI-PoE薄款方型AP搭配TL-R5005P-AC千兆PoE网关AC控制器。这套组合的核心目标很明确,就是利用最新的WiFi7技术,通过ACAP的架构,实现全屋无死角、高速且…

2026/8/17 7:03:20

Halcon与C#数据类型互转:HTuple与基础类型转换实战指南

1. 项目概述:为什么Halcon与C#的数据类型互转是机器视觉开发的“咽喉要锁”?如果你正在用C#开发基于Halcon的机器视觉应用,那么“数据类型互转”这个看似基础的问题,大概率已经让你头疼过不止一次。这绝不是简单的int.Parse或者To…

2026/8/17 8:03:25

Java调用DLL实战指南:JNI原理、环境配置与避坑详解

1. 项目概述:为什么Java需要调用DLL?在Java开发者的日常工作中,我们常常会遇到一个看似矛盾的需求:Java明明以“一次编写,到处运行”的跨平台特性著称,为什么还要去调用特定于Windows平台的DLL(…

2026/8/17 8:03:25

电脑开机无反应?从电源到主板的系统化排查指南

1. 问题现象与初步诊断思路“电脑组装好了,开机完全没反应”——这大概是每个DIY玩家最不愿意面对,却又几乎必然会在某个时刻遭遇的“至暗时刻”。你满怀期待地按下机箱上的电源键,结果迎接你的不是风扇的呼啸、主板的炫光,也不是…

2026/8/17 8:03:25

Element UI多文件上传on-success只触发一次?深度解析与四种解决方案

1. 问题现场:一个看似“正常”的Bug最近在重构一个后台管理系统时,我又一次遇到了这个经典的“坑”。需求很简单:用户需要在一个表单里上传多个附件,比如合同扫描件、资质证明等。我像往常一样,熟练地拖入 Element UI …

2026/8/17 8:03:25

特殊特性与关键特性:从风险识别到控制策略的实战指南

1. 从一次质量评审的“灵魂拷问”说起“这个零件的尺寸公差,你们标的是关键特性,但我觉得它应该算特殊特性。你们是怎么区分的?”在一次新项目的设计评审会上,供应商的质量工程师抛出了这个问题。会议室里安静了几秒,几…

2026/8/17 8:03:25

PVE虚拟机配置丢失恢复指南:从磁盘文件重建虚拟机

1. 问题场景:当你的虚拟机在PVE中“消失”了如果你正在使用Proxmox VE(PVE)作为你的虚拟化平台,某天打开Web管理界面,发现之前运行得好好的虚拟机不见了。你心里一紧,赶紧登录到PVE的Shell终端,…

2026/8/17 7:58:24

大视觉模型引导3DGS:突破快照压缩成像重建瓶颈

这次我们来看一个将 3D Gaussian Splatting 与快照压缩成像技术结合的前沿研究项目:GS$^{2}$CI。这个项目来自学术界,核心目标是解决传统快照压缩成像(Snapshot Compressive Imaging, SCI)在复杂场景下重建质量不佳、对噪声敏感的…

2026/8/16 0:00:35

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/17 5:02:51

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/17 0:02:57

LabVIEW异步调用实战:解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必经之路如果你在LabVIEW里写过稍微复杂点的程序,尤其是涉及到界面响应、多任务并行或者硬件IO等待,大概率会遇到一个头疼的问题:程序“卡”住了。前面板点不动,进度条不更新…

2026/8/17 0:02:57

飞书局域网文件传输实战:3种方案实现高速点对点传输

1. 项目概述:为什么要在局域网内用飞书传文件? 飞书作为一款主流的协同办公套件,其核心功能是围绕云端协作设计的。无论是文档、表格还是文件,通常的分享逻辑都是“上传到云端 -> 生成链接 -> 分享给同事”。这个流程在互联…

2026/8/15 9:46:39

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/16 16:53:03

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/15 9:46:30

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…