Ubuntu 部署 PostgreSQL 数据库(附shell脚本一键部署↓)
PostgreSQL 是一款功能强大、开源且高度可扩展的关系型数据库管理系统(RDBMS),以其稳定性、ACID 兼容性、丰富的数据类型支持和广泛的适用场景而著称。以下是关于 PostgreSQL 的详细介绍:
核心特性
- 开源与社区驱动:PostgreSQL 是一个开源项目,任何人都可以自由使用、修改和分发。它拥有一个活跃的开发者社区,定期发布更新和新特性,确保软件的持续发展和安全性。
- ACID 兼容性:PostgreSQL 完全支持 ACID(原子性、一致性、隔离性、持久性)事务特性,确保数据的完整性和可靠性。这一特性使得 PostgreSQL 成为金融、医疗等行业的热门选择。
- 丰富的数据类型:PostgreSQL 支持多种数据类型,包括基本的数值、字符串和日期类型,还支持复杂的数据类型,如数组、JSON、XML 和自定义类型。这使得 PostgreSQL 能够处理各种复杂的数据结构。
- 高级优化器:PostgreSQL 具有强大的查询优化器,能够自动优化查询以提高性能。优化器会根据数据结构和索引自动选择最有效的查询执行计划,从而提高查询速度。
- 高度可扩展性:PostgreSQL 允许在不同规模的应用程序中灵活扩展,从小型网站到大型企业级系统都可以使用。它支持分区表、窗口函数等功能,可以处理大量的数据和复杂的查询。
技术优势
- 稳定性与可靠性:PostgreSQL 经过多年的优化,能够处理高并发和大数据量的应用场景。它提供了多种安全特性,包括角色和权限管理、数据加密、SSL 支持等,确保数据在存储和传输过程中的安全。
- 支持复杂查询:PostgreSQL 支持复杂的 SQL 查询,包括子查询、连接、聚合函数等。这使得 PostgreSQL 能够处理各种复杂的业务逻辑。
- 多语言支持:PostgreSQL 支持多种编程语言和接口,包括 Python、Java、Perl、.Net、Go、Ruby、C/C++、Tcl 和 ODBC 等。这使得 PostgreSQL 能够方便地与各种应用程序进行集成。
- 丰富的扩展功能:PostgreSQL 提供了丰富的扩展功能,如 PostGIS 扩展可以支持地理空间数据类型和操作,适用于地理信息系统和地理数据分析。
适用场景
- 企业级应用:PostgreSQL 具有高度的稳定性、可靠性和安全性,适用于企业资源规划(ERP)系统、客户关系管理(CRM)系统、人力资源管理(HRM)系统等企业级应用。
- 金融系统:PostgreSQL 支持事务和 ACID 特性,可以确保数据的一致性和完整性,适用于银行、证券、保险等金融行业的系统。
- 电商平台:PostgreSQL 具有丰富的数据类型和功能,可以处理订单、库存、支付等业务,适用于电商平台。
- 物联网(IoT)和大数据:PostgreSQL 支持分区表、窗口函数等功能,可以处理大量的数据和复杂的查询,适用于物联网和大数据场景。
- 地理信息系统(GIS):通过 PostGIS 扩展,PostgreSQL 可以支持地理空间数据类型和操作,适用于地理信息系统和地理数据分析。
- 内容管理系统(CMS):PostgreSQL 支持全文搜索、JSON 数据类型等功能,可以用于构建内容管理系统,如博客、论坛、新闻网站等。
- 数据仓库和报表:PostgreSQL 具有高度的可扩展性和性能优化功能,可以用于构建数据仓库和报表系统,支持实时分析和决策。
- 移动应用和游戏:PostgreSQL 支持多种编程语言和接口,可以方便地与移动应用和游戏进行集成,处理用户信息、游戏数据等业务。
一、添加官方 PostgreSQL APT 仓库
推荐使用 PostgreSQL Global Development Group (PGDG) 官方仓库,可安装最新稳定版(如 16、15、14 等)。
1. 安装依赖包
sudo apt update
sudo apt install -y wget ca-certificates gnupg
2. 添加 PostgreSQL 官方 GPG 密钥
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /usr/share/keyrings/postgresql-archive-keyring.gpg
3. 添加 APT 软件源(PostgreSQL 16)
echo "deb [signed-by=/usr/share/keyrings/postgresql-archive-keyring.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
说明:
$(lsb_release -cs)
自动获取系统代号(如 jammy、focal)pgdg
表示 PostgreSQL Global Development Group 仓库- 支持版本:16、15、14、13、12 等,可根据需要选择
4. 更新软件包索引
sudo apt update
二、安装 PostgreSQL 与 psql 客户端
1. 安装 PostgreSQL 16(含服务、客户端、contrib 工具)
sudo apt install -y postgresql-16 postgresql-client-16 postgresql-contrib-16
组件说明:
postgresql-16
:数据库服务主程序postgresql-client-16
:psql
命令行客户端postgresql-contrib-16
:常用扩展(如uuid-ossp
,hstore
,pg_stat_statements
等)
三、启动并启用 PostgreSQL 服务
sudo systemctl start postgresql@16-main # 启动服务
sudo systemctl enable postgresql@16-main # 设置开机自启
sudo systemctl status postgresql@16-main # 查看状态
四、初始化配置与安全设置
1. 切换到 postgres 系统用户
PostgreSQL 安装后会自动创建 postgres
系统用户和数据库超级用户。
sudo -u postgres psql
进入 PostgreSQL 的 psql
交互命令行。
2. 修改 postgres 用户密码
ALTER USER postgres PASSWORD 'xxx.com';
3. 退出 psql
\q
五、配置远程访问
默认 PostgreSQL 仅监听本地 127.0.0.1
。若需远程连接,需修改配置。
1. 修改 postgresql.conf
sudo vim /etc/postgresql/16/main/postgresql.conf
找到并修改以下项:
listen_addresses = 'localhost' # 改为:
listen_addresses = '*' # 或指定 IP,如 '192.168.22.100'
port = 5432
2. 配置客户端认证(pg_hba.conf)
sudo vim /etc/postgresql/16/main/pg_hba.conf
在文件末尾添加允许的客户端访问规则
# 允许 192.168.1.0/24 网段通过密码访问
host all all 192.168.22.0/24 md5
✅ 认证方式建议使用 md5
或更安全的 scram-sha-256
3. 重启服务使配置生效
sudo systemctl restart postgresql@16-main
六、使用 psql 客户端连接测试
1. 本地连接
psql -U postgres -h localhost -p 5432 # 输入密码后进入数据库
2. 查看版本
SELECT version();
3. 创建测试数据库
CREATE DATABASE testdb;
\l # 查看数据库列表
\c testdb # 切换数据库
七、PostgreSQL 常用命令速查表
命令 | 功能说明 |
---|---|
\q | 退出 psql,返回终端 |
\l | 列出所有数据库 |
\c dbname | 切换到指定数据库 |
\dt | 列出当前数据库中的所有表 |
\dt+ | 列出所有表,并显示详细信息(如大小、注释) |
\d tablename | 查看指定表的结构(字段、类型、约束) |
\d+ tablename | 查看表的完整信息(含索引、存储、注释等) |
\du | 列出所有用户及其权限 |
\x | 切换为竖向显示模式(适合查看单行宽表) |
\timing | 开启/关闭 SQL 执行时间显示 |
\! ls | 在 psql 中执行系统命令(如 ls , pwd , whoami 等) |
\copy table TO 'file.csv' WITH CSV HEADER | 将表数据导出为带标题的 CSV 文件 |
\copy table FROM 'file.csv' WITH CSV HEADER | 从 CSV 文件导入数据 |
\i /path/to/script.sql | 执行外部 SQL 脚本文件 |
\? | 查看所有 psql 元命令的帮助文档 |
八、shell脚本自动化安装
#!/bin/bash
# Ubuntu 安装 PostgreSQL 16 一键脚本
# 作者:LoneEon
# 时间:2025年9月19日# ============= 配置参数 =============
POSTGRES_VERSION=16
PG_DATA_DIR="/var/lib/postgresql/${POSTGRES_VERSION}/main"
PG_CONF_FILE="/etc/postgresql/${POSTGRES_VERSION}/main/postgresql.conf"
PG_HBA_FILE="/etc/postgresql/${POSTGRES_VERSION}/main/pg_hba.conf"# 🔐 设置 postgres 用户数据库密码(请修改为你自己的强密码)
POSTGRES_PASSWORD="YourStrongPassw0rd!2025"# 🌐 是否允许远程访问?true=是,false=否
ENABLE_REMOTE_ACCESS=true# 允许远程连接的网段(如 '192.168.1.0/24'),多个用空格分隔
ALLOWED_CIDR="192.168.1.0/24 10.0.0.0/8"# ============= 开始安装 =============echo "🚀 开始安装 PostgreSQL ${POSTGRES_VERSION} ..."# 1. 更新系统包列表
echo "🔄 更新软件包索引..."
sudo apt update# 2. 安装依赖
echo "📦 安装必要依赖..."
sudo apt install -y wget ca-certificates gnupg lsb-core# 3. 添加 PostgreSQL 官方 GPG 密钥
echo "🔐 添加 PostgreSQL 官方 GPG 密钥..."
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \sudo gpg --dearmor -o /usr/share/keyrings/postgresql-archive-keyring.gpg# 4. 添加官方 APT 仓库
echo "🔗 添加 PostgreSQL APT 仓库..."
UBUNTU_CODENAME=$(lsb_release -cs)
echo "deb [signed-by=/usr/share/keyrings/postgresql-archive-keyring.gpg] http://apt.postgresql.org/pub/repos/apt ${UBUNTU_CODENAME}-pgdg main" | \sudo tee /etc/apt/sources.list.d/pgdg.list > /dev/null# 5. 再次更新
sudo apt update# 6. 安装 PostgreSQL
echo "🛠️ 安装 PostgreSQL ${POSTGRES_VERSION} ..."
sudo apt install -y \postgresql-${POSTGRES_VERSION} \postgresql-client-${POSTGRES_VERSION} \postgresql-contrib-${POSTGRES_VERSION}# 7. 启动并启用开机自启
echo "✅ 启动 PostgreSQL 服务..."
sudo systemctl start postgresql@${POSTGRES_VERSION}-main
sudo systemctl enable postgresql@${POSTGRES_VERSION}-main# 8. 使用 psql 修改 postgres 用户密码
echo "🔐 设置 postgres 用户密码..."
sudo -u postgres psql -c "ALTER USER postgres PASSWORD '${POSTGRES_PASSWORD}';" > /dev/null 2>&1
echo "✔️ postgres 密码已设置。"# 9. 配置远程访问(可选)
if [ "$ENABLE_REMOTE_ACCESS" = true ]; thenecho "🌐 配置远程访问..."# 修改 listen_addressessudo sed -i "s/#listen_addresses = .*/listen_addresses = '*'/" "$PG_CONF_FILE"# 在 pg_hba.conf 末尾添加允许的网段for cidr in $ALLOWED_CIDR; doecho "host all all $cidr md5" | sudo tee -a "$PG_HBA_FILE" > /dev/nulldoneecho "✔️ 远程访问已启用,允许网段:$ALLOWED_CIDR"
fi# 10. 重启生效
echo "🔁 重启 PostgreSQL 服务以应用配置..."
sudo systemctl restart postgresql@${POSTGRES_VERSION}-main# 11. 显示完成信息
echo ""
echo "🎉 PostgreSQL ${POSTGRES_VERSION} 安装完成!"
echo ""
echo "📊 基本信息:"
echo " 版本: PostgreSQL ${POSTGRES_VERSION}"
echo " 端口: 5432"
echo " 用户: postgres"
echo " 密码: ${POSTGRES_PASSWORD}"
echo " 数据目录: ${PG_DATA_DIR}"
echo " 配置文件: ${PG_CONF_FILE}"
echo ""
if [ "$ENABLE_REMOTE_ACCESS" = true ]; thenecho "🔓 已启用远程访问,请确保防火墙放行 5432 端口:"echo " sudo ufw allow 5432/tcp"
elseecho "🔒 仅本地访问(localhost),如需远程请修改脚本或手动配置。"
fi
echo ""
echo "💡 下一步建议:"
echo " 1. 使用 psql -U postgres -h localhost 测试连接"
echo " 2. 创建专用数据库和应用用户(避免直接使用 postgres)"
echo " 3. 配置定期备份(pg_dump / pgBackRest)"
echo ""exit 0
本文详细介绍了在Ubuntu系统上部署PostgreSQL数据库的完整流程,从添加官方仓库、安装配置到远程访问设置,并提供了一键安装脚本,帮助用户快速高效地完成数据库部署,为后续的开发与运维工作奠定坚实基础。