Passer au contenu principal

Requêtes de base de données

danger

Gardez à l'esprit que jouer avec la base de données pourrait mettre la Lune en feu. Évitez de modifier directement la base de données lorsque c'est possible, et assurez-vous d'avoir des sauvegardes à jour.

astuce

Exécutez docker exec -it immich_postgres psql --dbname=<DB_DATABASE_NAME> --username=<DB_USERNAME> pour vous connecter directement à la base de données via le conteneur.

(Remplacez <DB_DATABASE_NAME> et <DB_USERNAME> par les valeurs de votre .env file).

Ressources

Nom

note

La colonne "originalFileName" correspond au nom du fichier au moment du téléchargement, incluant l'extension.

Rechercher par nom de fichier original
SELECT * FROM "asset" WHERE "originalFileName" = 'PXL_20230903_232542848.jpg';
SELECT * FROM "asset" WHERE "originalFileName" LIKE 'PXL_%'; -- tous les fichiers commençant par PXL_
SELECT * FROM "asset" WHERE "originalFileName" LIKE '%_2023_%'; -- tous les fichiers contenant _2023_ au milieu
Rechercher par chemin
SELECT * FROM "asset" WHERE "originalPath" = 'upload/library/admin/2023/2023-09-03/PXL_2023.jpg';
SELECT * FROM "asset" WHERE "originalPath" LIKE 'upload/library/admin/2023/%';

ID

Rechercher par ID
SELECT * FROM "asset" WHERE "id" = '9f94e60f-65b6-47b7-ae44-a4df7b57f0e9';
Rechercher par ID partiel
SELECT * FROM "asset" WHERE "id"::text LIKE '%ab431d3a%';

Somme de contrôle

note

Vous pouvez calculer la somme de contrôle d'un fichier particulier en utilisant la commande sha1sum <filename>.

Rechercher par somme de contrôle (SHA-1)
SELECT encode("checksum", 'hex') FROM "asset";
SELECT * FROM "asset" WHERE "checksum" = decode('69de19c87658c4c15d9cacb9967b8e033bf74dd1', 'hex');
SELECT * FROM "asset" WHERE "checksum" = '\x69de19c87658c4c15d9cacb9967b8e033bf74dd1'; -- notation alternative
Rechercher des ressources en double avec une somme de contrôle identique (SHA-1) (en excluant les fichiers supprimés)
SELECT T1."checksum", array_agg(T2."id") ids FROM "asset" T1
INNER JOIN "asset" T2 ON T1."checksum" = T2."checksum" AND T1."id" != T2."id" AND T2."deletedAt" IS NULL
WHERE T1."deletedAt" IS NULL GROUP BY T1."checksum";

Métadonnées

Photos en direct
SELECT * FROM "asset" WHERE "livePhotoVideoId" IS NOT NULL;
Par description
SELECT "asset".*, "asset_exif"."description" FROM "asset_exif"
JOIN "asset" ON "asset"."id" = "asset_exif"."assetId"
WHERE TRIM("asset_exif"."description") <> ''; -- tous les fichiers avec une description
SELECT "asset".*, "asset_exif"."description" FROM "asset_exif"
JOIN "asset" ON "asset"."id" = "asset_exif"."assetId"
WHERE "asset_exif"."description" ILIKE '%string to match%'; -- recherche par chaîne
Sans métadonnées
SELECT "asset".* FROM "asset_exif"
LEFT JOIN "asset" ON "asset"."id" = "asset_exif"."assetId"
WHERE "asset_exif"."assetId" IS NULL;
taille < 100 000 octets, de la plus petite à la plus grande
SELECT * FROM "asset"
JOIN "asset_exif" ON "asset"."id" = "asset_exif"."assetId"
WHERE "asset_exif"."fileSizeInByte" < 100000
ORDER BY "asset_exif"."fileSizeInByte" ASC;

Type

Par type
SELECT * FROM "asset" WHERE "asset"."type" = 'VIDEO';
SELECT * FROM "asset" WHERE "asset"."type" = 'IMAGE';
Nombre par type
SELECT "asset"."type", COUNT(*) FROM "asset" GROUP BY "asset"."type";
Nombre par type (par utilisateur)
SELECT "user"."email", "asset"."type", COUNT(*) FROM "asset"
JOIN "user" ON "asset"."ownerId" = "user"."id"
GROUP BY "asset"."type", "user"."email" ORDER BY "user"."email";

Tags

Nombre par tag
SELECT "t"."value" AS "tag_name", COUNT(*) AS "number_assets" FROM "tag" "t"
JOIN "tag_asset" "ta" ON "t"."id" = "ta"."tagsId" JOIN "asset" "a" ON "ta"."assetsId" = "a"."id"
WHERE "a"."visibility" != 'hidden'
GROUP BY "t"."value" ORDER BY "number_assets" DESC;
Nombre par tag (par utilisateur)
SELECT "t"."value" AS "tag_name", "u"."email" as "user_email", COUNT(*) AS "number_assets" FROM "tag" "t"
JOIN "tag_asset" "ta" ON "t"."id" = "ta"."tagsId" JOIN "asset" "a" ON "ta"."assetsId" = "a"."id" JOIN "user" "u" ON "a"."ownerId" = "u"."id"
WHERE "a"."visibility" != 'hidden'
GROUP BY "t"."value", "u"."email" ORDER BY "number_assets" DESC;

Utilisateurs

Lister tous les utilisateurs
SELECT * FROM "user";
Obtenir les informations du propriétaire à partir de l'ID de la ressource
SELECT "user".* FROM "user" JOIN "asset" ON "user"."id" = "asset"."ownerId" WHERE "asset"."id" = 'fa310b01-2f26-4b7a-9042-d578226e021f';

Personnes

Supprimer une personne et désassocier les visages liés
DELETE FROM "person" WHERE "name" = 'PersonNameHere';

Système

Configuration

Paramètres personnalisés
SELECT "key", "value" FROM "system_metadata" WHERE "key" = 'system-config';

(Utilisé uniquement si le fichier de configuration n'est pas utilisé)

Propriétés du fichier

Sans vignettes
SELECT * FROM "asset" WHERE "asset"."previewPath" IS NULL OR "asset"."thumbnailPath" IS NULL;
Déplacements de fichiers échoués
SELECT * FROM "move_history";

Interne Postgres

Changer DB_PASSWORD
ALTER USER <DB_USERNAME> WITH ENCRYPTED PASSWORD 'newpasswordhere';