From dc2605fb3972152266387eaf9c307b46bef82577 Mon Sep 17 00:00:00 2001 From: wangbo Date: Mon, 3 Aug 2026 09:18:42 +0800 Subject: [PATCH] =?UTF-8?q?fix(dev):=20=E7=AD=89=E5=BE=85=20PostgreSQL=20?= =?UTF-8?q?=E5=AE=B9=E5=99=A8=E5=B0=B1=E7=BB=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 数据库初始化脚本在容器停止时主动启动,并在执行 psql 前等待 PostgreSQL 就绪;若容器提前退出或超过等待时间则返回明确错误。 验证:bash -n、ShellCheck、git diff --check 与 pnpm db:create 通过。 --- scripts/create-database.sh | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/scripts/create-database.sh b/scripts/create-database.sh index 7b77c4b..0ab518a 100755 --- a/scripts/create-database.sh +++ b/scripts/create-database.sh @@ -23,6 +23,35 @@ fi PGUSER="${AI_GATEWAY_PG_USER:-easyai}" DB_NAME="${AI_GATEWAY_DATABASE_NAME:-easyai_ai_gateway}" +wait_for_postgres() { + local status + + status="$(docker inspect "$CONTAINER" --format '{{.State.Status}}')" + if [[ "$status" != "running" ]]; then + echo "[ai-gateway] starting PostgreSQL container: ${CONTAINER}" + docker start "$CONTAINER" >/dev/null + fi + + for _ in {1..30}; do + if docker exec "$CONTAINER" \ + pg_isready -U "$PGUSER" -d postgres >/dev/null 2>&1; then + return 0 + fi + + status="$(docker inspect "$CONTAINER" --format '{{.State.Status}}')" + if [[ "$status" != "running" ]]; then + echo "[ai-gateway] PostgreSQL container stopped before becoming ready: ${CONTAINER} (${status})" >&2 + return 1 + fi + sleep 1 + done + + echo "[ai-gateway] timed out waiting for PostgreSQL container: ${CONTAINER}" >&2 + return 1 +} + +wait_for_postgres + version_num="$( docker exec "$CONTAINER" \ psql -U "$PGUSER" -d postgres -tAc "SHOW server_version_num" \