pg 17
sh
mkdir -p /opt/pg17
cd /opt/pg17
mkdir data backup
docker network create pg-17-netsh
vim .envenv
POSTGRES_DB=admin_db
POSTGRES_USER=admin
POSTGRES_PASSWORD=strong_password_here
TZ=Asia/Shanghaish
vim docker-compose.ymlyml
services:
postgres:
image: postgres:17-alpine
container_name: postgres
restart: unless-stopped
# environment:
# TZ: ${TZ}
# POSTGRES_DB: ${POSTGRES_DB}
# POSTGRES_USER: ${POSTGRES_USER}
# POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
env_file:
- .env
ports:
- "127.0.0.1:5432:5432"
volumes:
- ./data:/var/lib/postgresql/data
- ./backup:/backup
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER"]
interval: 10s
timeout: 5s
retries: 5
networks:
- pg-17-net
networks:
pg-17-net:
external: true创建业务账户
docker exec -it pg17 psql -U admin -d admin_db例如:
sql
CREATE USER wanx_user WITH PASSWORD 'wanx123123';
CREATE DATABASE wanx3 OWNER wanx_user;
\connect wanx3
-- 把 public schema 的 owner 改成 wanx_user
ALTER SCHEMA public OWNER TO wanx_user;
-- 业务表默认创建在 public schema 下,所以应用用户必须能在 public 里建表。
GRANT ALL ON SCHEMA public TO wanx_user;sql
-- 删除
DROP USER wanx_user;
-- 查询目前所有 user
SELECT rolname AS 用户名, rolsuper, rolcreatedb, rolcanlogin
FROM pg_roles
WHERE rolcanlogin = true; -- 只查可登录的普通用户init 脚本创建
也可选择初始化脚本方案,但是初始化仅仅在 init 时生效。
/opt/pg17/init/001-init.sqlvolumes:
- ./init:/docker-entrypoint-initdb.d