diff --git a/immich/rootfs/etc/cont-init.d/99-run.sh b/immich/rootfs/etc/cont-init.d/99-run.sh index 3f6c56916..934389a3d 100755 --- a/immich/rootfs/etc/cont-init.d/99-run.sh +++ b/immich/rootfs/etc/cont-init.d/99-run.sh @@ -150,16 +150,16 @@ EOF bashio::log.info "Database setup completed successfully." } -# Function to check if vectors extension is enabled -check_vector_extension() { - echo "Checking if 'vectors' extension is enabled..." - RESULT=$(psql "postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOSTNAME:$DB_PORT" -tAc "SELECT extname FROM pg_extension WHERE extname = 'vectors';") +# Function to check if vectorchord extension is enabled +check_vectorchord_extension() { + echo "Checking if 'vectorchord' extension is enabled..." + RESULT=$(psql "postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOSTNAME:$DB_PORT" -tAc "SELECT extname FROM pg_extension WHERE extname = 'vectorchord';") - if [[ "$RESULT" == "vectors" ]]; then - echo "✅ 'vectors' extension is enabled." + if [[ "$RESULT" == "vectorchord" ]]; then + echo "✅ 'vectorchord' extension is enabled." exit 0 else - bashio::log.warning "❌ 'vectors' extension is NOT enabled." + bashio::log.warning "❌ 'vectorchord' extension is NOT enabled." return 1 fi } @@ -185,4 +185,4 @@ export_db_env setup_root_user setup_database -check_vector_extension +check_vectorchord_extension diff --git a/postgres/CHANGELOG.md b/postgres/CHANGELOG.md index 4ac1d43e0..cb36ddc8b 100644 --- a/postgres/CHANGELOG.md +++ b/postgres/CHANGELOG.md @@ -1,3 +1,6 @@ +- BREAKING CHANGE : please backup your database before updating +- Remove vector.rs and switch to VectorChord to support immich https://github.com/immich-app/immich/releases/tag/v1.133.0 + ## 15.7-29 (15-02-2025) - Minor bugs fixed ## 15.7-28 (15-02-2025) diff --git a/postgres/build.json b/postgres/build.json index 60490c5e2..6405c0efe 100644 --- a/postgres/build.json +++ b/postgres/build.json @@ -1,7 +1,7 @@ { "build_from": { - "aarch64": "tensorchord/pgvecto-rs:pg15-v0.3.0", - "amd64": "tensorchord/pgvecto-rs:pg15-v0.3.0", + "aarch64": "ghcr.io/immich-app/postgres:15-vectorchord0.3.0-pgvectors0.3.0", + "amd64": "ghcr.io/immich-app/postgres:15-vectorchord0.3.0-pgvectors0.3.0", "armv7": "postgres:15-alpine" }, "codenotary": { diff --git a/postgres/config.json b/postgres/config.json index 0f6ae916d..a6a9646f2 100644 --- a/postgres/config.json +++ b/postgres/config.json @@ -6,7 +6,7 @@ ], "backup": "cold", "codenotary": "alexandrep.github@gmail.com", - "description": "Postgres 15 with pgvecto.rs support", + "description": "Postgres 15 with VectorChord support", "environment": { "CONFIG_LOCATION": "/config/postgresql.conf", "PGDATA": "/config/database" diff --git a/postgres/rootfs/etc/cont-init.d/99-run.sh b/postgres/rootfs/etc/cont-init.d/99-run.sh index 29295d82f..54c04f6c2 100755 --- a/postgres/rootfs/etc/cont-init.d/99-run.sh +++ b/postgres/rootfs/etc/cont-init.d/99-run.sh @@ -9,7 +9,7 @@ set -e CONFIG_HOME="/config" PGDATA="${PGDATA:-/config/database}" PG_VERSION_FILE="$PGDATA/pg_major_version" -VECTOR_VERSION_FILE="$PGDATA/pgvector_version" +VECTORCHORD_VERSION_FILE="$PGDATA/vectorchord_version" # Define current PostgreSQL major version PG_MAJOR_VERSION="${PG_MAJOR:-15}" @@ -46,11 +46,11 @@ cd /config || true bashio::log.info "Starting PostgreSQL..." if [ "$(bashio::info.arch)" = "armv7" ]; then - bashio::log.warning "ARMv7 detected: Starting without vectors.so" + bashio::log.warning "ARMv7 detected: Starting without vectorchord.so" docker-entrypoint.sh postgres & true exit 0 else - docker-entrypoint.sh postgres -c shared_preload_libraries=vectors.so -c search_path="public, vectors" & true + docker-entrypoint.sh postgres -c shared_preload_libraries=vectorchord.so -c search_path="public, vectorchord" & true fi ############################### @@ -94,7 +94,7 @@ update_postgres() { export BACKUP_DIR="/config/backups" export PSQL_VERSION="$PG_MAJOR_VERSION" - # Install binaries + # Install binaries apt-get update &>/dev/null install -y procps rsync postgresql-$PG_MAJOR_VERSION postgresql-$OLD_PG_VERSION &>/dev/null @@ -110,65 +110,66 @@ update_postgres() { } ##################################### -# Enable & Upgrade pgvector.rs # +# Enable & Upgrade vectorchord # ##################################### -# Function: Check if 'vectors' extension is enabled -check_vector_extension() { - bashio::log.info "Checking if 'vectors' extension is enabled..." +# Function: Check if 'vectorchord' extension is enabled +check_vectorchord_extension() { + bashio::log.info "Checking if 'vectorchord' extension is enabled..." local result result=$(psql "postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOSTNAME:$DB_PORT" \ - -tAc "SELECT extname FROM pg_extension WHERE extname = 'vectors';") - if [[ "$result" == "vectors" ]]; then - bashio::log.info "'vectors' extension is enabled." + -tAc "SELECT extname FROM pg_extension WHERE extname = 'vectorchord';") + if [[ "$result" == "vectorchord" ]]; then + bashio::log.info "'vectorchord' extension is enabled." return 0 else - bashio::log.error "'vectors' extension is NOT enabled." + bashio::log.error "'vectorchord' extension is NOT enabled." return 1 fi } -# Function: Enable (or re-create) 'vectors' extension -enable_vector_extension() { - bashio::log.info "Enabling 'vectors' extension..." - psql "postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOSTNAME:$DB_PORT" -c "DROP EXTENSION IF EXISTS vectors; CREATE EXTENSION vectors;" >/dev/null 2>&1 - psql "postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOSTNAME:$DB_PORT" -c "ALTER EXTENSION vectors UPDATE; SELECT pgvectors_upgrade();" >/dev/null 2>&1 +# Function: Enable (or re-create) 'vectorchord' extension +enable_vectorchord_extension() { + bashio::log.info "Enabling 'vectorchord' extension..." + psql "postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOSTNAME:$DB_PORT" -c "DROP EXTENSION IF EXISTS vectorchord;" >/dev/null 2>&1 + psql "postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOSTNAME:$DB_PORT" -c "CREATE EXTENSION vectorchord;" >/dev/null 2>&1 + psql "postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOSTNAME:$DB_PORT" -c "ALTER EXTENSION vectorchord UPDATE;" >/dev/null 2>&1 } -# Function: Store the current pgvector.rs version in a file -store_vector_version() { +# Function: Store the current vectorchord version in a file +store_vectorchord_version() { local version version=$(psql "postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOSTNAME:$DB_PORT" \ - -tAc "SELECT extversion FROM pg_extension WHERE extname = 'vectors';") - echo "$version" > "$VECTOR_VERSION_FILE" + -tAc "SELECT extversion FROM pg_extension WHERE extname = 'vectorchord';") + echo "$version" > "$VECTORCHORD_VERSION_FILE" } -# Function: Detect previous and new pgvector.rs versions, and upgrade if needed -upgrade_vector_extension() { +# Function: Detect previous and new vectorchord versions, and upgrade if needed +upgrade_vectorchord_extension() { local current_version desired_version - current_version=$(cat "$VECTOR_VERSION_FILE" 2>/dev/null || echo "unknown") + current_version=$(cat "$VECTORCHORD_VERSION_FILE" 2>/dev/null || echo "unknown") desired_version=$(psql "postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOSTNAME:$DB_PORT" \ - -tAc "SELECT extversion FROM pg_extension WHERE extname = 'vectors';") + -tAc "SELECT extversion FROM pg_extension WHERE extname = 'vectorchord';") if [[ "$current_version" != "$desired_version" ]]; then - bashio::log.warning "Upgrading 'vectors' extension from version $current_version → $desired_version..." - psql "postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOSTNAME:$DB_PORT" -c "ALTER EXTENSION vectors UPDATE;" >/dev/null 2>&1 + bashio::log.warning "Upgrading 'vectorchord' extension from version $current_version → $desired_version..." + psql "postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOSTNAME@$DB_PORT" -c "ALTER EXTENSION vectorchord UPDATE;" >/dev/null 2>&1 - # Cleanup outdated indexes - bashio::log.info "Cleaning up outdated vector indexes..." + # Cleanup outdated indexes if needed (customize this line as needed for your DB schema) + bashio::log.info "Cleaning up outdated vector indexes (if any)..." psql "postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOSTNAME:$DB_PORT" \ -c "DROP INDEX IF EXISTS clip_index;" >/dev/null 2>&1 - # Store new pgvector version - echo "$desired_version" > "$VECTOR_VERSION_FILE" + # Store new vectorchord version + echo "$desired_version" > "$VECTORCHORD_VERSION_FILE" else - bashio::log.info "'vectors' extension is already at the latest version ($desired_version)." + bashio::log.info "'vectorchord' extension is already at the latest version ($desired_version)." fi } -# Function: Troubleshoot vector extension -troubleshoot_vector_extension() { - bashio::log.error "Troubleshooting pgvector.rs installation..." +# Function: Troubleshoot vectorchord extension +troubleshoot_vectorchord_extension() { + bashio::log.error "Troubleshooting vectorchord installation..." if ! pg_isready -h "$DB_HOSTNAME" -p "$DB_PORT" -U "$DB_USERNAME" >/dev/null 2>&1; then bashio::log.error "PostgreSQL is not running or unreachable." @@ -177,9 +178,9 @@ troubleshoot_vector_extension() { local ext_check ext_check=$(psql "postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOSTNAME:$DB_PORT" \ - -tAc "SELECT count(*) FROM pg_available_extensions WHERE name = 'vectors';") + -tAc "SELECT count(*) FROM pg_available_extensions WHERE name = 'vectorchord';") if [[ "$ext_check" -eq 0 ]]; then - bashio::log.error "'vectors' extension is missing. Ensure pgvector.rs is installed." + bashio::log.error "'vectorchord' extension is missing. Ensure vectorchord is installed." exit 1 fi } @@ -188,20 +189,20 @@ troubleshoot_vector_extension() { # Main Extension Handling # ################################### -# Store previous vector version +# Store previous vectorchord version update_postgres -if ! check_vector_extension; then - enable_vector_extension +if ! check_vectorchord_extension; then + enable_vectorchord_extension fi -# Store previous vector version -store_vector_version +# Store previous vectorchord version +store_vectorchord_version -# Upgrade vector extension if needed -upgrade_vector_extension +# Upgrade vectorchord extension if needed +upgrade_vectorchord_extension # Final verification -check_vector_extension || troubleshoot_vector_extension +check_vectorchord_extension || troubleshoot_vectorchord_extension bashio::log.info "All initialization steps completed successfully!" ) & true