Clean postgres database

This commit is contained in:
alexbelgium
2025-05-30 06:20:07 +02:00
parent 0b141f222c
commit e3355d3dca
3 changed files with 25 additions and 26 deletions

View File

@@ -1,9 +1,8 @@
## 15.7-37 (29-05-2025)
- BREAKING CHANGE : please backup your database before updating - BREAKING CHANGE : please backup your database before updating
- Automatically restarts immich addons after upgrade - Automatically restarts immich addons after upgrade
- Describe list of databases and extensions in log - Describe list of databases and extensions in log
- Improve upgrade system for postgres and extensions - Improve upgrade system for postgres and extensions
- Drop vectors from postgres database (not needed)
- Switch to new image supporting both vector.rs and VectorChord to support immich https://github.com/immich-app/immich/releases/tag/v1.133.0 - Switch to new image supporting both vector.rs and VectorChord to support immich https://github.com/immich-app/immich/releases/tag/v1.133.0
## 15.7-29 (15-02-2025) ## 15.7-29 (15-02-2025)

View File

@@ -39,5 +39,5 @@
"slug": "postgres", "slug": "postgres",
"udev": true, "udev": true,
"url": "https://github.com/alexbelgium/hassio-addons/tree/master/postgres", "url": "https://github.com/alexbelgium/hassio-addons/tree/master/postgres",
"version": "15.7-37" "version": "15.7-38"
} }

View File

@@ -84,36 +84,33 @@ install_vchord_and_vectors_for_old_pg() {
rm -f "$vectors_deb" rm -f "$vectors_deb"
} }
# ───---- NEW drop_vectors_everywhere ----────────────────────────────── # ───---- drop_vectors_extension ----──────────────────────────────
drop_vectors_everywhere() { drop_vectors_extension() {
local old_pgver="$1" local pgver="$1"
local databases="$2"
local extname="vectors"
local bin_dir="$BINARIES_DIR/$pgver/bin"
local dbs=""
# 1. start the old cluster on a private socket/port if [ "$databases" = "all" ]; then
su - postgres -c "$BINARIES_DIR/$old_pgver/bin/pg_ctl \ dbs=$(su - postgres -c \
-w -D '$PGDATA' -o \"-c config_file=/etc/postgresql/postgresql.conf \ "$bin_dir/psql -Atc \"SELECT datname FROM pg_database WHERE datistemplate = false AND datallowconn\"" )
-c listen_addresses='' -c port=65432\" start" else
dbs="$databases"
fi
# 2. loop over non-template databases for db in $dbs; do
for db in $(su - postgres -c \ # Does the extension exist in this db?
"$BINARIES_DIR/$old_pgver/bin/psql -Atc \
\"SELECT datname FROM pg_database
WHERE datistemplate = false AND datallowconn\""); do
# does the extension exist?
if su - postgres -c \ if su - postgres -c \
"$BINARIES_DIR/$old_pgver/bin/psql -d $db -Atc \ "$bin_dir/psql -d $db -Atc \"SELECT 1 FROM pg_extension WHERE extname='$extname'\"" | grep -q 1; then
\"SELECT 1 FROM pg_extension WHERE extname='vectors'\"" \ bashio::log.warning "Dropping extension $extname from DB $db"
| grep -q 1; then
bashio::log.warning "Dropping extension vectors from DB $db"
su - postgres -c \ su - postgres -c \
"$BINARIES_DIR/$old_pgver/bin/psql -d $db -c \ "$bin_dir/psql -d $db -c 'DROP EXTENSION $extname CASCADE;'"
'DROP EXTENSION vectors CASCADE;'"
fi fi
done done
# 3. stop the cluster again
su - postgres -c "$BINARIES_DIR/$old_pgver/bin/pg_ctl -w -D '$PGDATA' stop"
} }
upgrade_postgres_if_needed() { upgrade_postgres_if_needed() {
CLUSTER_VERSION=$(get_pgdata_version) CLUSTER_VERSION=$(get_pgdata_version)
IMAGE_VERSION="$PG_MAJOR_VERSION" IMAGE_VERSION="$PG_MAJOR_VERSION"
@@ -153,7 +150,7 @@ upgrade_postgres_if_needed() {
fi fi
# Drop vectors # Drop vectors
drop_vectors_everywhere "$CLUSTER_VERSION" drop_vectors_extension "$CLUSTER_VERSION" all
# Create postgresql.conf if not existing # Create postgresql.conf if not existing
cp -n --preserve=mode "/var/postgresql-conf-tpl/postgresql.hdd.conf" /etc/postgresql/postgresql.conf cp -n --preserve=mode "/var/postgresql-conf-tpl/postgresql.hdd.conf" /etc/postgresql/postgresql.conf
@@ -378,6 +375,9 @@ upgrade_extension_if_needed() {
done done
} }
# Drop vectors from the postgres database, this is not needed
drop_vectors_extension "$PG_MAJOR_VERSION" "postgres"
upgrade_extension_if_needed "vectors" upgrade_extension_if_needed "vectors"
upgrade_extension_if_needed "vchord" upgrade_extension_if_needed "vchord"