Files
hx-ki.com2/COM2_FIX_POSTGRES_ADMIN_ONE_SHOT.sh
2026-03-06 15:22:40 +00:00

77 lines
2.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
C="hxki-postgres"
echo "=== FIX POSTGRES ADMIN (one-shot) ==="
docker inspect "$C" >/dev/null 2>&1 || { echo "FEHLT: $C"; exit 1; }
IMG="$(docker inspect "$C" --format '{{.Config.Image}}')"
echo "[0] Image: $IMG"
# Admin-User/PW/DB aus ENV lesen (Autorität: Container selbst)
get_env() {
local key="$1"
docker inspect "$C" --format '{{range .Config.Env}}{{println .}}{{end}}' \
| awk -F= -v k="$key" '$1==k{print substr($0, index($0,"=")+1)}' | head -n1
}
ADMIN_USER="$(get_env POSTGRES_USER || true)"
ADMIN_PW="$(get_env POSTGRES_PASSWORD || true)"
ADMIN_DB="$(get_env POSTGRES_DB || true)"
# Bitnami-Fallbacks
[ -n "${ADMIN_USER:-}" ] || ADMIN_USER="$(get_env POSTGRESQL_USERNAME || true)"
[ -n "${ADMIN_PW:-}" ] || ADMIN_PW="$(get_env POSTGRESQL_PASSWORD || true)"
[ -n "${ADMIN_DB:-}" ] || ADMIN_DB="$(get_env POSTGRESQL_DATABASE || true)"
# Default-DB-Fallback
[ -n "${ADMIN_DB:-}" ] || ADMIN_DB="postgres"
echo "[1] Detected ADMIN_USER=${ADMIN_USER:-<leer>} ADMIN_DB=${ADMIN_DB:-<leer>}"
[ -n "${ADMIN_USER:-}" ] || { echo "FAIL: Konnte ADMIN_USER nicht aus Container ENV lesen."; exit 1; }
[ -n "${ADMIN_PW:-}" ] || { echo "FAIL: Konnte ADMIN_PW nicht aus Container ENV lesen."; exit 1; }
# Zielwerte für n8n (aus n8n-Container-ENV Autorität!)
N8N="hxki-n8n"
docker inspect "$N8N" >/dev/null 2>&1 || { echo "FEHLT: $N8N"; exit 1; }
get_env_n8n() {
local key="$1"
docker inspect "$N8N" --format '{{range .Config.Env}}{{println .}}{{end}}' \
| awk -F= -v k="$key" '$1==k{print substr($0, index($0,"=")+1)}' | head -n1
}
PG_USER="$(get_env_n8n DB_POSTGRESDB_USER || true)"
PG_PW="$(get_env_n8n DB_POSTGRESDB_PASSWORD || true)"
PG_DB="$(get_env_n8n DB_POSTGRESDB_DATABASE || true)"
[ -n "${PG_USER:-}" ] || { echo "FAIL: n8n ENV fehlt DB_POSTGRESDB_USER"; exit 1; }
[ -n "${PG_PW:-}" ] || { echo "FAIL: n8n ENV fehlt DB_POSTGRESDB_PASSWORD"; exit 1; }
[ -n "${PG_DB:-}" ] || { echo "FAIL: n8n ENV fehlt DB_POSTGRESDB_DATABASE"; exit 1; }
echo "[2] Target (für n8n): user=$PG_USER db=$PG_DB"
echo "[3] Apply in Postgres (create/alter role + create db)"
docker exec -i "$C" sh -lc "export PGPASSWORD='${ADMIN_PW}'; psql -v ON_ERROR_STOP=1 -U '${ADMIN_USER}' -d '${ADMIN_DB}'" <<SQL
DO \$\$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname='${PG_USER}') THEN
CREATE ROLE ${PG_USER} LOGIN PASSWORD '${PG_PW}';
ELSE
ALTER ROLE ${PG_USER} WITH LOGIN PASSWORD '${PG_PW}';
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_database WHERE datname='${PG_DB}') THEN
CREATE DATABASE ${PG_DB} OWNER ${PG_USER};
END IF;
END
\$\$;
GRANT ALL PRIVILEGES ON DATABASE ${PG_DB} TO ${PG_USER};
SQL
echo "[4] Quick check: kann sich n8n-user anmelden?"
docker exec -i "$C" sh -lc "export PGPASSWORD='${PG_PW}'; psql -v ON_ERROR_STOP=1 -U '${PG_USER}' -d '${PG_DB}' -c 'select 1;' >/dev/null"
echo "OK: Postgres Credentials passen jetzt für n8n."
echo "=== ENDE ==="