Skip to content

Commit 6e17f0b

Browse files
authored
chore: consolidate to just one start-client for postgres tooling (#1194)
* chore: consolidate to just one start-client for postgres tooling * fix: needed session_preload_libraries = 'supautils' in conf * chore: rm debug items --------- Co-authored-by: Sam Rose <[email protected]>
1 parent dd15fb6 commit 6e17f0b

File tree

4 files changed

+59
-91
lines changed

4 files changed

+59
-91
lines changed

flake.nix

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -342,19 +342,24 @@
342342
name = "pg_ident.conf";
343343
path = ./ansible/files/postgresql_config/pg_ident.conf.j2;
344344
};
345+
postgresqlExtensionCustomScriptsPath = builtins.path {
346+
name = "extension-custom-scripts";
347+
path = ./ansible/files/postgresql_extension_custom_scripts;
348+
};
345349
getkeyScript = ./nix/tests/util/pgsodium_getkey.sh;
346350
localeArchive = if pkgs.stdenv.isDarwin
347351
then "${pkgs.darwin.locale}/share/locale"
348352
else "${pkgs.glibcLocales}/lib/locale/locale-archive";
349353
in
350354
pkgs.runCommand "start-postgres-server" { } ''
351-
mkdir -p $out/bin $out/etc/postgresql-custom $out/etc/postgresql
355+
mkdir -p $out/bin $out/etc/postgresql-custom $out/etc/postgresql $out/extension-custom-scripts
352356
cp ${supautilsConfigFile} $out/etc/postgresql-custom/supautils.conf || { echo "Failed to copy supautils.conf"; exit 1; }
353357
cp ${pgconfigFile} $out/etc/postgresql/postgresql.conf || { echo "Failed to copy postgresql.conf"; exit 1; }
354358
cp ${loggingConfigFile} $out/etc/postgresql-custom/logging.conf || { echo "Failed to copy logging.conf"; exit 1; }
355359
cp ${readReplicaConfigFile} $out/etc/postgresql-custom/read-replica.conf || { echo "Failed to copy read-replica.conf"; exit 1; }
356360
cp ${pgHbaConfigFile} $out/etc/postgresql/pg_hba.conf || { echo "Failed to copy pg_hba.conf"; exit 1; }
357361
cp ${pgIdentConfigFile} $out/etc/postgresql/pg_ident.conf || { echo "Failed to copy pg_ident.conf"; exit 1; }
362+
cp -r ${postgresqlExtensionCustomScriptsPath}/* $out/extension-custom-scripts/ || { echo "Failed to copy custom scripts"; exit 1; }
358363
echo "Copy operation completed"
359364
chmod 644 $out/etc/postgresql-custom/supautils.conf
360365
chmod 644 $out/etc/postgresql/postgresql.conf
@@ -371,40 +376,31 @@
371376
--subst-var-by 'SUPAUTILS_CONF_FILE' "$out/etc/postgresql-custom/supautils.conf" \
372377
--subst-var-by 'PG_HBA' "$out/etc/postgresql/pg_hba.conf" \
373378
--subst-var-by 'PG_IDENT' "$out/etc/postgresql/pg_ident.conf" \
374-
--subst-var-by 'LOCALES' '${localeArchive}'
379+
--subst-var-by 'LOCALES' '${localeArchive}' \
380+
--subst-var-by 'EXTENSION_CUSTOM_SCRIPTS_DIR' "$out/extension-custom-scripts"
375381
376382
chmod +x $out/bin/start-postgres-server
377383
'';
378384

379-
# Start a version of the client.
380-
start-client = pkgs.runCommand "start-postgres-client" { } ''
381-
mkdir -p $out/bin
382-
substitute ${./nix/tools/run-client.sh.in} $out/bin/start-postgres-client \
383-
--subst-var-by 'PGSQL_DEFAULT_PORT' '${pgsqlDefaultPort}' \
384-
--subst-var-by 'PGSQL_SUPERUSER' '${pgsqlSuperuser}' \
385-
--subst-var-by 'PSQL15_BINDIR' '${basePackages.psql_15.bin}'
386-
chmod +x $out/bin/start-postgres-client
387-
'';
388-
389385
# Start a version of the client and runs migrations script on server.
390-
start-client-and-migrate =
386+
start-client =
391387
let
392388
migrationsDir = ./migrations/db;
393389
postgresqlSchemaSql = ./nix/tools/postgresql_schema.sql;
394390
pgbouncerAuthSchemaSql = ./ansible/files/pgbouncer_config/pgbouncer_auth_schema.sql;
395391
statExtensionSql = ./ansible/files/stat_extension.sql;
396392
in
397-
pkgs.runCommand "start-postgres-client-migrate" { } ''
393+
pkgs.runCommand "start-postgres-client" { } ''
398394
mkdir -p $out/bin
399-
substitute ${./nix/tools/run-client-migrate.sh.in} $out/bin/start-postgres-client-migrate \
395+
substitute ${./nix/tools/run-client.sh.in} $out/bin/start-postgres-client \
400396
--subst-var-by 'PGSQL_DEFAULT_PORT' '${pgsqlDefaultPort}' \
401397
--subst-var-by 'PGSQL_SUPERUSER' '${pgsqlSuperuser}' \
402398
--subst-var-by 'PSQL15_BINDIR' '${basePackages.psql_15.bin}' \
403399
--subst-var-by 'MIGRATIONS_DIR' '${migrationsDir}' \
404400
--subst-var-by 'POSTGRESQL_SCHEMA_SQL' '${postgresqlSchemaSql}' \
405401
--subst-var-by 'PGBOUNCER_AUTH_SCHEMA_SQL' '${pgbouncerAuthSchemaSql}' \
406402
--subst-var-by 'STAT_EXTENSION_SQL' '${statExtensionSql}'
407-
chmod +x $out/bin/start-postgres-client-migrate
403+
chmod +x $out/bin/start-postgres-client
408404
'';
409405

410406
# Migrate between two data directories.
@@ -559,7 +555,6 @@
559555
{
560556
start-server = mkApp "start-server" "start-postgres-server";
561557
start-client = mkApp "start-client" "start-postgres-client";
562-
start-client-and-migrate = mkApp "start-client-and-migrate" "start-postgres-client-migrate";
563558
start-replica = mkApp "start-replica" "start-postgres-replica";
564559
migration-test = mkApp "migrate-tool" "migrate-postgres";
565560
sync-exts-versions = mkApp "sync-exts-versions" "sync-exts-versions";

nix/tools/run-client-migrate.sh.in

Lines changed: 0 additions & 54 deletions
This file was deleted.

nix/tools/run-client.sh.in

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,35 @@ else
2020
echo "Please provide a valid Postgres version (15, 16, or orioledb-16)"
2121
exit 1
2222
fi
23-
23+
#vars for migration.sh
2424
export PATH=$BINDIR/bin:$PATH
25-
25+
export POSTGRES_DB=postgres
26+
export POSTGRES_HOST=localhost
27+
export POSTGRES_PORT=@PGSQL_DEFAULT_PORT@
2628
PORTNO="${2:-@PGSQL_DEFAULT_PORT@}"
29+
PGSQL_SUPERUSER=@PGSQL_SUPERUSER@
30+
MIGRATIONS_DIR=@MIGRATIONS_DIR@
31+
POSTGRESQL_SCHEMA_SQL=@POSTGRESQL_SCHEMA_SQL@
32+
PGBOUNCER_AUTH_SCHEMA_SQL=@PGBOUNCER_AUTH_SCHEMA_SQL@
33+
STAT_EXTENSION_SQL=@STAT_EXTENSION_SQL@
34+
psql -v ON_ERROR_STOP=1 --no-password --no-psqlrc -U "$PGSQL_SUPERUSER" -p "$PORTNO" -h localhost -d postgres <<-EOSQL
35+
create role postgres superuser login password '$PGPASSWORD';
36+
alter database postgres owner to postgres;
37+
EOSQL
38+
for sql in "$MIGRATIONS_DIR"/init-scripts/*.sql; do
39+
echo "$0: running $sql"
40+
psql -v ON_ERROR_STOP=1 --no-password --no-psqlrc -U postgres -p "$PORTNO" -h localhost -f "$sql" postgres
41+
done
42+
psql -v ON_ERROR_STOP=1 --no-password --no-psqlrc -U postgres -p "$PORTNO" -h localhost -c "ALTER USER supabase_admin WITH PASSWORD '$PGPASSWORD'"
43+
psql -v ON_ERROR_STOP=1 --no-password --no-psqlrc -U postgres -p "$PORTNO" -h localhost -d postgres -f "$PGBOUNCER_AUTH_SCHEMA_SQL"
44+
psql -v ON_ERROR_STOP=1 --no-password --no-psqlrc -U postgres -p "$PORTNO" -h localhost -d postgres -f "$STAT_EXTENSION_SQL"
45+
# run migrations as super user - postgres user demoted in post-setup
46+
for sql in "$MIGRATIONS_DIR"/migrations/*.sql; do
47+
echo "$0: running $sql"
48+
psql -v ON_ERROR_STOP=1 --no-password --no-psqlrc -U supabase_admin -p "$PORTNO" -h localhost -f "$sql" postgres
49+
done
50+
psql -v ON_ERROR_STOP=1 --no-password --no-psqlrc -U supabase_admin -p "$PORTNO" -h localhost -f "$POSTGRESQL_SCHEMA_SQL" postgres
51+
# TODO Do we need to reset stats when running migrations locally?
52+
#psql -v ON_ERROR_STOP=1 --no-password --no-psqlrc -U supabase_admin -p "$PORTNO" -h localhost -c 'SELECT extensions.pg_stat_statements_reset(); SELECT pg_stat_reset();' postgres || true
2753

2854
exec psql -U postgres -p "$PORTNO" -h localhost postgres

nix/tools/run-server.sh.in

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
#!/usr/bin/env bash
22
# shellcheck shell=bash
3-
43
[ ! -z "$DEBUG" ] && set -x
5-
64
# first argument should be '15' or '16' for the version
75
if [ "$1" == "15" ]; then
86
echo "Starting server for PSQL 15"
@@ -20,9 +18,7 @@ else
2018
echo "Please provide a valid Postgres version (15, 16 or orioledb-16)"
2119
exit 1
2220
fi
23-
2421
export PATH=$BINDIR/bin:$PATH
25-
2622
PGSQL_SUPERUSER=@PGSQL_SUPERUSER@
2723
PSQL_CONF_FILE=@PSQL_CONF_FILE@
2824
PGSODIUM_GETKEY_SCRIPT=@PGSODIUM_GETKEY@
@@ -32,6 +28,7 @@ LOGGING_CONFIG_FILE=@LOGGING_CONF_FILE@
3228
READREPL_CONFIG_FILE=@READREPL_CONF_FILE@
3329
PG_HBA_FILE=@PG_HBA@
3430
PG_IDENT_FILE=@PG_IDENT@
31+
EXTENSION_CUSTOM_SCRIPTS=@EXTENSION_CUSTOM_SCRIPTS_DIR@
3532
DATDIR=$(mktemp -d)
3633
LOCALE_ARCHIVE=@LOCALES@
3734
export LOCALE_ARCHIVE
@@ -41,22 +38,26 @@ export LC_ALL=en_US.UTF-8
4138
export LANG=en_US.UTF-8
4239
export LC_CTYPE=en_US.UTF-8
4340
mkdir -p "$DATDIR"
44-
4541
echo "NOTE: using port $PORTNO for server"
4642
echo "NOTE: using temporary directory $DATDIR for data, which will not be removed"
4743
echo "NOTE: you are free to re-use this data directory at will"
48-
4944
initdb -U "$PGSQL_SUPERUSER" -D "$DATDIR"
50-
5145
echo "NOTE: patching postgresql.conf files"
52-
53-
sed -e "\$a\\
54-
include = '$SUPAUTILS_CONFIG_FILE' \\
55-
pgsodium.getkey_script = '$PGSODIUM_GETKEY_SCRIPT'" \
56-
-e "s|data_directory = '/var/lib/postgresql/data'|data_directory = '$DATDIR'|" \
57-
-e "s|hba_file = '/etc/postgresql/pg_hba.conf'|hba_file = '$PG_HBA_FILE'|" \
58-
-e "s|ident_file = '/etc/postgresql/pg_ident.conf'|ident_file = '$PG_IDENT_FILE'|" \
59-
-e "s|include = '/etc/postgresql/logging.conf'|#&|" \
60-
-e "s|include = '/etc/postgresql-custom/read-replica.conf'|include = '$READREPL_CONFIG_FILE'|" \
61-
"$PSQL_CONF_FILE" > "$DATDIR/postgresql.conf"
62-
postgres -p "$PORTNO" -D "$DATDIR" -k /tmp
46+
cp "$PG_HBA_FILE" "$DATDIR/pg_hba.conf"
47+
cp "$PG_IDENT_FILE" "$DATDIR/pg_ident.conf"
48+
cp "$READREPL_CONFIG_FILE" "$DATDIR/read-replica.conf"
49+
cp -r "$EXTENSION_CUSTOM_SCRIPTS" "$DATDIR"
50+
sed "s|supautils.privileged_extensions_custom_scripts_path = '/etc/postgresql-custom/extension-custom-scripts'|supautils.privileged_extensions_custom_scripts_path = '$DATDIR/extension-custom-scripts'|" "$SUPAUTILS_CONFIG_FILE" > "$DATDIR/supautils.conf"
51+
sed -e "1i\\
52+
include = '$DATDIR/supautils.conf'" \
53+
-e "\$a\\
54+
pgsodium.getkey_script = '$PGSODIUM_GETKEY_SCRIPT'" \
55+
-e "s|data_directory = '/var/lib/postgresql/data'|data_directory = '$DATDIR'|" \
56+
-e "s|hba_file = '/etc/postgresql/pg_hba.conf'|hba_file = '$DATDIR/pg_hba.conf'|" \
57+
-e "s|ident_file = '/etc/postgresql/pg_ident.conf'|ident_file = '$DATDIR/pg_ident.conf'|" \
58+
-e "s|include = '/etc/postgresql/logging.conf'|#&|" \
59+
-e "s|include = '/etc/postgresql-custom/read-replica.conf'|include = '$DATDIR/read-replica.conf'|" \
60+
-e "\$a\\
61+
session_preload_libraries = 'supautils'" \
62+
"$PSQL_CONF_FILE" > "$DATDIR/postgresql.conf"
63+
postgres --config-file="$DATDIR/postgresql.conf" -p "$PORTNO" -D "$DATDIR" -k /tmp

0 commit comments

Comments
 (0)