2
2
3
3
[ ! -z " $DEBUG " ] && set -x
4
4
5
- # first argument is the old version; a path 15 or 16
6
- if [[ $1 == /nix/store* ]]; then
7
- if [ ! -L " $1 /receipt.json" ] || [ ! -e " $1 /receipt.json" ]; then
8
- echo " ERROR: $1 does not look like a valid Postgres install"
5
+ # Function to build flake and return the output path
6
+ build_flake () {
7
+ local flake_url=" $1 "
8
+ local temp_dir=$( mktemp -d)
9
+ if ! nix build " $flake_url " -o " $temp_dir /result" ; then
10
+ echo " ERROR: Failed to build flake $flake_url "
9
11
exit 1
10
12
fi
11
- OLDVER=" $1 "
12
- elif [ " $1 " == " 15" ]; then
13
- PSQL15=@PSQL15_BINDIR@
14
- OLDVER=" $PSQL15 "
15
- elif [ " $1 " == " 16" ]; then
16
- PSQL16=@PSQL16_BINDIR@
17
- OLDVER=" $PSQL16 "
18
- else
19
- echo " Please provide a valid Postgres version (15 or 16), or a /nix/store path"
20
- exit 1
21
- fi
13
+ echo " $temp_dir /result"
14
+ }
22
15
23
- # second argument is the new version; 15 or 16
24
- if [[ $2 == /nix/store* ]]; then
25
- if [ ! -L " $2 /receipt.json" ] || [ ! -e " $2 /receipt.json" ]; then
26
- echo " ERROR: $1 does not look like a valid Postgres install"
27
- exit 1
28
- fi
29
- NEWVER=" $2 "
30
- elif [ " $2 " == " 15" ]; then
31
- PSQL15=@PSQL15_BINDIR@
32
- NEWVER=" $PSQL15 "
33
- elif [ " $2 " == " 16" ]; then
34
- PSQL16=@PSQL16_BINDIR@
35
- NEWVER=" $PSQL16 "
36
- echo " NEWVER IS $NEWVER "
37
- else
38
- echo " Please provide a valid Postgres version (15 or 16), or a /nix/store path"
39
- exit 1
40
- fi
16
+ # First argument is the old version flake URL
17
+ OLDVER=$( build_flake " $1 " )
18
+
19
+ # Second argument is the new version flake URL
20
+ NEWVER=$( build_flake " $2 " )
41
21
42
- # thid argument is the upgrade method: either pg_dumpall or pg_ugprade
22
+ # Third argument is the upgrade method: either pg_dumpall or pg_upgrade
43
23
if [ " $3 " != " pg_dumpall" ] && [ " $3 " != " pg_upgrade" ]; then
44
24
echo " Please provide a valid upgrade method (pg_dumpall or pg_upgrade)"
45
25
exit 1
46
26
fi
47
27
UPGRADE_METHOD=" $3 "
48
28
49
- echo " Old server build: PSQL $1 "
50
- echo " New server build: PSQL $2 "
29
+ echo " Old server build: $OLDVER "
30
+ echo " New server build: $NEWVER "
51
31
echo " Upgrade method: $UPGRADE_METHOD "
52
32
53
- PORTNO=" ${2 :- @ PGSQL_DEFAULT_PORT@ } "
33
+ PORTNO=" @PGSQL_DEFAULT_PORT@"
54
34
DATDIR=$( mktemp -d)
55
35
NEWDAT=$( mktemp -d)
56
36
PGUSER=${PGUSER:- postgres}
@@ -59,7 +39,7 @@ PG_PROVE=@PG_PROVE@
59
39
PGUPGRADE_TESTS=@PGUPGRADE_TESTS@
60
40
mkdir -p " $DATDIR " " $NEWDAT "
61
41
62
- echo " using temporary directory $DATDIR for PSQL $1 data, which will not be removed"
42
+ echo " using temporary directory $DATDIR for old data, which will not be removed"
63
43
echo " you are free to re-use this data directory at will"
64
44
echo
65
45
@@ -78,15 +58,14 @@ for x in "$DATDIR" "$NEWDAT"; do
78
58
$PSQL_CONF_FILE > " $x /postgresql.conf"
79
59
done
80
60
81
- echo " Starting first server (v ${1} ) to load data into the system"
61
+ echo " Starting first server to load data into the system"
82
62
$OLDVER /bin/pg_ctl start -D " $DATDIR "
83
63
84
64
PRIMING_SCRIPT=@PRIMING_SCRIPT@
85
65
MIGRATIONS_DIR=@MIGRATIONS_DIR@
86
66
87
67
echo " MIGRATIONS_DIR IS $MIGRATIONS_DIR "
88
68
89
- # $OLDVER/bin/psql -h localhost -d postgres -Xf "$PRIMING_SCRIPT"
90
69
for sql in " $MIGRATIONS_DIR " /db/init-scripts/* .sql; do
91
70
echo " $0 : running $sql "
92
71
$OLDVER /bin/psql -h localhost -d postgres -v ON_ERROR_STOP=1 --no-password --no-psqlrc -U postgres -f " $sql "
@@ -100,9 +79,6 @@ for sql in "$MIGRATIONS_DIR"/db/migrations/*.sql; do
100
79
done
101
80
102
81
if [ " $UPGRADE_METHOD " == " pg_upgrade" ]; then
103
- # echo "Ensuring proper permissions on $DATDIR"
104
- # chmod 700 "$DATDIR"
105
-
106
82
echo " Stopping old server"
107
83
$OLDVER /bin/pg_ctl stop -D " $DATDIR "
108
84
@@ -130,23 +106,34 @@ if [ "$UPGRADE_METHOD" == "pg_upgrade" ]; then
130
106
export PGBINOLD=" $OLDVER /bin"
131
107
export PGBINNEW=" $NEWVER /bin"
132
108
109
+ # Create a temporary directory for pg_upgrade to work in
110
+ UPGRADE_WORKDIR=$( mktemp -d)
111
+ echo " Using temporary directory for pg_upgrade: $UPGRADE_WORKDIR "
112
+
113
+ # Change to the temporary directory before running pg_upgrade
114
+ pushd " $UPGRADE_WORKDIR "
115
+
133
116
if ! $NEWVER /bin/pg_upgrade -U " $PGUSER " --check; then
134
117
echo " ERROR: pg_upgrade check failed"
118
+ popd
135
119
exit 1
136
120
fi
137
121
138
122
echo " pg_upgrade check passed, proceeding with migration"
139
123
$NEWVER /bin/pg_upgrade -U " $PGUSER "
140
- rm -f delete_old_cluster.sh # we don't need this
124
+
125
+ # Change back to the original directory
126
+ popd
127
+ echo " Migration complete, running post-migration checks"
141
128
echo " Migration complete, running post-migration checks"
129
+ echo " NEWDAT IS $NEWDAT "
142
130
$NEWVER /bin/pg_ctl start -D " $NEWDAT "
143
- echo " TURN off jit"
144
- POST_UPGRADE_EXTENSION_SCRIPT=$( mktemp)
145
- cat << EOF >> "$POST_UPGRADE_EXTENSION_SCRIPT "
131
+ echo " Turning off JIT"
132
+ cat << EOF > "$NEWDAT "/jit_off.sql
146
133
ALTER SYSTEM SET jit = off;
147
134
SELECT pg_reload_conf();
148
135
EOF
149
- " $NEWVER " /bin/psql -h localhost -U supabase_admin -p 5432 -d postgres -f " $POST_UPGRADE_EXTENSION_SCRIPT "
136
+ " $NEWVER " /bin/psql -h localhost -U supabase_admin -p 5432 -d postgres -f " $NEWDAT " /jit_off.sql
150
137
151
138
" $PG_PROVE " /bin/pg_prove --psql=" $NEWVER " /bin/psql -h localhost -U supabase_admin -d postgres -p 5432 \
152
139
" $PGUPGRADE_TESTS /pg_upgrade/tests/01-schema.sql"
158
145
exit 0
159
146
fi
160
147
161
-
162
148
# if [ "$UPGRADE_METHOD" == "pg_dumpall" ]; then
163
149
# SQLDAT="$DATDIR/dump.sql"
164
150
# echo "Exporting data via pg_dumpall ($SQLDAT)"
0 commit comments