mirror of
https://github.com/immich-app/immich.git
synced 2026-07-25 14:00:45 +03:00
[iOS] SqliteException(2067): UNIQUE constraint failed in remote_asset_entity during sync #7385
Open
opened 2026-02-05 12:59:38 +03:00 by OVERLORD
·
48 comments
No Branch/Tag Specified
main
chore/translations
fix/partner-ownership-contention
renovate/machine-learning
renovate/pypi-pillow-vulnerability
renovate/pypi-pydantic-settings-vulnerability
renovate/java-25.x
renovate/mobile
chore/harden-mobile-openapi-gen
renovate/java-21.x
fix/min-faces
refactor/asset-update
feat/merge-people-mobile
chore/face-cluster-abstraction
refactor/search-v3/pr-2a
fcast
fix/android-local-album-date
fix/24545-sync-retry-cx
fix/android-locked-folder-delete
make-sure-memory-widget-render
chore/freezed-example
fix/clamp-local-date-time-to-valid-value
fix/datetime-max-limit
fix/viewer-long-image-aspect
feat/native-core
feat/yucca-integration
refactor/mobile-actions
fix/ws-reconnect-battery
renovate/sharp
renovate/pigeon-27.x
refactor/auto-trash-sync
feat/release-source-branch
refactor/session-repository
fix/library-map-live-bounds-updates
renovate/permission_handler-12.x
renovate/node-24.x
fix/mobile-scroll-velocity-placeholders
fix/library-map-loading-flash
agg23/appbar-experiments
renovate/pep621-lock-file-maintenance-machine-learning
refactor/undo-actions
refactor/actions
feat/restore-action
feat/delete-action
fix/29853-thumbnail-decode-size
bugfix/live-photo-stuck
feature/load-previews
chore/pub-upgrade
custom-app-logo
fix/failed-sync-blocks-resume
feat/ml-hwaccel-testing
feat/workflow-logs
feat/server-chunked-uploads
feat/upload-action
fix-29727
feat/download-tag-action
feat/share-action
feat/album-actions
fix/android-cr3-save
feat/browser-profile-action
feat/cast-slideshow-action
feat/locked-folder-action
fix/unauthorized-memory-creation
feat/context-actions
refactor/action-class
feat/memories-view
refactor/asset-action-filter
feat/archive-action
feat/stack-action
feat/mobile-hls-player
refactor/stack-actions
feat/workflow-asset-tags
fix/timeline-drag-select-stops
fix/featured-photo-thumbnail-cache
fix/album-timeline-date-ordering
chore/album-remove-assets
feat/partner-table-permissions
fix/ocr-after-edit
fix/re-enable-pruning
refactor/delete-restore-actions
apk-build-deployment
edit-photo-stacking
fix/mise-lockfile
feat/web-hls-hover
refactor/store-cleanup
fix/hash-mismatch
refactor/app-metadata
refactor/advanced-settings
refactor/current-user
fix/dedupe-integrity-missing-paths
chore/albums-select
fix/fdroid-meta
refactor/per-asset-backup-flag
fix/av1-threads
fix/pass-secrets
fix/download-progress-stuck
fix/negative-backup-remainder
feat/map-asset-number
test-bump-prerelease
fix/handle-unlinking-motion-photos
fix/date-range-formatting
fix/mobile-album-action-msg
asset-add-to-album-trigger
refactor/face-editor-decoupling
feat/zoom-aware-face-editing
refactor/adaptive-image-dimensions
fix-face-editor-video-preview
fix-stack-face-tag-selection
fix/face-boxes-edit-panel
workflow-webhook-step
feat/hero_view_transitions
fix/map-sidepanel-queries
feat/dart-openapi-generator
claude/share-quality-5d7Gn
drag-drop-ghost-target
refactor/workflow-page
refactor/mobile-upload
fix-scroll-flicker-2
update-mise-lock-file
feat/kysely-0.29
release-candidate-flow-1
fix/mobile-22522-sqlite-2067
fix/job-lock
release-candidate-flow-3
release-candidate-flow-2
show-in-timeline-toggle
fix/mise-windows
plan-local-image-display
fix/remote-thumbnail-fallback
chore/riverpod-update
album-order-per-user
fix/web-timeline-dom-node-retention
chore/svelte-enable-state-referenced-locally
feat/favorite-albums
feat/patch-release-from-branch
fix/oauth-linking
feat/timeline_scroll_buffer
panorama-face-overlay
push-txxyuusptoru
push-zpwsovysllvn
chore/queue-endpoint-migration
fix/remove-from-album
chore/thumbnail-histogram
fix/video-thumbnail-bindthis-regression
fix/scrubber-drag-edge-cases
fix/timeline_layout_row_height
refactor-cancellable-task
uhthomas/fix-mobile-use-timer
uhthomas/fix-mobile-video-controls-key
uhthomas/chore-mobile-search-declarative
owner-role-album-user
feat/livephoto-editing
favorite-albums
uhthomas/fix-mobile-isolate-auth
fix/library-watcher-excludes
chore/library-e2e-to-medium
push-ynllunsvrpxy
fix/dont-delete-offline-library-files
push-zvwwxmvkrspv
push-kywsnvvkwzts
push-xxnxokokzrou
push-voozlrlkxsnu
view-in-timeline-transition
push-uymvmlknxpmx
push-qslzsplnusoz
fix/mobile-video-stall
uhthomas/draft-mobile-image-cache-cancel
push-yquostpqnkxp
feat/vitest-4
claude/offload-icloud-hashing-bI3GZ
midzelis/wip
uhthomas/fix-server-fsync-all
feat/mobile-widget-shared-client
push-lnyuzsutzkqq
push-vqqqxxvkunru
push-wvnmqoswptww
push-nwxlpmyzkyrl
fix/map-webgl-error
fix/mobile-player-fit
feat/panorama-tiles
csp-policy
push-rsywxvptwxuv
refactor/restores-file-interceptor
postgres-socketio
claude/auto-screenshot-web-changes-Y7efI
visual-review/pr-26535
push-lvyturrtwkrq
feat/library-offline-count
fix/mobile-video-aspect-ratio
uhthomas/fix-mobile-search-results
uhthomas/feat-sort-smart-search
uhthomas/chore-mobile-maplibre
uhthomas/mobile-fix-asset-details-album-pop
feat/crawl-wrapper
push-skvzqoozqkpl
feat/edit-filters
feat/pg-queue
refactor/asset-upload
better-project-structure
uhthomas/mobile-feat-asset-viewer-details
fix/ml-rocm-build
feat/asset-file-apis
feature/bottom-buttons-order
sqlite_thumbs
fix-keep-correct-ios-shared-album-asset
push-vpxwmwwxwnvw
fix-migration-width-height
shared-deep-link-handler
feat/thumbnail-native-clients
feat/platform-clients
fix/foreground-cloud-sync
filter-by-person
refactor/sidebar
fix/merged-edited-assets
feat/create-job-with-dto
feat/ios-fastlane-match
match-signing
fix-update-time-update-timeline
feat/modal-routes
feature/mobile-view-asset-owner
feat/system-settings
feature/show-activity-count
feat/location-favorites
feature/rearrange-buttons-2
fix/download-storage-template
chore/originals-in-asset-files
ben/tree-a11y
new-search-filter-ui
refactor/expectSelectedReadonly
refactor/mobile-grdb
feat/mobile-native-local-sync
refactor/timeline_ops
fix/scrubber_end
refactor/virtualsegment
refactor/rename_daymonth_groups
fix-remote-sync-clean-up
debug/cf-chunked-uploads
feat/search-filter-album/web
feat/session-permissions
feat/mobile-dynamic-thumbnails
refactor/extract_photostream
refactor/rename_load_api
refactor/timeline2
refactor/timeline3
feat-no-thumbhash-cache
feat/mobile-hdr-images
feat/beta-background-upload
fix/beta-timeline-memories-setting
fix/failed-uploads-not-removed
feat/groups
drift-map-page
feat/add-to-album-action
track-livephotos
feat/maintenance-worker
refactor/server-side-dedupe
feat/integrity-checks
dev/recognition-eval
lighter_buckets_test
perf/postgres-queue
tmp/demo-snapshot-preview
fix/server-migration-file-extension
rknn-toolkit-lite2
feature/Add-rocm-support-for-machine-learning
chore/async-hash-file
feat/shared-link-view-count
feat/graphql
no-video-player
fix/server-qsv-output-format
chore/server-geodata-tweaks
mobile/native-video-player-no-hero
feat/local-tileserver
feat/ml-armnn-conversion
chore/handle-output_dims
feat/capacitor-mobile-app-poc
feat/server-nvenc-hw-decoding
web/automation-ui
object-storage
ml/tflite
feat/ml-export-cli
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v3.0.0-rc.4
v3.0.0-rc.3
v3.0.0-rc.2
v3.0.0-rc.1
v3.0.0-rc.0
v2.7.5
v2.7.4
v2.7.3
v2.7.2
v2.7.1
v2.7.0
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.6
v2.5.5
v2.5.4
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.1
v2.4.0
v2.3.1
v2.3.0
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.0
v2.0.1
v2.0.0
v1.144.1
v1.144.0
v1.143.1
v1.143.0
v1.142.1
v1.142.0
v1.141.1
v1.141.0
v1.140.1
v1.140.0
v1.139.4
v1.139.3
v1.139.2
v1.139.1
v1.139.0
v1.138.1
v1.138.0
v1.137.3
v1.137.2
v1.137.1
v1.137.0
v1.136.0
v1.135.3
v1.135.2
v1.135.1
v1.135.0
v1.134.0
v1.133.1
v1.133.0
v1.132.3
v1.132.2
v1.132.1
v1.132.0
v1.131.3
v1.131.2
v1.131.1
v1.131.0
v1.130.3
v1.130.2
v1.130.1
v1.130.0
v1.129.0
v1.128.0
v1.127.0
v1.126.1
v1.126.0
v1.125.7
v1.125.6
v1.125.5
v1.125.4
v1.125.3
v1.125.2
v1.125.1
v1.125.0
v1.124.2
v1.124.1
v1.124.0
v1.123.0
v1.122.3
v1.122.2
v1.122.1
v1.122.0
v1.121.0
v1.120.2
v1.120.1
v1.120.0
v1.119.1
v1.119.0
v1.118.2
v1.118.1
v1.118.0
v1.117.0
v1.116.2
v1.116.1
v1.116.0
v1.115.0
v1.114.0
v1.113.1
v1.113.0
v1.112.1
v1.112.0
v1.111.0
v1.110.0
v1.109.2
v1.109.1
v1.109.0
v1.108.0
v1.107.2
v1.107.1
v1.107.0
v1.106.4
v1.106.3
v1.106.2
v1.106.1
v1.106.0
v1.105.1
v1.105.0
v1.104.0
v1.103.1
v1.103.0
v1.102.3
v1.102.2
v1.102.1
v1.102.0
v1.101.0
v1.100.0
v1.99.0
v1.98.2
v1.98.1
v1.98.0
v1.97.0
v1.96.0
v1.95.1
v1.95.0
v1.94.1
v1.94.0
v1.93.3
v1.93.2
v1.93.1
v1.93.0
v1.92.1
v1.92.0
v1.91.4
v1.91.3
v1.91.2
v1.91.1
v1.91.0
v1.90.2
v1.90.1
v1.90.0
v1.89.0
v1.88.2
v1.88.1
v1.88.0
v1.87.0
v1.86.0
v1.85.0
v1.84.0
v1.83.0
v1.82.1
v1.82.0
v1.81.1
v1.81.0
v1.80.0
v1.79.1
v1.79.0
v1.78.1
v1.78.0
v1.77.0
v1.76.1
v1.76.0
v1.75.2
v1.75.1
v1.75.0
v1.74.0
v1.73.0
v1.72.2
v1.72.1
v1.72.0
v1.71.0
v1.70.0
v1.69.0
v1.68.0
v1.67.2
v1.67.1
v1.67.0
v1.66.1
v1.66.0
v1.65.0
v1.64.0
v1.63.2
v1.63.1
v1.63.0
v1.62.1
v1.62.0
v1.61.0
v1.60.0
v1.59.1
v1.59.0
v1.58.0
v1.57.1
v1.57.0
v1.56.2
v1.56.1
v1.56.0
v1.55.1
v1.55.0
v1.54.1
v1.54.0
v1.53.0
v1.52.1
v1.52.0
v1.51.2
v1.51.1
v1.51.0
v1.50.1
v1.50.0
v1.49.0
v1.48.1
v1.48.0
v1.47.3
v1.47.2
v1.47.1
v1.47.0
v1.46.1
v1.46.0
v1.45.0
v1.44.0
v1.43.1
v1.43.0
v1.42.0_65-dev
v1.41.1_64-dev
v1.41.0_64-dev
v1.40.1_63-dev
v1.40.0_63-dev
v1.39.0_61-dev
v1.38.2_60-dev
v1.38.1_60-dev
v1.38.0_60-dev
v1.37.0_58-dev
v1.36.2_56-dev
v1.36.1_55-dev
v1.36.0_55-dev
v1.35.0_54-dev
v1.34.0_53-dev
v1.33.1_52-dev
v1.33.0_52-dev
v1.32.1_51-dev
v1.32.0_50-dev
v1.31.1_49-dev
v1.31.0_49-dev
v1.30.2_48-dev
v1.30.0_46-dev
v1.29.6_45-dev
v1.29.6_44-dev
v1.29.5_44-dev
v1.29.4_44-dev
v1.29.3_43-dev
v1.29.2_43-dev
v1.29.1_43-dev
v1.29.0_42-dev
v1.28.4_41-dev
v1.28.4_42-dev
v1.28.3_41-dev
v1.28.2_40-dev
v1.28.1_39-dev
v1.28.0_38-dev
v1.27.0_37-dev
v1.26.0_36-dev
v1.25.0_35-dev
v1.24.0_34-dev
v1.23.0_33-dev
v1.22.0_32-dev
v1.21.1_31-dev
v1.21.0_31-dev
v1.20.3_30-dev
v1.20.2_30-dev
v1.20.1_30-dev
v1.20.0_30-dev
v1.19.1_29-dev
v1.19.0_29-dev
v1.18.0_27-dev
v1.17.0_25-dev
v1.16.0_23-dev
v1.15.1_21-dev
v1.15.0_21-dev
v1.14.0_21-dev
v1.13.0_20-dev
v1.12.0_18-dev
v1.11.0_17-dev
v1.10.0_15-dev
v1.9.1_14-dev
v1.9.0_13-dev
v1.8.0_12-dev
v1.7.0_11-dev
v1.6.0_10-dev
v1.5.1+9-dev
v1.5.0+8-dev
v1.4.0+7-dev
v1.4.0+6-dev
v1.4.0-dev
v1.3.0-dev
v1.3.1-dev
v0.6-dev
v0.5-dev
v0.4-dev
v0.3-dev
v0.2-dev
first-android-release
Labels
Clear labels
accessibility
changelog:enhancement
changelog:security
changelog:skip
changelog:translation
cli
date-time
dependencies
documentation
external-library
format
good first issue
mobile-beta
mobile-beta
mobile-beta
needs-answer
nice to have
pull-request
sharing
tech-debt
📱mobile
🖥️web
🗄️server
🧠machine-learning
Mirrored from GitHub Pull Request
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: immich-app/immich#7385
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @abhishekgupta0511 on GitHub (Oct 1, 2025).
I have searched the existing issues, both open and closed, to make sure this is not a duplicate report.
The bug
Description
When using Immich iOS client (iPhone 13 Pro, iOS 17/18), the app crashes with a SQLite UNIQUE constraint error during sync.
Steps to Reproduce
SqliteException(2067): while executing statement, UNIQUE constraint failed: remote_asset_entity.owner_id, remote_asset_entity.checksum
Causing statement: INSERT INTO "remote_asset_entity" ...
Expected Behavior
-- Actual Behavior - Sync fails with UNIQUE constraint violation, blocking further asset sync.
Environment
Additional Info
Resetting the mobile DB (deleting & reinstalling app) DOES NOT work.
The OS that Immich Server is running on
ios mobile app immich 1.144.1
Version of Immich Server
v1.144.1
Version of Immich Mobile App
v1.44.1
Platform with the issue
Device make and model
iPhone 13 pro
Your docker-compose.yml content
Your .env content
Reproduction steps
SqliteException(2067): while executing statement, UNIQUE constraint failed: remote_asset_entity.owner_id, remote_asset_entity.checksum
Causing statement: INSERT INTO "remote_asset_entity" ...
Error in client
SqliteException(2067): while executing statement, UNIQUE constraint failed: remote_asset_entity.owner_id, remote_asset_entity.checksum, constraint failed (code 2067)
Causing statement: INSERT INTO "remote_asset_entity" ("name", "type", "created_at", "updated_at", "duration_in_seconds", "id", "checksum", "is_favorite", "owner_id", "local_date_time", "thumb_hash", "deleted_at", "live_photo_video_id", "visibility", "stack_id", "library_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT("id") DO UPDATE SET "name" = ?, "type" = ?, "created_at" = ?, "updated_at" = ?, "duration_in_seconds" = ?, "checksum" = ?, "is_favorite" = ?, "owner_id" = ?, "local_date_time" = ?, "thumb_hash" = ?, "deleted_at" = ?, "live_photo_video_id" = ?, "visibility" = ?, "stack_id" = ?, "library_id" = ?, parameters: IMG_5801.MOV, 2, 2025-08-23T05:06:07.000Z, 2025-08-24T12:31:31.000Z, 2, b47509b2-87b9-4e03-b058-1337201093dc, 0UIDkK+sfB4wXWEFQLv4MYQCzZI=, 0, f918d4e0-14f2-48a7-9611-38656bcb7fbc, 2025-08-23T10:36:07.000Z, null, null, null, 1, null, null, IMG_5801.MOV, 2, 2025-08-23T05:06:07.000Z, 2025-08-24T12:31:31.000Z, 2, 0UIDkK+sfB4wXWEFQLv4MYQCzZI=, 0, f918d4e0-14f2-48a7-9611-38656bcb7fbc, 2025-08-23T10:36:07.000Z, null, null, null, 1, null, null
package:sqlite3/src/implementation/exception.dart 87 throwException
package:sqlite3/src/implementation/statement.dart 109 StatementImplementation._execute
package:sqlite3/src/implementation/statement.dart 289 StatementImplementation.executeWith
package:sqlite3/src/statement.dart 81 CommonPreparedStatement.execute
package:drift/src/sqlite3/database.dart 131 Sqlite3Delegate.runBatchSync
package:drift/native.dart 373 _NativeDelegate.runBatched.
dart:async/future.dart 315 new Future.sync
package:drift/native.dart 373 _NativeDelegate.runBatched
package:drift/src/runtime/executor/helpers/engines.dart 128 _BaseExecutor.runBatched.
package:drift/src/runtime/executor/helpers/engines.dart 62 _BaseExecutor._synchronized
package:drift/src/runtime/executor/helpers/engines.dart 122 _BaseExecutor.runBatched
package:drift/src/remote/server_impl.dart 170 ServerImplementation._runBatched
package:drift/src/remote/communication.dart 165 DriftCommunication.setRequestHandler.
===== asynchronous gap ===========================
package:drift/src/remote/communication.dart 113 DriftCommunication.request
package:drift/src/remote/client_impl.dart 84 _BaseExecutor.runBatched
package:drift/src/runtime/api/batch.dart 215 Batch._runWith
package:drift/src/runtime/api/batch.dart 199 Batch._commit
package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart 178 SyncStreamRepository.updateAssetsV1
package:immich_mobile/domain/services/sync_stream.service.dart 67 SyncStreamService._processBatch
package:immich_mobile/domain/services/sync_stream.service.dart 58 SyncStreamService._handleEvents
package:immich_mobile/infrastructure/repositories/sync_api.repository.dart 105 SyncApiRepository.streamChanges
package:immich_mobile/domain/services/sync_stream.service.dart 30 SyncStreamService.sync
package:immich_mobile/utils/isolate.dart 57 runInIsolateGentle..
package:immich_mobile/utils/isolate.dart 36 runInIsolateGentle.
package:worker_manager/src/worker/worker_io.dart 106 WorkerImpl._anotherIsolate.
Relevant log output
Additional information
Resetting the mobile DB (deleting & reinstalling app) DOES NOT work. It ideally should have fixed the issue but it didn't.
@alextran1502 commented on GitHub (Oct 1, 2025):
Hmm, do you mind try to reinstall the app?
@shenlong-tanwen commented on GitHub (Oct 1, 2025):
@abhishekgupta0511 If reinstalling the app does not fix this issue, Kindly share the output of the following query from the server
@Hinfty commented on GitHub (Oct 1, 2025):
Same problem here, I think
SqliteException(2067): while executing statement, UNIQUE constraint failed: remote_asset_entity.owner_id, remote_asset_entity.checksum, constraint failed (code 2067) Causing statement: INSERT INTO "remote_asset_entity" ("name", "type", "created_at", "updated_at", "duration_in_seconds", "id", "checksum", "is_favorite", "owner_id", "local_date_time", "thumb_hash", "deleted_at", "live_photo_video_id", "visibility", "stack_id", "library_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT("id") DO UPDATE SET "name" = ?, "type" = ?, "created_at" = ?, "updated_at" = ?, "duration_in_seconds" = ?, "checksum" = ?, "is_favorite" = ?, "owner_id" = ?, "local_date_time" = ?, "thumb_hash" = ?, "deleted_at" = ?, "live_photo_video_id" = ?, "visibility" = ?, "stack_id" = ?, "library_id" = ?, parameters: IMG_20181001_181356.jpg, 1, 2018-10-01T18:13:55.000Z, 2025-07-08T10:49:16.292Z, 0, b52153a0-b7a7-4591-83c3-1afc196daf3a, IJBA50QYkXIWP48Y4pMoGeysPuc=, 0, 65994829-5a61-4859-9848-9a8fac39d7e7, 2018-10-01T20:13:55.000Z, rCgGBQCHp6mHCIXnaXaYiNCdGftr, 2025-10-01T04:41:47.141Z, null, 0, null, null, IMG_20181001_181356.jpg, 1, 2018-10-01T18:13:55.000Z, 2025-07-08T10:49:16.292Z, 0, IJBA50QYkXIWP48Y4pMoGeysPuc=, 0, 65994829-5a61-4859-9848-9a8fac39d7e7, 2018-10-01T20:13:55.000Z, rCgGBQCHp6mHCIXnaXaYiNCdGftr, 2025-10-01T04:41:47.141Z, null, 0, null, null@abhishekgupta0511 commented on GitHub (Oct 1, 2025):
I did and multiple times in multiple ways..... Well if I disable new timeline in advanced settings this issue goes away!!
@abhishekgupta0511 commented on GitHub (Oct 1, 2025):
Can you please help me where and how I should run this query on my iphone?
@alextran1502 commented on GitHub (Oct 1, 2025):
@abhishekgupta0511 from the command line on your server run
After that, you can run the query
@Hinfty commented on GitHub (Oct 1, 2025):
For me this is a file that I used "replace with upload" on, if that might point to the solution.
Running the SQL statement produces just one row:
select "id", "originalFileName", "ownerId", "libraryId" from asset where checksum = decode('IJBA50QYkXIWP48Y4pMoGeysPuc=', 'base64');
--------------------------------------+-------------------------+--------------------------------------+-----------
b52153a0-b7a7-4591-83c3-1afc196daf3a | IMG_20181001_181356.jpg | 65994829-5a61-4859-9848-9a8fac39d7e7 |
(1 row)
As there is no actual violation of unique ids, I figured resetting DB would work. So deleted SQLite, logged out and in and resynced.
That fixed the mobile DB, but this sure wasn't particularly user friendly.
Question remains why it generated the insert statement instead of an update statement.
Maybe to do with the "replace with upload" action? I'll test this functionality more and see if it breaks anything again.
@Hinfty commented on GitHub (Oct 1, 2025):
@shenlong-tanwen got it, reproducible.
Steps:
Not sure if 2 and 3 are needed to trigger the bug
@abhishekgupta0511 commented on GitHub (Oct 2, 2025):
Thank you for guiding me.. below is the output..
immich=#
immich=# select "id", "originalFileName", "ownerId", "libraryId" from asset where checksum = decode('0UIDkK+sfB4wXWEFQLv4MYQCzZI=', 'base64');
--------------------------------------+------------------+--------------------------------------+-----------
6da39d05-8f4f-41c3-b103-b051bf74f761 | IMG_5801.MOV | f918d4e0-14f2-48a7-9611-38656bcb7fbc |
5ab17647-1962-47f8-a517-bd76947452e3 | IMG_5801.MOV | f918d4e0-14f2-48a7-9611-38656bcb7fbc |
f10de208-1e9b-4a66-b129-5dcd7dc4312a | IMG_5801.MOV | f918d4e0-14f2-48a7-9611-38656bcb7fbc |
5c56a18e-71ee-48f7-88ed-944147bf2942 | IMG_5801.MOV | f918d4e0-14f2-48a7-9611-38656bcb7fbc |
9b2eb48a-8cd1-472e-8e64-52782d77da2f | IMG_5801.MOV | f918d4e0-14f2-48a7-9611-38656bcb7fbc |
b47509b2-87b9-4e03-b058-1337201093dc | IMG_5801.MOV | f918d4e0-14f2-48a7-9611-38656bcb7fbc |
5f125867-bb84-4f61-a43d-6b09f354233c | IMG_5801.MOV | f918d4e0-14f2-48a7-9611-38656bcb7fbc |
a8d77b26-6bc0-42de-bf44-c504773b1c12 | IMG_5801.MOV | f918d4e0-14f2-48a7-9611-38656bcb7fbc |
9e16420d-d56a-4a8c-8efc-246b05f2e7d3 | IMG_5801.MOV | f918d4e0-14f2-48a7-9611-38656bcb7fbc |
68e26ba4-6668-4854-affd-6b0c34e436fb | IMG_5801.MOV | f918d4e0-14f2-48a7-9611-38656bcb7fbc |
(10 rows)
@dshelley66 commented on GitHub (Oct 2, 2025):
This is also happening on Android 1.143.1
@abhishekgupta0511 commented on GitHub (Oct 2, 2025):
Please fix this issue.. this client issue is becoming a serious concern...
This is also an issue on v2.0
@masymase commented on GitHub (Oct 8, 2025):
I am getting the same or similar error except I'm getting a
FOREIGN KEY constraint failed:Backup also works for me if I disable the new timeline in advanced settings.
Android app version: 2.0.1 build.3021
Server version: 2.0.1
@EdanBrooke commented on GitHub (Oct 10, 2025):
Just to chime in - I'm having the same issue on iOS and reverting to the old timeline does made syncing work again for me too.
PS congrats on v2 👏
@rmarkus commented on GitHub (Oct 11, 2025):
same pb here with Server = 2.0.1 and App on Android = 2.0.1
And indeed, I also have done a rotate & replace with upload of a photo some days earlier.
is there a fix available by deleting something in the SQL database (I am using postgresql)?
@Hinfty commented on GitHub (Oct 11, 2025):
To come back to my error description, I understand its clear that this will cause the duplication error, if the mobile db does not sync between the steps.
But imho this shows that the workflow to rotate uploaded assets does not work out for us. Ideally, we wouldn't be downloading amd uploading the file at all. Especially seeing how date and location are cleared and need to be reset in this process.
@DaJansenGit commented on GitHub (Oct 14, 2025):
Having the same issue after a fresh portainer install of server and application and migration from google photos via immich-go. Did no cropping or any foto editing. Just named some persons. Deactivating new timeline feature as suggested fixes the issue.
Server = 2.0.1 and Android 2.0.1.
@SecretAgentOne commented on GitHub (Oct 15, 2025):
I experienced the same failure using Server 2.0.1, android app version 2.0.1 and worked around the issue by disabling the new timeline.
@EdanBrooke commented on GitHub (Oct 15, 2025):
For information I also imported my Google Takeout using Immich-Go. Could this bear any relevance?
@Techtony96 commented on GitHub (Oct 16, 2025):
I also am facing this SQL error on iOS, just started using Immich on 2.0.1 (now 2.1) and I also imported using immich-go my Google Photos.
@Qhilm commented on GitHub (Oct 19, 2025):
It appears that "replace with upload" triggers this issue. I just did this twice today for the first time ever and I am not hitting this error message.
@rmburg commented on GitHub (Oct 20, 2025):
+1 for "replace with upload"
I auto-uploaded an asset from my phone, downloaded it via the web interface and "replace with upload"-ed it with a rotated version. Now sync on my phone is broken with the same SQL error as OP.
I'm on Android/v2.1.0.
@LTe commented on GitHub (Oct 21, 2025):
Same here, this happens after import from Google Takeout using Immich-Go.
SqliteException(2067): while executing statement, UNIQUE constraint failed: remote_asset_entity.owner_id, remote_asset_entity.checksum@mikeygrier commented on GitHub (Oct 23, 2025):
my wife and i have had this problem since the switch from the old timeline to the new timeline. pretty much every day since, i purge dupes in the DB to get sync to work again using the sql below (i don't advise doing this, im sure it's eating disk space or losing track of extra assets / polluting tables), but I am just kicking the can down the road until this bug gets fixed at which point I'll likely rebuild my immich server
Server=2.1.0; Android=2.1.0
@Qhilm commented on GitHub (Oct 24, 2025):
So, let's say I want to be a little more surgical and fix the issue for one specific image, does anyone has a suggestion for me?
20180201-IMG_1986.jpgis the original image, which I replaced with upload20180201-072150-IMG_1986.jxl(same RAW file, but reworked and exported as jxl hdr this time).I don't mind deleting any file starting with
20180201-IMG_1986because they all refer to the old picture, which was replaced.I even deleted the old picture from the immich trash, but that did not help.
@Qhilm commented on GitHub (Oct 28, 2025):
I would really appreciate some guidance here, I can't sync a single picture any more from my phone to the Immich instance. I even tried to fully delete the old asset (the one replaced with the upload) from trash, that did not help.
Should I restore the sql DB to before the time when I did "replace with upload"? This is going to throw an error I guess, since the original asset is now deleted?
I would prefer not to blindly run some script on the DB, rather make it asset specific, as I only have 3 pictures causing this issue.
@mikeygrier commented on GitHub (Oct 28, 2025):
if you wanted some confidence using the SQL i posted above, you could do a select to first see the rows that it'd impact:
the sql is simple: if there's a dupe on checksum and ownerId, get rid of all instances except the first one. note: if the checksum matches these are binary identical copies, not resizes or similar images based on content. im not even sure how the database can get like this, you'd think there'd be parity between postgres unique constraints and sqlite. i suppose i could/should dig into and fix this bug myself but i can't even replicate it consistently. im hoping someone with more knowledge about the immich db has an aha moment soon.
@Qhilm commented on GitHub (Oct 29, 2025):
Thanks. I decided to try basics first, and uninstall/reinstall the app. And it somehow worked. No idea why it worked for me while it did not for others, but good I tried, I had almost discarded the possibility this could work.
@mikeygrier commented on GitHub (Oct 29, 2025):
actually, thinking about this, the dupes happened intermittently in the old timeline too they just weren't fatal errors on the client side in the old timeline implementation. i remember having 20+ copies of the same picture sometimes.
@Worly commented on GitHub (Oct 29, 2025):
I have the same problem. Logging out and back in fixes the problem, but the problem returns after a couple of days.
@alextran1502 commented on GitHub (Oct 29, 2025):
@Worly Did you use feature such as "Replace with upload", or recently using
immich-go?@Worly commented on GitHub (Oct 30, 2025):
@alextran1502 I did not use "Replace with upload", but I did use
immich-goto upload pretty much all of the assets I currently have, including the one that is causing the error.@akaivola commented on GitHub (Oct 31, 2025):
This issue is still occurring with
v2.2.0.immich-go,Replace with uploadEDIT:
v2.2.2 did not fix this
@tomas-lejdung commented on GitHub (Nov 1, 2025):
I am also getting this issue on ios. Server version 2.2.1 and app 2.2.0. I cannot view any of the uploaded assets, and only my local photos shows up with the icon for ”not uploaded”. My locked folder is also empty. When using the web version everything works as intended.
SqliteException(787): while executing statement, FOREIGN KEY constraint failed, constraint failed (code 787) Causing statement: INSERT INTO "memory_asset_entity" ("asset_id", "memory_id") VALUES (?, ?) ON CONFLICT("asset_id", "memory_id") DO NOTHING, parameters: 707555c6-d035-4927-b5fb-f414c28f782c, c9bde5af-2dfb-4e17-8dff-96325be42f3fpackage:sqlite3/src/implementation/exception.dart 87 throwException package:sqlite3/src/implementation/statement.dart 109 StatementImplementation._execute package:sqlite3/src/implementation/statement.dart 289 StatementImplementation.executeWith package:sqlite3/src/statement.dart 81 CommonPreparedStatement.execute package:drift/src/sqlite3/database.dart 131 Sqlite3Delegate.runBatchSync package:drift/native.dart 373 _NativeDelegate.runBatched.<fn> dart:async/future.dart 315 new Future.sync package:drift/native.dart 373 _NativeDelegate.runBatched package:drift/src/runtime/executor/helpers/engines.dart 128 _BaseExecutor.runBatched.<fn> package:drift/src/runtime/executor/helpers/engines.dart 62 _BaseExecutor._synchronized package:drift/src/runtime/executor/helpers/engines.dart 122 _BaseExecutor.runBatched package:drift/src/remote/server_impl.dart 170 ServerImplementation._runBatched package:drift/src/remote/communication.dart 165 DriftCommunication.setRequestHandler.<fn> ===== asynchronous gap =========================== package:drift/src/remote/communication.dart 113 DriftCommunication.request package:drift/src/remote/client_impl.dart 84 _BaseExecutor.runBatched package:drift/src/runtime/api/batch.dart 215 Batch._runWith package:drift/src/runtime/api/batch.dart 199 Batch._commit package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart 408 SyncStreamRepository.updateMemoryAssetsV1 package:immich_mobile/domain/services/sync_stream.service.dart 67 SyncStreamService._processBatch package:immich_mobile/domain/services/sync_stream.service.dart 48 SyncStreamService._handleEvents package:immich_mobile/infrastructure/repositories/sync_api.repository.dart 110 SyncApiRepository.streamChanges package:immich_mobile/domain/services/sync_stream.service.dart 30 SyncStreamService.sync package:immich_mobile/utils/isolate.dart 58 runInIsolateGentle.<fn>.<fn> package:immich_mobile/utils/isolate.dart 37 runInIsolateGentle.<fn> package:worker_manager/src/worker/worker_io.dart 106 WorkerImpl._anotherIsolate.<fn>@AndrewMcAwesome commented on GitHub (Nov 2, 2025):
also having this issue on android, everything seems to work as expected with the old timeline, but the phone app is basically completely non functional when using the new timeline
@beyertom commented on GitHub (Nov 2, 2025):
chiming in, my wife has the same issue with newest server and android app (both 2.2.1):
@polomani commented on GitHub (Nov 5, 2025):
Having this issue after I uploaded the last bits of my photos using immich-go (this was part of my celebration for the stable release of immich 😅 )
@dhlavaty commented on GitHub (Nov 6, 2025):
This started appearing after I upgraded to v2.2.3 (both server and iOS app). Previous versions worked fine I think.
( iOS 18.7.1 )
EDIT: added logs
@mikekuzak commented on GitHub (Nov 6, 2025):
Try disabling Advanced -> New Timeline. Restart the App. Go back reenable New Timeline, Restart App. This worked for me, no errors in the App logs anymore. Work on Android for me.
@dhlavaty commented on GitHub (Nov 6, 2025):
@mikekuzak > Wow, yes, that helped. 🥇
EDIT: But I've lost all selections ( selected albums ) in Backup. :-(
@beyertom commented on GitHub (Nov 7, 2025):
I tried this, didnt work for me. Still the same issue and error in the logs.
I found another issue, probably linked to this error:
All Albums (shared and owned) show they have 0 items.
@hch2904 commented on GitHub (Nov 7, 2025):
I tried this and I can say this workaround works.
Thank you @mikekuzak
@AndrewMcAwesome commented on GitHub (Nov 7, 2025):
I realize the issue is marked as IOS but the work around is sill not working for me on android with docker version 2.2.3 and most recent android app
@justinmklam commented on GitHub (Nov 10, 2025):
This also fixed the issue for me, but like @dhlavaty mentioned, it also resets your phone's backup configuration so you'll need to reselect which albums you want to sync. It did successfully rehash all the files on my phones so it didn't upload any duplicates, but this process can take some time depending on how many photos you have and how fast your phone's processor is.
@veryaner commented on GitHub (Nov 12, 2025):
Tried this o Android and also works my backup started again. Thanks!
@beyertom commented on GitHub (Nov 30, 2025):
The problem is still open for me. Tried again the above mentioned fix (disabling & enabling timeline) but no luck.
@ufgkirk commented on GitHub (Dec 12, 2025):
I experienced this same problem this week on the client app version 2.3.0 build 236 on iOS. I had used the "Replace Upload" feature from PC to replace an upload my phone originally uploaded. This caused the app to experience the same "SqliteException(2067): while executing statement, UNIQUE constraint failed" error that everyone else is reporting.
My Immich app on my iPad, which uploads to the same library, was working fine. I had only replaced that single upload from my iPhone, so clearly this was caused by replacing that upload.
I tried the suggestion of toggling off the New Timeline feature, and that seemed to fix the issue, all my photos taken since the bug are now uploaded. I was then able to subsequently re-enable the "New Timeline" feature and take a screenshot, which uploaded too. So simply toggling the feature off and on fixed the problem for me.
@mateiuli commented on GitHub (Jan 18, 2026):
I have encountered the same problem on server version 2.4.1 with Android App 2.4.1 build.3030.
I managed to work around it by going into the web interface, selected "Filename" search in the search bar and entered the file name from the logs in the mobile app
... parameters: IMG_20181001_181356.jpg, 1, ....First I downloaded the photos, then moved to trash, then deleted permanently from trash. After that it resume working. I didn't have to disable/enable the new timeline as suggested above.
@schobernoise commented on GitHub (Feb 4, 2026):
Can confirm, worked for me too!