一、简介
PostgreSQL(简称 PG)是功能强大的开源关系型数据库,常被称为 "世界上最先进的开源数据库"。
最新稳定版本系列:15、16。
部署方式有很多:
Docker/Docker Compose:快速上手,适合开发测试。
源码编译安装:适合想要学习源码、定制功能或没有合适二进制包的环境。
二、使用 Docker Compose 部署 PostgreSQL
2.1 前提条件
已安装 Docker 与 docker-compose(或新版
docker compose
)。Linux / Windows / macOS 都可以。
检查命令:
docker --version
docker compose version # 或 docker-compose --version
2.2 创建目录与配置文件
新建一个工作目录,例如:
mkdir ~/postgres-docker
cd ~/postgres-docker
在目录下创建 docker-compose.yml
:
version: "3.8"
services:
db:
image: postgres:16
container_name: postgres16
restart: unless-stopped
environment:
POSTGRES_USER: demo_user # 数据库用户
POSTGRES_PASSWORD: DemoPwd123! # 用户密码
POSTGRES_DB: demo_db # 默认数据库
volumes:
- pgdata:/var/lib/postgresql/data # 数据持久化
- ./initdb:/docker-entrypoint-initdb.d # 可选:初始化脚本
ports:
- "5432:5432"
volumes:
pgdata:
说明:
使用官方镜像
postgres:16
。POSTGRES_USER/POSTGRES_PASSWORD
:启动时创建的默认用户和密码。POSTGRES_DB
:启动时创建的默认数据库。docker-entrypoint-initdb.d
:可放.sql
或.sh
文件,首次初始化时会自动执行。
2.3 启动
docker compose up -d
检查容器:
docker ps
docker compose logs -f db
2.4 连接数据库
容器内进入:
docker exec -it postgres16 psql -U demo_user -d demo_db
宿主机(需要安装 psql
客户端):
psql -h 127.0.0.1 -p 5432 -U demo_user -d demo_db
2.5 常见管理操作
备份数据库:
docker exec -t postgres16 pg_dump -U demo_user demo_db > demo_db.sql
恢复数据库:
docker exec -i postgres16 psql -U demo_user -d demo_db < demo_db.sql
停止服务:
docker compose down
三、源码编译安装 PostgreSQL
适合:需要定制安装、修改源码、或系统无官方包时。
3.1 准备环境
以 Ubuntu/Debian 为例:
sudo apt update
sudo apt install -y build-essential libreadline-dev zlib1g-dev flex bison
CentOS / RHEL 系列:
sudo yum groupinstall -y "Development Tools"
sudo yum install -y readline-devel zlib-devel bison flex
3.2 下载源码
去官方页面 https://www.postgresql.org/ftp/source/ 找到最新版本,例如 PostgreSQL 16.3:
wget https://ftp.postgresql.org/pub/source/v16.3/postgresql-16.3.tar.gz
tar -xvzf postgresql-16.3.tar.gz
cd postgresql-16.3
3.3 编译与安装
./configure --prefix=/usr/local/pgsql
make
sudo make install
说明:
--prefix
指定安装目录(默认是/usr/local/pgsql
)。
3.4 创建用户与目录
PostgreSQL 通常建议单独用户运行:
sudo adduser postgres
sudo mkdir /usr/local/pgsql/data
sudo chown postgres /usr/local/pgsql/data
3.5 初始化数据库
切换到 postgres 用户:
sudo su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
3.6 启动数据库
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
查看状态:
ps aux | grep postgres
3.7 使用数据库
切换用户:
/usr/local/pgsql/bin/psql -d postgres
创建用户/库:
CREATE USER demo_user WITH PASSWORD 'DemoPwd123!';
CREATE DATABASE demo_db OWNER demo_user;
\q
3.8 设置开机自启(简单版)
编辑 /etc/systemd/system/postgresql.service
:
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=forking
User=postgres
ExecStart=/usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data -l /usr/local/pgsql/logfile
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D /usr/local/pgsql/data
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D /usr/local/pgsql/data
[Install]
WantedBy=multi-user.target
启用:
sudo systemctl daemon-reload
sudo systemctl enable postgresql
sudo systemctl start postgresql
四、常见问题与小白提醒
端口冲突:Postgres 默认端口是 5432,如被占用,修改
postgresql.conf
中的port
。远程连接:
编辑
postgresql.conf
,设置listen_addresses = '*'
。修改
pg_hba.conf
,增加一行:host all all 0.0.0.0/0 md5
重启服务后,确认防火墙放行 5432。
编码与字符集:推荐使用 UTF8。初始化时可指定:
initdb -D /usr/local/pgsql/data --encoding=UTF8 --locale=C
五、总结
Docker Compose 部署:最快捷,适合开发和测试环境。
源码编译安装:适合学习、定制和生产(需运维经验)。
小白建议优先使用 Docker,生产再考虑源码或官方二进制包。
默认评论
Halo系统提供的评论