From c5a8cfe852cd83a486239fa2ad9d05984ae7dbc9 Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 15 Aug 2024 00:19:26 +0200 Subject: [PATCH] cluster/services/patroni: take over existing databases and users --- cluster/services/patroni/create-databases.nix | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/cluster/services/patroni/create-databases.nix b/cluster/services/patroni/create-databases.nix index 677e6a0..b37746b 100644 --- a/cluster/services/patroni/create-databases.nix +++ b/cluster/services/patroni/create-databases.nix @@ -49,7 +49,9 @@ in user = { destroyAfterDays = 0; create = user: psqlSecret "${genPassword} ${user}" '' - CREATE USER ${user} PASSWORD '@SECRET@'; + SELECT 'CREATE USER ${user}' + WHERE NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${user}')\gexec + ALTER USER ${user} PASSWORD '@SECRET@'; ''; destroy = psqlSecret "printenv OBJECT" '' DROP USER @SECRET@; @@ -59,7 +61,11 @@ in destroyAfterDays = 30; deps = [ "user" ]; create = db: psql '' - CREATE DATABASE ${db} OWNER ${cfg.databases.${db}.owner}; + SELECT 'CREATE DATABASE ${db} OWNER ${cfg.databases.${db}.owner}' + WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '${db}')\gexec + ''; + change = db: psql '' + ALTER DATABASE ${db} OWNER TO ${cfg.databases.${db}.owner}; ''; destroy = psqlSecret "printenv OBJECT" '' DROP DATABASE @SECRET@;