db-init: rename cloned source database to target's instance code (#347 fast-path correctness)
This commit is contained in:
@@ -69,6 +69,7 @@ spec:
|
||||
- |
|
||||
set -eu
|
||||
DBNAME="{{ .Values.instance.code }}"
|
||||
CLONE_FROM="{{ .Values.instance.cloneFromCode | default "" }}"
|
||||
echo "── ensuring database $DBNAME exists ──"
|
||||
# Wait for PG to accept connections (max 60s)
|
||||
for i in $(seq 1 30); do
|
||||
@@ -76,6 +77,25 @@ spec:
|
||||
echo "(waiting for postgres, $i/30)"
|
||||
sleep 2
|
||||
done
|
||||
# VolumeClone fast-path rename (ADR 0003 phase 4): when
|
||||
# spawn-env clones a source PG PVC, the data dir carries
|
||||
# source's database name. Rename it to target's instance
|
||||
# code BEFORE the existence check below, so the rest of
|
||||
# the script sees the correct DB name. Idempotent — if
|
||||
# CLONE_FROM == DBNAME or target already exists, skip.
|
||||
if [ -n "$CLONE_FROM" ] && [ "$CLONE_FROM" != "$DBNAME" ]; then
|
||||
if PGPASSWORD="$PASSWORD" psql -h "$HOST" -p "$PORT" -U "$USER" -d postgres -tAc \
|
||||
"SELECT 1 FROM pg_database WHERE datname = '$CLONE_FROM'" | grep -q 1; then
|
||||
if ! PGPASSWORD="$PASSWORD" psql -h "$HOST" -p "$PORT" -U "$USER" -d postgres -tAc \
|
||||
"SELECT 1 FROM pg_database WHERE datname = '$DBNAME'" | grep -q 1; then
|
||||
echo "── renaming cloned database $CLONE_FROM → $DBNAME ──"
|
||||
PGPASSWORD="$PASSWORD" psql -h "$HOST" -p "$PORT" -U "$USER" -d postgres \
|
||||
-c "ALTER DATABASE \"$CLONE_FROM\" RENAME TO \"$DBNAME\""
|
||||
else
|
||||
echo "(both $CLONE_FROM and $DBNAME exist — leaving rename to operator)"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
# createdb is idempotent if we wrap with an existence check.
|
||||
if PGPASSWORD="$PASSWORD" psql -h "$HOST" -p "$PORT" -U "$USER" -d postgres -tAc \
|
||||
"SELECT 1 FROM pg_database WHERE datname = '$DBNAME'" | grep -q 1; then
|
||||
|
||||
Reference in New Issue
Block a user