diff --git a/nix/shell.nix b/nix/shell.nix index c5f8f9c2..c9ea77c7 100644 --- a/nix/shell.nix +++ b/nix/shell.nix @@ -53,13 +53,9 @@ let echo "🚀 Starting development services..." - # Check if already started - if [ -f "${servicesFlag}" ]; then - echo "✓ Services already running (remove ${servicesFlag} to force restart)" - exit 0 - fi - - # Check if cluster needs reinitialization (PG extensions or version changed) + # Check if PG version/extensions changed and reinit if needed. + # Must run BEFORE the servicesFlag guard so already-running clusters + # get reinitialized when extensions or versions change. pg_needs_reinit=false if [ -d "${pgDataDir}" ] && [ -f "${pgVersionFile}" ]; then if [ "$(cat ${pgVersionFile})" != "${pg}" ]; then @@ -68,18 +64,22 @@ let fi fi if [ -d "${pgDataDir}" ] && [ ! -f "${pgVersionFile}" ]; then - # Legacy cluster without version file, reinit to be safe pg_needs_reinit=true fi if $pg_needs_reinit; then - echo "🗑️ Removing old PostgreSQL cluster..." - # Stop if running + echo "🗑️ Stopping old PostgreSQL and removing cluster..." ${pg}/bin/pg_ctl -D ${pgDataDir} stop -m fast 2>/dev/null || true rm -rf ${pgDataDir} rm -f ${servicesFlag} fi + # Check if already started (with correct version) + if [ -f "${servicesFlag}" ]; then + echo "✓ Services already running (remove ${servicesFlag} to force restart)" + exit 0 + fi + # Initialize PostgreSQL if needed if [ ! -d "${pgDataDir}" ]; then echo "📦 Initializing PostgreSQL database..."