43 lines
1.6 KiB
Bash
Executable File
43 lines
1.6 KiB
Bash
Executable File
#!/bin/sh
|
||
set -e # 脚本执行出错时立即退出
|
||
|
||
# --------------------------
|
||
# 1. 启动PostgreSQL服务(后台运行)
|
||
# --------------------------
|
||
# 调用PostgreSQL默认初始化逻辑(即使数据目录已存在,也会启动服务)
|
||
docker-entrypoint.sh postgres &
|
||
# 记录PostgreSQL主进程ID,后续等待用
|
||
PG_PID=$!
|
||
|
||
# --------------------------
|
||
# 2. 等待数据库服务就绪(避免脚本执行时数据库未启动)
|
||
# --------------------------
|
||
echo "等待PostgreSQL服务就绪..."
|
||
# 将所有参数放在同一行,避免换行解析问题
|
||
until pg_isready -U "$POSTGRES_USER" -d "$POSTGRES_DB" -h "localhost" -p "5432"; do
|
||
sleep 1 # 每1秒检查一次
|
||
done
|
||
echo "PostgreSQL服务已就绪,开始强制执行脚本..."
|
||
|
||
# --------------------------
|
||
# 3. 强制执行所有挂载的SQL脚本(每次启动都执行)
|
||
# --------------------------
|
||
# 遍历/docker-entrypoint-initdb.d目录下的所有.sql脚本(按文件名排序)
|
||
for script in /docker-entrypoint-initdb.d/*.sql; do
|
||
if [ -f "$script" ]; then # 确保是文件(排除目录)
|
||
echo "正在执行脚本: $script"
|
||
# 用psql客户端执行脚本,指定用户和数据库
|
||
psql -U "$POSTGRES_USER" \
|
||
-d "$POSTGRES_DB" \
|
||
-h "localhost" \
|
||
-p "5432" \
|
||
-f "$script" \
|
||
--set=ON_ERROR_STOP=1 # 脚本执行出错时停止(可选,根据需求调整)
|
||
echo "脚本执行完成: $script"
|
||
fi
|
||
done
|
||
|
||
# --------------------------
|
||
# 4. 等待PostgreSQL主进程(避免容器启动后退出)
|
||
# --------------------------
|
||
wait $PG_PID |