init code
This commit is contained in:
43
scripts/db-lanuch-entrypoint.sh
Executable file
43
scripts/db-lanuch-entrypoint.sh
Executable file
@@ -0,0 +1,43 @@
|
||||
#!/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
|
Reference in New Issue
Block a user