Saltar al contenido principal

Postgres preexistente

Aunque no es oficialmente recomendado, es posible ejecutar Immich usando un servidor Postgres preexistente. Para usar esta configuración, debe tener un nivel básico de familiaridad con Postgres y la línea de comandos de Linux. Si no cuenta con estos conocimientos, recomendamos utilizar la configuración predeterminada con un contenedor dedicado de Postgres.

Por defecto, Immich espera permisos de superusuario en la base de datos de Postgres y requiere que ciertas extensiones estén instaladas. Esta guía detalla los pasos necesarios para preparar un servidor Postgres preexistente que pueda ser utilizado por Immich.

consejo

Ejecutar con un servidor Postgres preexistente puede desbloquear funciones administrativas poderosas, incluyendo replicación lógica y copias de seguridad de registros WAL en modo streaming utilizando programas como pgBackRest o Barman.

Requisitos previos

Debe instalar pgvector (>= 0.7.0, < 1.0.0), ya que es un requisito previo para vchord. La forma más fácil de hacer esto en Debian/Ubuntu es agregando el repositorio Apt de PostgreSQL y luego ejecutando apt install postgresql-NN-pgvector, donde NN es su versión de Postgres (por ejemplo, 16).

Debe instalar VectorChord en su instancia de Postgres utilizando estas instrucciones. Después de la instalación, agregue shared_preload_libraries = 'vchord.so' a su postgresql.conf. Si ya tiene algunas shared_preload_libraries configuradas, puede separar cada extensión con una coma. Por ejemplo, shared_preload_libraries = 'pg_stat_statements, vchord.so'.

nota

Se sabe que Immich funciona con versiones de Postgres >= 14, < 18.

Asegúrese de que la versión instalada de VectorChord sea compatible con su versión de Immich. El rango aceptado actualmente para VectorChord es >= 0.3.0, < 0.5.0.

Especificar la URL de conexión

Puede conectarse a su servidor de Postgres preexistente configurando la variable de entorno DB_URL en el archivo .env.

DB_URL='postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename'

# requerir una conexión SSL a Postgres
# DB_URL='postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename?sslmode=require'

# requerir una conexión SSL, pero no verificar el nombre del certificado
# DB_URL='postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename?sslmode=require&sslmode=no-verify'

Con permisos de superusuario

Por lo general, Immich espera permisos de superusuario en la base de datos, lo que se puede otorgar ejecutando ALTER USER <immichdbusername> WITH SUPERUSER; en la consola de psql. Si prefiere no otorgar permisos de superusuario, siga las instrucciones en la siguiente sección.

Sin permisos de superusuario

precaución

Este método está recomendado solo para usuarios avanzados y a menudo requiere intervención manual al actualizar Immich.

peligro

Actualmente, las copias de seguridad automatizadas requieren permisos de superusuario debido al uso de pg_dumpall.

Immich puede funcionar sin permisos de superusuario siguiendo las instrucciones a continuación en el prompt de psql para preparar la base de datos.

Configurar Postgres para Immich
CREATE DATABASE <immichdatabasename>;
\c <immichdatabasename>
BEGIN;
ALTER DATABASE <immichdatabasename> OWNER TO <immichdbusername>;
CREATE EXTENSION vchord CASCADE;
CREATE EXTENSION earthdistance CASCADE;
COMMIT;

Actualizar VectorChord

Cuando instale una nueva versión de VectorChord, deberá actualizar manualmente la extensión y reindexar conectándose a la base de datos de Immich y ejecutando:

ALTER EXTENSION vchord UPDATE;
REINDEX INDEX face_index;
REINDEX INDEX clip_index;

Migrar a VectorChord

VectorChord es la extensión sucesora de pgvecto.rs, permitiendo un rendimiento más alto, menor uso de memoria y resultados de mayor calidad para búsqueda inteligente y reconocimiento facial.

Migrar desde pgvecto.rs

El soporte para pgvecto.rs será eliminado en una próxima versión, por lo que recomendamos que todos los usuarios que actualmente usan pgvecto.rs migren a VectorChord cuando les sea conveniente. Hay dos enfoques principales para hacerlo.

La opción más sencilla es tener ambas extensiones instaladas durante la migración:

Pasos de migración (automática)
  1. Asegúrese de que aún tiene pgvecto.rs instalado
  2. Instale pgvector (>= 0.7.0, < 1.0.0). La forma más fácil de hacer esto es en Debian/Ubuntu agregando el repositorio Apt de PostgreSQL y luego ejecutando apt install postgresql-NN-pgvector, donde NN es su versión de Postgres (por ejemplo, 16)
  3. Instale VectorChord
  4. Agregue shared_preload_libraries= 'vchord.so, vectors.so' a su postgresql.conf, asegurándose de incluir ambos vchord.so y vectors.so. También puede incluir otras bibliotecas aquí si es necesario
  5. Reinicie la base de datos de Postgres
  6. Si Immich no tiene permisos de superusuario, ejecute el comando SQL CREATE EXTENSION vchord CASCADE; usando psql o su cliente de base de datos preferido
  7. Inicie Immich y espere a que los registros Reindexed face_index y Reindexed clip_index sean generados
  8. Si Immich no tiene permisos de superusuario, ejecute el comando SQL DROP EXTENSION vectors;
  9. Elimine el esquema antiguo ejecutando DROP SCHEMA vectors;
  10. Retire la entrada vectors.so de la configuración de shared_preload_libraries
  11. Reinicie la base de datos de Postgres
  12. Desinstale pgvecto.rs (por ejemplo, apt-get purge vectors-pg14 en entornos basados en Debian, reemplazando pg14 según corresponda). pgvector debe permanecer instalado ya que proporciona los tipos de datos utilizados por vchord

Si no es posible tener VectorChord y pgvecto.rs instalados al mismo tiempo, puede realizar la migración con pasos más manuales:

Pasos de migración (manual)
  1. Mientras pgvecto.rs aún está instalado, ejecute el siguiente comando SQL usando psql o su cliente de base de datos preferido. Tenga en cuenta el número que genera este comando, ya que lo necesitará más adelante
SELECT atttypmod as dimsize
FROM pg_attribute f
JOIN pg_class c ON c.oid = f.attrelid
WHERE c.relkind = 'r'::char
AND f.attnum > 0
AND c.relname = 'smart_search'::text
AND f.attname = 'embedding'::text;
  1. Elimine las referencias a pgvecto.rs usando los siguientes comandos SQL
DROP INDEX IF EXISTS clip_index;
DROP INDEX IF EXISTS face_index;
ALTER TABLE smart_search ALTER COLUMN embedding SET DATA TYPE real[];
ALTER TABLE face_search ALTER COLUMN embedding SET DATA TYPE real[];
  1. Instale VectorChord
  2. Cambie las columnas nuevamente a los tipos de vectores adecuadas, reemplazando <number> con el número del paso 1
CREATE EXTENSION IF NOT EXISTS vchord CASCADE;
ALTER TABLE smart_search ALTER COLUMN embedding SET DATA TYPE vector(<number>);
ALTER TABLE face_search ALTER COLUMN embedding SET DATA TYPE vector(512);
  1. Inicie Immich y deje que cree nuevos índices usando VectorChord

Migrar desde pgvector

Pasos de migración
  1. Asegúrese de tener al menos la versión 0.7.0 de pgvector instalada. Si es inferior a esto, actualícela y ejecute el comando SQL ALTER EXTENSION vector UPDATE; usando psql o su cliente de base de datos preferido
  2. Siga los requisitos previos para instalar VectorChord
  3. Si Immich no tiene permisos de superusuario, ejecute el comando SQL CREATE EXTENSION vchord CASCADE;
  4. Elimine la variable de entorno DB_VECTOR_EXTENSION=pgvector, ya que hará que Immich siga utilizando pgvector si está configurada
  5. Inicie Immich y deje que cree nuevos índices usando VectorChord

Tenga en cuenta que VectorChord utiliza tipos de pgvector, por lo que no debe desinstalar pgvector después de seguir estos pasos.