别再用笨方法装数据库了!Docker跑PostgreSQL真香

2026-08-27 20:32:45 0点赞 0收藏 0评论

Docker安装PGSQL

PostgreSQL是什么?

PostgreSQL是一款开源企业级对象关系型数据库,自带 psql 命令行终端、pgAdmin 图形化管理、pgbench 性能压测等配套工具,支持标准 SQL、ACID 事务与 MVCC 多版本并发,兼容 JSON、地理空间等丰富数据类型,可拓展插件生态,适配开发运维、数据仓储、高并发业务及 GIS 等复杂场景,跨平台且稳定可扩展,是后端与大数据领域常用的高性能数据库工具。

PGSQL数据库特点:

  • 开源免费,遵循 BSD 协议,无商业使用授权风险

  • 支持标准 SQL并深度扩展,兼容主流 SQL 语法

  • 具备事务 ACID 特性,支持 MVCC(多版本并发控制),读写不阻塞

  • 支持丰富数据类型:JSON/JSONB、数组、几何类型、枚举、范围类型等

  • 拥有强大扩展性:支持自定义函数、存储过程、索引类型、插件

  • 支持多种高级索引:B-tree、哈希、GIN、GiST、SP-GiST、BRIN

  • 具备高可用与容灾能力:流复制、主从架构、集群部署

  • 支持存储过程与触发器,兼容 PL/pgSQL、Python、Perl 等多种语言

  • 支持分区表(范围 / 列表 / 哈希分区),适配海量数据存储

  • 支持全文检索,无需依赖第三方组件即可实现文本搜索

  • 跨平台运行:Linux、Windows、macOS 等主流系统均支持

  • 企业级特性:支持视图、物化视图、外键、约束、事务保存点

  • 稳定性高,适合高并发、大数据量的生产环境

  • 生态完善,拥有大量第三方插件(PostGIS、pg_stat_statements 等)

安装部署

以PGSQL16为例,安装数据库

1、创建本地目录

mkdir -p /opt/pgsql cd pgsql

2、Docker Compose配置

services: postgres16:   image: postgres:16.13-alpine   container_name: postgres-v16   restart: always   ports:     - "15432:5432"   environment:     POSTGRES_PASSWORD: "123456"     POSTGRES_USER: "root"     POSTGRES_DB: "mydb"     TZ: "Asia/Shanghai"     POSTGRES_INITDB_ARGS: "--encoding=UTF8 --lc-collate=C --lc-ctype=C"   volumes:     # 使用命名磁盘卷挂载数据目录(推荐方式)     - postgres_data:/var/lib/postgresql/data   networks:     - pgsql-network ​ networks: pgsql-network:   driver: bridge ​ # 声明命名卷(Docker 自动管理,数据持久化不丢失) volumes: postgres_data:

参数说明:

1、数据库管理员账户/密码

POSTGRES_PASSWORD: "123456" # postgres超级用户密码(替换为你的密码) POSTGRES_USER: "root" # 默认超级用户名,可自定义(如myuser)

2、时区设置

# 可选:设置时区(避免数据库时间与宿主机不一致) TZ: "Asia/Shanghai"

启停命令:

# 启动 docker compose up -d ​ # 停止 docker compose down ​ # 查看数据卷(确认创建成功) docker volume ls

3、Docker 启动容器命令

下载docker镜像:

docker pull postgres:16.13-alpine

创建启动数据库容器:

# 1. 创建自定义网络(只需要第一次执行) docker network create pgsql-network ​ # 2. 创建数据卷(只需要第一次执行) docker volume create postgres_data ​ # 3. 启动 PostgreSQL 容器(核心命令) docker run -d --name postgres-v16 --restart always --net pgsql-network -p 15432:5432 -e POSTGRES_PASSWORD="123456" -e POSTGRES_USER="root" -e POSTGRES_DB="mydb" -e TZ="Asia/Shanghai" -e POSTGRES_INITDB_ARGS="--encoding=UTF8 --lc-collate=C --lc-ctype=C" -v postgres_data:/var/lib/postgresql/data postgres:16.13-alpine

PGSQL16教程及使用技巧

1、连接PGSQL数据库

数据库基础信息

  1. 宿主机IP:192.168.50.20

  2. 宿主机端口:15432

  3. 数据库账号:root

  4. 数据库密码:123456

  5. 默认库:mydb

  6. 数据库类型:PostgreSQL

以Navicat客户端为例:

  1. 打开 Navicat,左上角 文件 → 新建连接 → 选择 PostgreSQL 点击下一步

别再用笨方法装数据库了!Docker跑PostgreSQL真香

数据库设置面板填写:

  • 连接名:自定义(如本地PG16)

  • 主机 / IP 地址:服务器IP:192.168.50.20/服务区域名

  • 端口:15432

  • 初始数据库:mydb

  • 用户名:root

  • 密码:123456

别再用笨方法装数据库了!Docker跑PostgreSQL真香
  1. 点击 测试连接,提示连接成功后,点击确定保存。

  2. 双击左侧新建的连接,即可展开 mydb 数据库,正常建表、写 SQL、管理数据。

注意:防火墙不用额外设置,是本地端口映射,局域网其他设备连接填宿主机 IP+15432即可。

2、PGSQL使用技巧

1)创建数据库 / 用户

-- 新建数据库 CREATE DATABASE testdb; -- 新建普通用户 CREATE USER testuser WITH PASSWORD '123456'; -- 授权数据库给用户 GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;

2)数据类型

比 MySQL 更强的类型:

  • JSON/JSONB:适合存 JSON 数据,支持索引、快速检索

  • 数组类型:直接存数组,无需拆表

  • 地理空间类型:自带 GIS 坐标、距离计算

PGSQL支持的数据库类型:

分类数据类型使用场景整数类型smallint小整型,范围 -32768 ~ 32765,节省存储空间integer / int标准整型bigint大整型,主键、雪花 ID、大数值必用serial自增整型,等价 int 自增bigserial自增大整型,推荐做主键自增高精度数值numeric / decimal高精度定点数,金额、财务必备,无精度丢失浮点类型real单精度浮点数double precision双精度浮点数,非精密小数可用字符类型char(n)固定长度字符串,不足补空格varchar(n)可变长度字符串,限定长度,日常字段常用text无限长文本,文章、备注、大文本存储布尔类型boolean布尔值:true /false/null,状态标记日期时间date仅日期:年 - 月 - 日time仅时间:时:分: 秒timestamp日期 + 时间,不带时区timestamptz带时区时间,跨时区业务首选interval时间间隔,用于时间差值计算JSON 类型json仅存储,不适合索引查询jsonb二进制 JSON,支持索引、检索,生产推荐网络地址inetIPv4/IPv6 地址存储cidr网段地址macaddr物理 MAC 地址数组类型任意类型 []如 int []、text [],可直接存数组,无需拆中间表二进制类型bytea存储二进制文件、图片字节流唯一标识uuid全局唯一 ID,分布式系统做主键几何类型point / line / box / polygon点位、线条、多边形等地理几何基础类型地理空间geometry平面地理坐标,GIS、地图业务geography球面地理坐标,经纬度距离计算范围类型int4range / daterange / tsrange整数、日期、时间区间范围,适用于时段预约、区间匹配枚举类型enum自定义枚举,固定业务状态(订单状态、性别等)

3)分页查询

SELECT * FROM 表名 ORDER BY id LIMIT 10 OFFSET 0;

4)主键自增

-- 建表自增主键 CREATE TABLE t_user (   id SERIAL PRIMARY KEY,   name VARCHAR(50),   age INT );

5)JSONB 字段查询

SELECT * FROM t_user WHERE info->>'phone' = '13800138000';

6)查看数据库日志

docker logs -f postgres-v16

附:

PGSQL还是MYSQL?

MySQL:

  • 做网站、后台、小程序、电商、普通业务系统

  • 团队技术栈偏轻量

  • 追求简单、稳定、运维成本低

PostgreSQL :

  • 需要 JSON、数组、GIS、复杂查询

  • 金融、财务、数据严谨性要求高

  • 希望一张表搞定复杂结构,少拆表

  • 未来业务可能变复杂

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
0
扫一下,分享更方便,购买更轻松