当前位置: 首页 > news >正文

Ubuntu 部署 PostgreSQL 数据库(附shell脚本一键部署↓)

PostgreSQL 是一款功能强大、开源且高度可扩展的关系型数据库管理系统(RDBMS),以其稳定性、ACID 兼容性、丰富的数据类型支持和广泛的适用场景而著称。以下是关于 PostgreSQL 的详细介绍:

核心特性

  1. 开源与社区驱动:PostgreSQL 是一个开源项目,任何人都可以自由使用、修改和分发。它拥有一个活跃的开发者社区,定期发布更新和新特性,确保软件的持续发展和安全性。
  2. ACID 兼容性:PostgreSQL 完全支持 ACID(原子性、一致性、隔离性、持久性)事务特性,确保数据的完整性和可靠性。这一特性使得 PostgreSQL 成为金融、医疗等行业的热门选择。
  3. 丰富的数据类型:PostgreSQL 支持多种数据类型,包括基本的数值、字符串和日期类型,还支持复杂的数据类型,如数组、JSON、XML 和自定义类型。这使得 PostgreSQL 能够处理各种复杂的数据结构。
  4. 高级优化器:PostgreSQL 具有强大的查询优化器,能够自动优化查询以提高性能。优化器会根据数据结构和索引自动选择最有效的查询执行计划,从而提高查询速度。
  5. 高度可扩展性:PostgreSQL 允许在不同规模的应用程序中灵活扩展,从小型网站到大型企业级系统都可以使用。它支持分区表、窗口函数等功能,可以处理大量的数据和复杂的查询。

技术优势

  1. 稳定性与可靠性:PostgreSQL 经过多年的优化,能够处理高并发和大数据量的应用场景。它提供了多种安全特性,包括角色和权限管理、数据加密、SSL 支持等,确保数据在存储和传输过程中的安全。
  2. 支持复杂查询:PostgreSQL 支持复杂的 SQL 查询,包括子查询、连接、聚合函数等。这使得 PostgreSQL 能够处理各种复杂的业务逻辑。
  3. 多语言支持:PostgreSQL 支持多种编程语言和接口,包括 Python、Java、Perl、.Net、Go、Ruby、C/C++、Tcl 和 ODBC 等。这使得 PostgreSQL 能够方便地与各种应用程序进行集成。
  4. 丰富的扩展功能:PostgreSQL 提供了丰富的扩展功能,如 PostGIS 扩展可以支持地理空间数据类型和操作,适用于地理信息系统和地理数据分析。

适用场景

  1. 企业级应用:PostgreSQL 具有高度的稳定性、可靠性和安全性,适用于企业资源规划(ERP)系统、客户关系管理(CRM)系统、人力资源管理(HRM)系统等企业级应用。
  2. 金融系统:PostgreSQL 支持事务和 ACID 特性,可以确保数据的一致性和完整性,适用于银行、证券、保险等金融行业的系统。
  3. 电商平台:PostgreSQL 具有丰富的数据类型和功能,可以处理订单、库存、支付等业务,适用于电商平台。
  4. 物联网(IoT)和大数据:PostgreSQL 支持分区表、窗口函数等功能,可以处理大量的数据和复杂的查询,适用于物联网和大数据场景。
  5. 地理信息系统(GIS):通过 PostGIS 扩展,PostgreSQL 可以支持地理空间数据类型和操作,适用于地理信息系统和地理数据分析。
  6. 内容管理系统(CMS):PostgreSQL 支持全文搜索、JSON 数据类型等功能,可以用于构建内容管理系统,如博客、论坛、新闻网站等。
  7. 数据仓库和报表:PostgreSQL 具有高度的可扩展性和性能优化功能,可以用于构建数据仓库和报表系统,支持实时分析和决策。
  8. 移动应用和游戏: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-16psql 命令行客户端
  • postgresql-contrib-16:常用扩展(如 uuid-ossphstorepg_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 中执行系统命令(如 lspwdwhoami 等)
\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数据库的完整流程,从添加官方仓库、安装配置到远程访问设置,并提供了一键安装脚本,帮助用户快速高效地完成数据库部署,为后续的开发与运维工作奠定坚实基础。

http://www.dtcms.com/a/390531.html

相关文章:

  • 《数据驱动下的双样本推断:均值与比例的硬核技术实践与方法论思考》
  • Git设置单个仓库用户名和邮箱的方法
  • MongoDB Integer
  • 深度学习第二章 线性代数简介
  • HTB precious
  • 【前后端与数据库交互】从零构建 Python + Vue + MongoDB 网站
  • 对比django,flask,opencv三大
  • 【6/20】MongoDB 入门:连接数据库,实现数据存储与查询
  • 【笔记】Docker使用
  • k8s自定义CNI插件实现指南
  • 使用Docker部署Kubernetes(K8s)详解
  • 【Docker】网络
  • 磁共振成像原理(理论)8:射频回波 (RF Echoes)-三脉冲回波(1)
  • 华为云 ELB:智慧负载均衡,让您的应用永葆流畅体验
  • 【实时Linux实战系列】PM QoS 与 C/P-State 管理:功耗与时延的平衡
  • github修改repo名称
  • 使用 C# 操作 Excel 工作表:添加、删除、复制、移动、重命名
  • Python 高效实现 Excel 转 PDF: 不依赖Office
  • Ubuntu25.04通过Docker编译Sunshine记录
  • WebRTC 如何实现的低延迟和高带宽利用率
  • Python接口自动化浅析unittest单元测试原理
  • 【附源码】基于SpringBoot的新能源汽车销售管理系统的设计与实现
  • 虚拟机Ubuntu挂载共享文件夹
  • JS实现房贷计算器和购物车页面
  • 【开题答辩全过程】以 Android安全网购平台为例,包含答辩的问题和答案
  • 期权市场反常信号是什么?
  • 【SpringBoot】26 核心功能 - Web开发原理 - Spring Boot 中定制 Servlet 容器
  • java spring boot 搭建项目
  • 【一文了解】闭包
  • 深入解析Mysql数据库并发:从读写机制到多版本控制