@@ -173,40 +173,30 @@ in {
173173
174174 systemd . services =
175175 {
176- # Service that waits for PostgreSQL and this service's database to be ready
177- "${ serviceName } -wait-for-db" = mkIf config . services . postgresql . enable {
178- description = "Wait for ${ capitalizedName } PostgreSQL database to be ready" ;
179- after = [ "postgresql.service" "postgresql-setup.service" ] ;
180- requires = [ "postgresql.service" "postgresql-setup.service" ] ;
181- wantedBy = [ "multi-user.target" ] ;
182-
183- serviceConfig = {
184- Type = "oneshot" ;
185- RemainAfterExit = true ;
186- Restart = "on-failure" ;
187- RestartSec = "2s" ;
188- StartLimitBurst = 15 ;
189- StartLimitIntervalSec = "60s" ;
190- } ;
191-
192- script = ''
193- # Try to connect as the service user and run a simple query
194- ${ pkgs . postgresql } /bin/psql -U ${ cfg . user } -h /run/postgresql -d ${ cfg . user } -c "SELECT 1;" > /dev/null
195- echo "${ capitalizedName } PostgreSQL database is ready"
196- '' ;
197- } ;
198-
199176 # Ensure main service (radarr.service, etc.) starts after
200177 # directories are created and configured dependencies
201178 ${ serviceName } = {
202179 after =
203180 [ "nixflix-setup-dirs.service" ]
204- ++ ( optional config . services . postgresql . enable "${ serviceName } -wait-for-db .service" )
181+ ++ ( optional config . services . postgresql . enable "postgresql-setup .service" )
205182 ++ ( optional config . nixflix . mullvad . enable "mullvad-config.service" ) ;
206183 requires =
207184 [ "nixflix-setup-dirs.service" ]
208- ++ ( optional config . services . postgresql . enable "${ serviceName } -wait-for-db .service" ) ;
185+ ++ ( optional config . services . postgresql . enable "postgresql-setup .service" ) ;
209186 wants = optional config . nixflix . mullvad . enable "mullvad-config.service" ;
187+
188+ # Wait for PostgreSQL role to be ready before starting
189+ serviceConfig = mkIf config . services . postgresql . enable {
190+ ExecStartPre = pkgs . writeShellScript "${ serviceName } -wait-for-postgres" ''
191+ for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
192+ ${ pkgs . postgresql } /bin/pg_isready -h /run/postgresql && \
193+ ${ pkgs . postgresql } /bin/psql -h /run/postgresql -U postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='${ cfg . user } ';" | grep -q 1 && exit 0
194+ sleep 1
195+ done
196+ echo "PostgreSQL role ${ cfg . user } not available" >&2
197+ exit 1
198+ '' ;
199+ } ;
210200 } ;
211201 }
212202 # Only create config and rootfolders services if apiKeyPath is configured
0 commit comments