在Ubuntu 22.04上安装和配置PostgreSQL 16是一项常见的数据库管理任务。由于Ubuntu 22.04的默认软件源中通常包含的是较旧版本的PostgreSQL如14或15因此安装PostgreSQL 16通常需要添加官方的APT仓库。以下是关于在Ubuntu 22.04上安装、部署及基础使用PostgreSQL 16的详细知识点指南包含具体的步骤、案例代码及详细注释。知识点一环境准备与官方源配置核心概念Linux软件包管理器APT默认源可能不包含最新的大版本数据库。为了安装特定版本如PostgreSQL 16必须添加PostgreSQL官方提供的APT仓库签名密钥和源列表。操作步骤更新本地包索引。安装必要的依赖工具curl,gnupg,lsb-release。导入PostgreSQL官方GPG密钥。添加PostgreSQL 16的仓库地址。再次更新包索引以识别新仓库中的包。案例代码# 1. 更新现有的软件包列表确保获取最新的元数据# sudo: 以超级用户权限执行# apt update: 更新本地包索引sudoaptupdate# 2. 安装必要的依赖工具# curl: 用于传输数据这里用来下载GPG密钥# gnupg: GNU隐私守卫用于处理密钥# lsb-release: 用于确定Ubuntu的版本代号如jammysudoaptinstall-ycurlgnupg lsb-release# 3. 导入PostgreSQL官方仓库的GPG签名密钥# 这一步是为了确保后续下载的软件包未被篡改来源可信# 将密钥写入到 /etc/apt/trusted.gpg.d/ 目录下curl-fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc|\sudogpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg# 4. 添加PostgreSQL 16的APT源# 动态获取当前Ubuntu版本的代号Ubuntu 22.04的代号是 jammy# 将源地址写入 /etc/apt/sources.list.d/ 目录下的新文件echodeb http://apt.postgresql.org/pub/repos/apt$(lsb_release -cs)-pgdg main|\sudotee/etc/apt/sources.list.d/pgdg.list# 5. 再次更新包索引让系统识别新添加的PostgreSQL 16仓库sudoaptupdate知识点二安装PostgreSQL 16与服务管理核心概念通过APT安装指定版本的软件包。PostgreSQL安装后会自动创建一个名为postgres的系统用户并启动数据库服务。我们需要掌握如何指定版本安装以及如何管理服务状态启动、停止、开机自启。操作步骤安装postgresql-16和postgresql-contrib-16包含额外实用工具。验证安装版本。检查服务状态并设置开机自启。案例代码# 1. 安装PostgreSQL 16及其贡献模块# postgresql-16: 数据库核心服务端# postgresql-contrib-16: 包含一些额外的插件和工具如pg_stat_statements等# -y: 自动确认安装无需手动输入yessudoaptinstall-y postgresql-16 postgresql-contrib-16# 2. 验证安装版本# psql --version: 显示客户端版本确认是否为16psql --version# 预期输出示例: psql (PostgreSQL) 16.x# 3. 检查PostgreSQL服务状态# systemctl status: 查看服务是否正在运行 (active (running))sudosystemctl status postgresql16-main# 注意在某些配置下服务名可能是 postgresql 或 postgresql-16# 4. 设置PostgreSQL服务开机自启# enable: 启用开机自启# --now: 同时立即启动服务如果尚未启动sudosystemctlenable--now postgresql16-main# 5. 如果服务未运行手动启动它sudosystemctl start postgresql16-main知识点三用户管理与身份验证配置 (pg_hba.conf)核心概念PostgreSQL默认安装后超级用户postgres只能通过本地操作系统用户postgres进行免密登录peer认证。若要允许密码登录或远程连接必须修改配置文件pg_hba.confHost-Based Authentication。关键文件/etc/postgresql/16/main/pg_hba.conf: 控制客户端认证规则。/etc/postgresql/16/main/postgresql.conf: 主配置文件监听地址等。操作步骤切换到postgres用户。进入数据库命令行。创建新的数据库用户并设置密码。修改pg_hba.conf允许密码认证。重载配置使生效。案例代码# 1. 切换到系统自带的postgres用户# 只有该用户默认可以免密登录数据库sudo-i -u postgres# 2. 进入PostgreSQL交互式终端psql# --- 以下命令在 psql 提示符 (#) 下执行 -----3. 创建一个新的数据库用户app_user并设置密码 -- CREATEUSER:创建用户语法 -- WITH PASSWORD: 指定加密密码 -- LOGIN: 允许该用户登录 CREATEUSERapp_user WITH PASSWORDStrongPassword123!LOGIN;--4. 创建一个测试数据库my_database并授权给新用户 -- CREATE DATABASE: 创建数据库 CREATE DATABASE my_database OWNER app_user;--5. 退出psql终端\q# --- 回到 bash 终端 (仍为 postgres 用户) ---# 6. 修改 pg_hba.conf 以允许本地密码登录 (md5 或 scram-sha-256)# 使用 nano 或 vim 编辑器# 路径通常为: /etc/postgresql/16/main/pg_hba.confsudonano/etc/postgresql/16/main/pg_hba.conf# [编辑操作指南]# 找到类似下面的一行 (IPv4本地连接):# host all all 127.0.0.1/32 scram-sha-256# 或者 (本地socket连接):# local all all peer## 为了演示密码登录可以将 peer 改为 scram-sha-256 (推荐) 或 md5# 修改后示例:# local all all scram-sha-256# 保存并退出编辑器 (CtrlO, Enter, CtrlX)# 7. 重载PostgreSQL配置使更改生效而无需重启服务# systemctl reload: 重新加载配置文件sudosystemctl reload postgresql16-main# 8. 退出postgres系统用户回到普通用户exit知识点四SQL基础语法与实战案例核心概念安装完成后需要通过SQL语言操作数据。本部分涵盖DDL数据定义语言和DML数据操作语言。重点包括建表、约束、插入、查询、更新和删除。场景在my_database数据库中创建一个employees表并进行增删改查操作。案例代码# 使用新用户 app_user 登录数据库# -U: 指定用户名# -d: 指定数据库名# -h: 指定主机 (localhost 强制使用TCP/IP连接从而触发密码验证若配置了local password也可省略)psql -U app_user -d my_database -h localhost# 输入之前设置的密码: StrongPassword123!SQL 操作脚本 (在 psql 终端内执行)-- -- 1. DDL: 数据定义 (创建表结构)-- -- 创建员工表 employees-- CREATE TABLE: 创建新表-- IF NOT EXISTS: 如果表不存在才创建防止报错CREATETABLEIFNOTEXISTSemployees(emp_idSERIALPRIMARYKEY,-- SERIAL: 自增整数PRIMARY KEY: 主键约束first_nameVARCHAR(50)NOTNULL,-- VARCHAR(50): 可变长度字符串NOT NULL: 非空约束last_nameVARCHAR(50)NOTNULL,emailVARCHAR(100)UNIQUENOTNULL,-- UNIQUE: 唯一约束确保邮箱不重复hire_dateDATEDEFAULTCURRENT_DATE,-- DATE: 日期类型DEFAULT: 默认值为当前日期salaryNUMERIC(10,2),-- NUMERIC(10, 2): 精确数值总共10位小数2位departmentVARCHAR(50),is_activeBOOLEANDEFAULTTRUE-- BOOLEAN: 布尔类型);-- 查看表结构描述-- \d: psql元命令describe table\d employees;-- -- 2. DML: 数据操作 (插入数据)-- -- 插入单条记录-- INSERT INTO: 插入数据语法-- VALUES: 指定对应的值INSERTINTOemployees(first_name,last_name,email,salary,department)VALUES(San,Zhang,san.zhangexample.com,8500.00,Engineering);-- 插入多条记录INSERTINTOemployees(first_name,last_name,email,salary,department)VALUES(Li,Wang,li.wangexample.com,9200.50,Marketing),(Wei,Zhao,wei.zhaoexample.com,7800.00,Engineering),(Fang,Li,fang.liexample.com,11000.00,Management);-- -- 3. DQL: 数据查询 (SELECT)-- -- 查询所有员工-- SELECT *: 选择所有列SELECT*FROMemployees;-- 条件查询查找薪资大于8000的员工-- WHERE: 过滤条件-- ORDER BY: 排序DESC表示降序SELECTfirst_name,last_name,salaryFROMemployeesWHEREsalary8000ORDERBYsalaryDESC;-- 聚合查询统计各部门的平均薪资-- GROUP BY: 分组-- AVG(): 聚合函数计算平均值SELECTdepartment,AVG(salary)asavg_salaryFROMemployeesGROUPBYdepartment;-- 模糊查询查找姓氏以 Z 开头的员工-- LIKE: 模式匹配% 代表任意字符SELECT*FROMemployeesWHERElast_nameLIKEZ%;-- -- 4. DML: 更新与删除 (UPDATE DELETE)-- -- 更新数据给Engineering部门的员工加薪10%-- UPDATE: 更新表-- SET: 设置新值-- 注意务必加 WHERE 条件否则会更新全表UPDATEemployeesSETsalarysalary*1.10WHEREdepartmentEngineering;-- 验证更新结果SELECTfirst_name,department,salaryFROMemployeesWHEREdepartmentEngineering;-- 删除数据删除离职员工 (假设 is_active 为 false)-- 先模拟更新一个状态UPDATEemployeesSETis_activeFALSEWHEREemailwei.zhaoexample.com;-- 执行删除-- DELETE FROM: 删除行DELETEFROMemployeesWHEREis_activeFALSE;-- -- 5. 清理环境 (可选)-- -- 删除表DROPTABLEIFEXISTSemployees;-- 退出 psql\q知识点五远程访问配置 (进阶)核心概念默认情况下PostgreSQL只监听本地回环地址localhost/127.0.0.1。若需从其他服务器连接需修改postgresql.conf中的listen_addresses并确保防火墙放行5432端口。操作步骤修改postgresql.conf监听所有IP。确保pg_hba.conf允许远程IP段连接。配置Ubuntu防火墙UFW。重启服务。案例代码# 1. 修改监听地址配置# 将 listen_addresses 设置为 * 表示监听所有网络接口sudosed-is/#listen_addresses localhost/listen_addresses *//etc/postgresql/16/main/postgresql.conf# 2. 配置 pg_hba.conf 允许特定网段 (例如 192.168.1.0/24) 使用密码登录# 追加一行到文件末尾echohost all all 192.168.1.0/24 scram-sha-256|\sudotee-a /etc/postgresql/16/main/pg_hba.conf# 3. 配置防火墙 (如果使用 UFW)# 允许 PostgreSQL 默认端口 5432sudoufw allow5432/tcp# 4. 重启 PostgreSQL 服务使监听地址更改生效# restart: 完全重启服务sudosystemctl restart postgresql16-main# 5. 验证监听状态# ss -tlnp: 查看TCP监听端口# grep 5432: 过滤postgres相关行sudoss -tlnp|grep5432# 预期输出应包含 0.0.0.0:5432 或 :::5432而不仅仅是 127.0.0.1:5432总结通过以上五个知识点的学习与实践您已经在Ubuntu 22.04上完成了环境搭建正确配置了官方源并安装了PostgreSQL 16。服务管理掌握了服务的启动、停止和自启。安全配置理解了pg_hba.conf的作用并配置了密码认证。SQL实战熟练运用了建表、约束、CRUD增删改查及聚合查询。网络扩展学会了如何开启远程访问能力。这套流程是生产环境部署PostgreSQL的基础建议在实际操作中根据具体的网络安全策略调整pg_hba.conf中的IP白名单。