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.
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'
.
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
Este método está recomendado solo para usuarios avanzados y a menudo requiere intervención manual al actualizar Immich.
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.
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)
- Asegúrese de que aún tiene pgvecto.rs instalado
- 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 ejecutandoapt install postgresql-NN-pgvector
, dondeNN
es su versión de Postgres (por ejemplo,16
) - Instale VectorChord
- Agregue
shared_preload_libraries= 'vchord.so, vectors.so'
a supostgresql.conf
, asegurándose de incluir ambosvchord.so
yvectors.so
. También puede incluir otras bibliotecas aquí si es necesario - Reinicie la base de datos de Postgres
- 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 - Inicie Immich y espere a que los registros
Reindexed face_index
yReindexed clip_index
sean generados - Si Immich no tiene permisos de superusuario, ejecute el comando SQL
DROP EXTENSION vectors;
- Elimine el esquema antiguo ejecutando
DROP SCHEMA vectors;
- Retire la entrada
vectors.so
de la configuración deshared_preload_libraries
- Reinicie la base de datos de Postgres
- Desinstale pgvecto.rs (por ejemplo,
apt-get purge vectors-pg14
en entornos basados en Debian, reemplazandopg14
según corresponda).pgvector
debe permanecer instalado ya que proporciona los tipos de datos utilizados porvchord
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)
- 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;
- 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[];
- Instale VectorChord
- 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);
- Inicie Immich y deje que cree nuevos índices usando VectorChord
Migrar desde pgvector
Pasos de migración
- 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 - Siga los requisitos previos para instalar VectorChord
- Si Immich no tiene permisos de superusuario, ejecute el comando SQL
CREATE EXTENSION vchord CASCADE;
- Elimine la variable de entorno
DB_VECTOR_EXTENSION=pgvector
, ya que hará que Immich siga utilizando pgvector si está configurada - 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.