From d5f0183153f85432a7d95dfe24708340bcfddd0b Mon Sep 17 00:00:00 2001 From: aszlig Date: Sun, 14 Jul 2013 05:01:48 +0200 Subject: [PATCH] postgresql: Add initialScript for initial SQL. Just like in the MySQL service module it really makes sense to provide a way to inject SQL on the first start of the database cluster. Signed-off-by: aszlig --- modules/services/databases/postgresql.nix | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/modules/services/databases/postgresql.nix b/modules/services/databases/postgresql.nix index bac32626254d..bd1eaa5e6bd7 100644 --- a/modules/services/databases/postgresql.nix +++ b/modules/services/databases/postgresql.nix @@ -87,6 +87,14 @@ in ''; }; + initialScript = mkOption { + default = null; + type = types.nullOr types.path; + description = '' + A file containing SQL statements to execute on first startup. + ''; + }; + authMethod = mkOption { default = " ident sameuser "; description = '' @@ -166,6 +174,7 @@ in chown -R postgres ${cfg.dataDir} su -s ${pkgs.stdenv.shell} postgres -c 'initdb -U root' rm -f ${cfg.dataDir}/*.conf + touch "${cfg.dataDir}/.first_startup" fi ln -sfn ${configFile} ${cfg.dataDir}/postgresql.conf @@ -193,6 +202,13 @@ in if ! kill -0 "$MAINPID"; then exit 1; fi sleep 0.1 done + + if test -e "${cfg.dataDir}/.first_startup"; then + ${optionalString (cfg.initialScript != null) '' + cat "${cfg.initialScript}" | psql postgres + ''} + rm -f "${cfg.dataDir}/.first_startup" + fi ''; unitConfig.RequiresMountsFor = "${cfg.dataDir}";