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';