nixos/postgresql: move postStart into separate unit

This avoids restarting the postgresql server, when only ensureDatabases
or ensureUsers have been changed. It will also allow to properly wait
for recovery to finish later.

To wait for "postgresql is ready" in other services, we now provide a
postgresql.target.

Resolves #400018

Co-authored-by: Marcel <me@m4rc3l.de>
This commit is contained in:
Wolfgang Walther
2025-05-02 14:58:46 +02:00
parent c119848700
commit 41c5662cbe
139 changed files with 391 additions and 424 deletions

View File

@@ -28,7 +28,7 @@ let
testScript = ''
start_all()
machine.wait_for_unit("multi-user.target")
machine.wait_for_unit("postgresql.service")
machine.wait_for_unit("postgresql.target")
with subtest("Setup"):
machine.succeed("sudo -u postgres psql --command 'create database demo'")

View File

@@ -40,7 +40,7 @@ let
in
''
start_all()
master.wait_for_unit("postgresql")
master.wait_for_unit("postgresql.target")
master.succeed(
"${pkgs.sudo}/bin/sudo -u ${sqlSU} ${pgProve}/bin/pg_prove -d postgres -v -f ${pgjwt.src}/test.sql"
)

View File

@@ -29,7 +29,7 @@ let
testScript = ''
machine.start()
machine.wait_for_unit("postgresql.service")
machine.wait_for_unit("postgresql.target")
with subtest("JIT is enabled"):
machine.succeed("sudo -u postgres psql <<<'show jit;' | grep 'on'")

View File

@@ -62,7 +62,7 @@ let
testScript = ''
# make an initial base backup
machine.wait_for_unit("postgresql")
machine.wait_for_unit("postgresql.target")
machine.wait_for_unit("postgresql-wal-receiver-main")
# WAL receiver healthchecks PG every 5 seconds, so let's be sure they have connected each other
# required only for 9.4
@@ -99,7 +99,7 @@ let
machine.systemctl("start postgresql")
machine.wait_for_file("${postgresqlDataDir}/recovery.done")
machine.systemctl("restart postgresql")
machine.wait_for_unit("postgresql")
machine.wait_for_unit("postgresql.target")
# check that our records have been restored
machine.succeed(

View File

@@ -82,7 +82,7 @@ let
machine.start()
machine.wait_for_unit("postgresql")
machine.wait_for_unit("postgresql.target")
with subtest("Postgresql is available just after unit start"):
machine.succeed(
@@ -94,7 +94,7 @@ let
import time
time.sleep(2)
machine.start()
machine.wait_for_unit("postgresql")
machine.wait_for_unit("postgresql.target")
machine.fail(check_count("SELECT * FROM sth;", 3))
machine.succeed(check_count("SELECT * FROM sth;", 5))
@@ -219,7 +219,7 @@ let
''
import json
machine.start()
machine.wait_for_unit("postgresql")
machine.wait_for_unit("postgresql.target")
with subtest("All user permissions are set according to the ensureClauses attr"):
clauses = json.loads(

View File

@@ -27,7 +27,7 @@ let
};
testScript = ''
machine.wait_for_unit("postgresql")
machine.wait_for_unit("postgresql.target")
machine.succeed(
"sudo -u postgres psql -qAt -f ${./wal2json/example2.sql} postgres > /tmp/example2.out"
)