メインコンテンツにスキップ

既存のPostgres

公式には推奨されていませんが、既存のPostgresサーバーを使用してImmichを実行することが可能です。この設定を使用するには、PostgresとLinuxコマンドラインの基礎的な知識を持っている必要があります。これらの知識がない場合は、専用のPostgresコンテナを使用するデフォルト設定を推奨します。

デフォルトでは、ImmichはPostgresデータベースでスーパーユーザの権限を必要とし、特定の拡張機能がインストールされていることを想定しています。このガイドでは、既存のPostgresサーバーをImmichで使用するために必要な準備手順を説明します。

ヒント

既存のPostgresサーバーを使用することで、pgBackRestやBarmanのようなプログラムを使用して論理的レプリケーションやストリーミング型の書き込み前ログバックアップなどの強力な管理機能を解放することができます。

前提条件

pgvector>= 0.7.0, < 1.0.0)をインストールする必要があります。これはvchordの前提条件です。 Debian/Ubuntuでこれを行う最も簡単な方法はPostgreSQL Apt リポジトリを追加し、 apt install postgresql-NN-pgvectorを実行することです(NNはPostgresのバージョン、例: 16)。

PostgresのインスタンスにVectorChordをインストールする必要があります。その後の設定として、postgresql.confshared_preload_libraries = 'vchord.so'を追加します。すでにいくつかのshared_preload_librariesが設定されている場合、各拡張機能をカンマで区切ることができます。例えば、shared_preload_libraries = 'pg_stat_statements, vchord.so'のように記述します。

ノート

ImmichはPostgresバージョン>= 14, < 18で動作することが知られています。

インストールされたVectorChordのバージョンがImmichのバージョンと互換性があることを確認してください。現在の受け入れ範囲は>= 0.3.0, < 0.5.0です。

接続URLの指定

DB_URL環境変数を.envファイルに設定することで、既存のPostgresサーバーに接続できます。

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

# PostgresへのSSL接続を要求する
# DB_URL='postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename?sslmode=require'

# SSL接続を要求するが、証明書名のチェックを強制しない
# DB_URL='postgresql://immichdbusername:immichdbpassword@postgreshost:postgresport/immichdatabasename?sslmode=require&sslmode=no-verify'

スーパーユーザ権限がある場合

通常、Immichはデータベースでスーパーユーザー権限を必要とし、psqlコンソールでALTER USER <immichdbusername> WITH SUPERUSER;を実行することで付与できます。スーパーユーザー権限を付与したくない場合は、次のセクションの指示に従ってください。

スーパーユーザ権限がない場合

注意

この方法は上級ユーザーのみに推奨され、Immichの更新時に手動の介入が頻繁に必要となる場合があります。

危険

現在、自動バックアップにはpg_dumpallの使用によりスーパーユーザー権限が必要です。

以下の指示に従ってpsqlプロンプトでデータベースを準備することで、Immichはスーパーユーザー権限なしで動作可能です。

PostgresをImmich用にセットアップ
CREATE DATABASE <immichdatabasename>;
\c <immichdatabasename>
BEGIN;
ALTER DATABASE <immichdatabasename> OWNER TO <immichdbusername>;
CREATE EXTENSION vchord CASCADE;
CREATE EXTENSION earthdistance CASCADE;
COMMIT;

VectorChordのアップデート

新しいバージョンのVectorChordをインストールする際、Immichデータベースに接続し、以下を実行して拡張機能を手動で更新し、再インデックス化する必要があります:

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

VectorChordへの移行

VectorChordはpgvecto.rsの後継拡張機能であり、スマート検索や顔認識においてより高性能で低メモリ使用率、高品質な結果を提供します。

pgvecto.rsからの移行

pgvecto.rsのサポートは将来のリリースで削除される予定のため、現在pgvecto.rsを使用しているすべてのユーザーに、都合の良いときにVectorChordへの移行を推奨します。移行方法は主に2つあります。

最も簡単な方法は、移行中に両方の拡張機能をインストールしておくことです:

移行手順(自動)
  1. pgvecto.rsがまだインストールされていることを確認してください
  2. pgvector>= 0.7.0, < 1.0.0)をインストールします。最も簡単な方法はDebian/UbuntuでPostgreSQL Aptリポジトリを追加し、その後apt install postgresql-NN-pgvectorを実行することです(NNはPostgresバージョン、例: 16
  3. VectorChordをインストール
  4. shared_preload_libraries= 'vchord.so, vectors.so'postgresql.confに追加し、vchord.sovectors.soの両方を含むようにします。他のライブラリが必要な場合はここに追加することもできます
  5. Postgresデータベースを再起動してください
  6. Immichにスーパーユーザー権限がない場合、SQLコマンドCREATE EXTENSION vchord CASCADE;をpsqlまたはデータベースクライアントを使用して実行します
  7. Immichを開始し、ログReindexed face_indexおよびReindexed clip_indexが出力されるのを待ちます
  8. Immichにスーパーユーザー権限がない場合、SQLコマンドDROP EXTENSION vectors;を実行します
  9. 以下を実行して古いスキーマを削除します:DROP SCHEMA vectors;
  10. shared_preload_libraries設定からvectors.soエントリを削除します
  11. Postgresデータベースを再起動してください
  12. pgvecto.rsをアンインストールします(例: Debianベースの環境でapt-get purge vectors-pg14、適切にpg14を置き換えてください)。pgvectorvchordが使用するデータ型を提供するため、インストールされたままである必要があります

VectorChordとpgvecto.rsを同時にインストールすることができない場合、以下のようにもっと手動の手順で移行を行います:

移行手順(手動)
  1. pgvecto.rsがまだインストールされている間に、以下のSQLコマンドをpsqlまたは任意のデータベースクライアントを使用して実行します。このコマンドによって出力された番号を後で使用する必要があるため、メモを取ります
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. 以下のSQLコマンドを実行してpgvecto.rsへの参照を削除します
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. VectorChordをインストール
  2. 以下を実行してカラムを適切なベクトル型に戻します。<number>には手順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. Immichを開始し、VectorChordを使用して新しいインデックスを作成させます

pgvectorからの移行

移行手順
  1. pgvectorのバージョンが少なくとも0.7.0であることを確認します。これがそれ以下の場合、アップグレードを実行し、以下のSQLコマンドALTER EXTENSION vector UPDATE;をpsqlまたは任意のデータベースクライアントを使用して実行します
  2. 前提条件に従ってVectorChordをインストールします
  3. Immichにスーパーユーザー権限がない場合、SQLコマンドCREATE EXTENSION vchord CASCADE;を実行します
  4. 環境変数DB_VECTOR_EXTENSION=pgvectorを削除します。この変数が設定されている場合、Immichは引き続きpgvectorを使用します
  5. Immichを開始し、VectorChordを使用して新しいインデックスを作成させます

注意: VectorChord自体はpgvectorタイプを使用するため、これらの手順に従った後にpgvectorをアンインストールしないでください。