diff --git a/nix/postgres/default.nix b/nix/postgres/default.nix index 72d39c1..e479c21 100644 --- a/nix/postgres/default.nix +++ b/nix/postgres/default.nix @@ -230,6 +230,16 @@ in ''; }; + initialDumps = lib.mkOption { + type = types.listOf types.path; + default = [ ]; + description = ''List of SQL dumps to run during the database initialization. + These dumps are loaded after `initalScript` and `initialDatabases`.''; + example = lib.literalExpression '' + [ ./foo.sql ./bar.sql ] + ''; + }; + initialScript = lib.mkOption { type = types.submodule ({ config, ... }: { options = { diff --git a/nix/postgres/postgres_test.nix b/nix/postgres/postgres_test.nix index bd0308e..eeb4dfb 100644 --- a/nix/postgres/postgres_test.nix +++ b/nix/postgres/postgres_test.nix @@ -4,6 +4,7 @@ listen_addresses = "127.0.0.1"; initialScript.before = "CREATE USER bar;"; initialScript.after = "CREATE DATABASE foo OWNER bar;"; + initialDumps = [ ./test.sql ]; }; settings.processes.test = let @@ -21,6 +22,9 @@ # initialScript.after test echo "SELECT 1 FROM pg_database WHERE datname = 'foo';" | psql -h 127.0.0.1 | grep -q 1 + + #intialDumps test + echo "SELECT * from users where user_name = 'test_user';" | psql -h 127.0.0.1 -d postgres | grep -q test_user ''; name = "postgres-test"; }; diff --git a/nix/postgres/setup-script.nix b/nix/postgres/setup-script.nix index 227a974..4fe8448 100644 --- a/nix/postgres/setup-script.nix +++ b/nix/postgres/setup-script.nix @@ -43,6 +43,15 @@ let else lib.optionalString config.createDatabase '' echo "CREATE DATABASE ''${USER:-$(id -nu)};" | psql -d postgres ''; + + runInitialDumps = + let + scriptCmd = dump: '' + psql -d postgres < ${dump} + ''; + in + builtins.concatStringsSep "\n" (map scriptCmd config.initialDumps); + runInitialScript = let scriptCmd = sqlScript: '' @@ -112,6 +121,7 @@ in ${runInitialScript.before} ${setupInitialDatabases} ${runInitialScript.after} + ${runInitialDumps} pg_ctl -D "$PGDATA" -m fast -w stop remove_tmp_pg_init_sock_dir "$PGHOST" else diff --git a/nix/postgres/test.sql b/nix/postgres/test.sql new file mode 100644 index 0000000..230ebe4 --- /dev/null +++ b/nix/postgres/test.sql @@ -0,0 +1,4 @@ +CREATE TABLE users (id INT PRIMARY KEY, user_name VARCHAR(25)); + +INSERT INTO users values (1, 'test_user'); +