From 7de29bd26f5e514e95d5d261c08f3029337eecb3 Mon Sep 17 00:00:00 2001 From: Oliver Charles Date: Sun, 6 Apr 2014 11:56:43 +0100 Subject: [PATCH] Create the 'postgres' superuser Old PostgreSQL installations were created using the 'root' database user. In this case, we need to create a new 'postgres' account, as we now assume that this is the superuser account. Unfortunately, these machines will be left with a 'root' user as well (which will have ownership of some databases). While PostgreSQL does let you rename superuser accounts, you can only do that when you are connected as a *different* database user. Thus we'd have to create a special superuser account to do the renaming. As we default to using ident authentication, we would have to create a system level user to do this. This all feels rather complex, so I'm currently opting to keep the 'root' user on these old machines. --- nixos/modules/services/databases/postgresql.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/nixos/modules/services/databases/postgresql.nix b/nixos/modules/services/databases/postgresql.nix index 33ee7244e3f4..08a9cdd9f5da 100644 --- a/nixos/modules/services/databases/postgresql.nix +++ b/nixos/modules/services/databases/postgresql.nix @@ -197,6 +197,7 @@ in fi rm -f ${cfg.dataDir}/*.conf touch "${cfg.dataDir}/.first_startup" + touch "${cfg.dataDir}/postgresql-user-created" fi ln -sfn "${configFile}" "${cfg.dataDir}/postgresql.conf" @@ -230,6 +231,11 @@ in sleep 0.1 done + if ! [ -e ${cfg.dataDir}/postgresql-user-created ]; then + createuser --superuser postgres + touch ${cfg.dataDir}/postgresql-user-created + fi + if test -e "${cfg.dataDir}/.first_startup"; then ${optionalString (cfg.initialScript != null) '' cat "${cfg.initialScript}" | su -s ${pkgs.stdenv.shell} postgres -c 'psql postgres'