1. 直接连接容器执行

psql \

-d <数据库名> \ # 数据库名称

-U <用户名> \ # 用户账号

-f <文件绝对路径> # SQL脚本路径

[--password=<密码>] # 可选参数

示例操作

# Linux/macOS终端

docker exec -it postgres_container psql -d mydb -U admin -f /scripts/init.sql

2. 利用容器初始化机制

执行原理

PostgreSQL容器通过/docker-entrypoint-initdb.d/目录实现初始化脚本自动化执行

# 1. 创建初始化目录

mkdir -p ./docker-entrypoint-initdb.d/

# 2. 放置SQL文件

cp ./init.sql ./docker-entrypoint-initdb.d/

# 3. 构建镜像(Dockerfile示例)

FROM postgres:14

# 4. 启动容器

docker run -d \

--name my_postgres \

-e POSTGRES_PASSWORD=mysecretpassword \

-v ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d/ \

postgres:14

关键参数详解

参数 类型 说明

-d 或 --dbname String 目标数据库名称

-U 或 --username String PostgreSQL用户名(默认postgres)

-f 或 --file String 要执行的SQL文件路径

-W 或 --password String 强制密码认证(不推荐明文传输)

-v 或 --volume String 本地目录挂载到容器的映射关系

批量执行脚本

# Linux/macOS终端

for sql in ./scripts/*.sql; do

docker exec -it postgres_container psql -d mydb -U admin -f "$sql"

done

脚本执行日志

# 实时监控执行日志

docker logs -f postgres_container 2>&1 | tee execution.log


 

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐