@@ -28,6 +28,10 @@ cleanup() {
28
28
UPGRADE_STATUS=${1:- " failed" }
29
29
EXIT_CODE=${?:- 0}
30
30
31
+ if [ -d " ${MOUNT_POINT} /pgdata/pg_upgrade_output.d/" ]; then
32
+ cp -R " ${MOUNT_POINT} /pgdata/pg_upgrade_output.d/" /var/log/
33
+ fi
34
+
31
35
if [ -L /var/lib/postgresql ]; then
32
36
rm /var/lib/postgresql
33
37
mv /var/lib/postgresql.bak /var/lib/postgresql
@@ -42,9 +46,6 @@ cleanup() {
42
46
done
43
47
44
48
run_sql " ALTER USER postgres WITH NOSUPERUSER;"
45
- if [ -d " ${MOUNT_POINT} /pgdata/pg_upgrade_output.d/" ]; then
46
- cp -R " ${MOUNT_POINT} /pgdata/pg_upgrade_output.d/" /var/log/
47
- fi
48
49
49
50
umount $MOUNT_POINT
50
51
echo " ${UPGRADE_STATUS} " > /tmp/pg-upgrade-status
@@ -53,11 +54,19 @@ cleanup() {
53
54
}
54
55
55
56
function initiate_upgrade {
56
- BLOCK_DEVICE=$( lsblk -dpno name | grep -v " /dev/nvme[0-1]" )
57
57
echo " running" > /tmp/pg-upgrade-status
58
58
59
+ # awk NF==3 prints lines with exactly 3 fields, which are the block devices currently not mounted anywhere
60
+ # excluding nvme0 since it is the root disk
61
+ BLOCK_DEVICE=$( lsblk -dprno name,size,mountpoint,type | grep " disk" | grep -v " nvme0" | awk ' NF==3 { print $1; }' )
62
+
63
+ if [ -x " $( command -v blockdev) " ]; then
64
+ blockdev --rereadpt " $BLOCK_DEVICE "
65
+ fi
66
+
59
67
mkdir -p " $MOUNT_POINT "
60
68
mount " $BLOCK_DEVICE " " $MOUNT_POINT "
69
+ resize2fs " $BLOCK_DEVICE "
61
70
62
71
SHARED_PRELOAD_LIBRARIES=$( cat /etc/postgresql/postgresql.conf | grep shared_preload_libraries | sed " s/shared_preload_libraries = '\(.*\)'.*/\1/" )
63
72
PGDATAOLD=$( cat /etc/postgresql/postgresql.conf | grep data_directory | sed " s/data_directory = '\(.*\)'.*/\1/" )
@@ -73,6 +82,12 @@ function initiate_upgrade {
73
82
cp /root/pg_upgrade_pgsodium_getkey.sh " $PGSHARENEW /extension/pgsodium_getkey"
74
83
chmod +x " $PGSHARENEW /extension/pgsodium_getkey"
75
84
85
+ if [ -f " $MOUNT_POINT /pgsodium_root.key" ]; then
86
+ cp " $MOUNT_POINT /pgsodium_root.key" /etc/postgresql-custom/pgsodium_root.key
87
+ chown postgres:postgres /etc/postgresql-custom/pgsodium_root.key
88
+ chmod 600 /etc/postgresql-custom/pgsodium_root.key
89
+ fi
90
+
76
91
chown -R postgres:postgres " /tmp/pg_upgrade_bin/$PGVERSION "
77
92
78
93
for EXTENSION in " ${EXTENSIONS_TO_DISABLE[@]} " ; do
@@ -90,7 +105,9 @@ function initiate_upgrade {
90
105
WORKERS=$( nproc | awk ' { print ($1 == 1 ? 1 : $1 - 1) }' )
91
106
92
107
# upgrade job outputs a log in the cwd; needs write permissions
93
- cd /tmp
108
+ mkdir -p /tmp/pg_upgrade
109
+ chown -R postgres:postgres /tmp/pg_upgrade
110
+ cd /tmp/pg_upgrade
94
111
95
112
UPGRADE_COMMAND=$( cat << EOF
96
113
time ${PGBINNEW} /pg_upgrade \
@@ -108,17 +125,28 @@ EOF
108
125
mv /var/lib/postgresql /var/lib/postgresql.bak
109
126
ln -s /tmp/pg_upgrade_bin/15/share /var/lib/postgresql
110
127
128
+ if [ ! -L /var/lib/postgresql.bak/data ]; then
129
+ if [ -L /var/lib/postgresql/data ]; then
130
+ rm /var/lib/postgresql/data
131
+ fi
132
+ ln -s /var/lib/postgresql.bak/data /var/lib/postgresql/data
133
+ fi
134
+
111
135
systemctl stop postgresql
112
136
su -c " $UPGRADE_COMMAND " -s $SHELL postgres
113
137
114
138
# copying custom configurations
115
- mkdir -p $MOUNT_POINT /conf
116
- cp -R /etc/postgresql-custom/* $MOUNT_POINT /conf/
139
+ mkdir -p " $MOUNT_POINT /conf"
140
+ cp -R /etc/postgresql-custom/* " $MOUNT_POINT /conf/"
141
+
142
+ # copy sql files generated by pg_upgrade
143
+ mkdir -p " $MOUNT_POINT /sql"
144
+ cp /tmp/pg_upgrade/* .sql " $MOUNT_POINT /sql/" || true
117
145
118
146
cleanup " complete"
119
147
}
120
148
121
149
trap cleanup ERR
122
150
123
- initiate_upgrade >> /var/log/pg-upgrade-initiate.log 2>&1
124
- echo " Upgrade initiate job completed "
151
+ initiate_upgrade >> /var/log/pg-upgrade-initiate.log 2>&1 &
152
+ echo " Upgrade initiate job completed"
0 commit comments