[PR #6034] [MERGED] fix(server): Split database queries based on PostgreSQL bound params limit #11062

Closed
opened 2026-02-05 14:32:54 +03:00 by OVERLORD · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/immich-app/immich/pull/6034
Author: @adamantike
Created: 12/28/2023
Status: Merged
Merged: 1/7/2024
Merged by: @jrasm91

Base: mainHead: fix/server/chunk-bulk-queries-based-on-postgresql-bind-params-limit


📝 Commits (3)

  • 0035bd7 fix(server): Split database queries based on PostgreSQL bound params limit
  • f232d19 misc: Create Chunked decorator to simplify implementation
  • 2f71134 feat: Add ChunkedArray/ChunkedSet decorators

📊 Changes

11 files changed (+392 additions, -221 deletions)

View changed files

📝 server/src/domain/album/album.service.spec.ts (+1 -1)
📝 server/src/domain/album/album.service.ts (+1 -1)
📝 server/src/domain/domain.util.ts (+27 -0)
📝 server/src/domain/repositories/album.repository.ts (+1 -1)
📝 server/src/infra/infra.util.ts (+6 -0)
📝 server/src/infra/infra.utils.ts (+42 -0)
📝 server/src/infra/repositories/access.repository.ts (+276 -205)
📝 server/src/infra/repositories/album.repository.ts (+22 -9)
📝 server/src/infra/repositories/asset.repository.ts (+6 -1)
📝 server/src/infra/repositories/person.repository.ts (+8 -3)
📝 server/src/infra/repositories/system-config.repository.ts (+2 -0)

📄 Description

PostgreSQL uses a 16-bit integer to indicate the number of bound parameters.

This means that the maximum number of parameters for any query is 65535. Any query that tries to bind more than that (e.g. searching by a list of IDs) requires splitting the query into multiple chunks.

This change includes refactoring every Repository that runs queries using a list of ids, and either flattening or merging results.

Fixes #5788, fixes #5997.

Also, potentially a fix for #4648 (at least based on this comment).

References:


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/immich-app/immich/pull/6034 **Author:** [@adamantike](https://github.com/adamantike) **Created:** 12/28/2023 **Status:** ✅ Merged **Merged:** 1/7/2024 **Merged by:** [@jrasm91](https://github.com/jrasm91) **Base:** `main` ← **Head:** `fix/server/chunk-bulk-queries-based-on-postgresql-bind-params-limit` --- ### 📝 Commits (3) - [`0035bd7`](https://github.com/immich-app/immich/commit/0035bd7554d49106c690c4cc1cd88dd833c9c553) fix(server): Split database queries based on PostgreSQL bound params limit - [`f232d19`](https://github.com/immich-app/immich/commit/f232d1976fcc7b2279e8404d1606863a432d75c6) misc: Create Chunked decorator to simplify implementation - [`2f71134`](https://github.com/immich-app/immich/commit/2f71134838eda2ab9f950742ec39be2fa9b18e8e) feat: Add ChunkedArray/ChunkedSet decorators ### 📊 Changes **11 files changed** (+392 additions, -221 deletions) <details> <summary>View changed files</summary> 📝 `server/src/domain/album/album.service.spec.ts` (+1 -1) 📝 `server/src/domain/album/album.service.ts` (+1 -1) 📝 `server/src/domain/domain.util.ts` (+27 -0) 📝 `server/src/domain/repositories/album.repository.ts` (+1 -1) 📝 `server/src/infra/infra.util.ts` (+6 -0) 📝 `server/src/infra/infra.utils.ts` (+42 -0) 📝 `server/src/infra/repositories/access.repository.ts` (+276 -205) 📝 `server/src/infra/repositories/album.repository.ts` (+22 -9) 📝 `server/src/infra/repositories/asset.repository.ts` (+6 -1) 📝 `server/src/infra/repositories/person.repository.ts` (+8 -3) 📝 `server/src/infra/repositories/system-config.repository.ts` (+2 -0) </details> ### 📄 Description PostgreSQL uses a 16-bit integer to indicate the number of bound parameters. This means that the maximum number of parameters for any query is 65535. Any query that tries to bind more than that (e.g. searching by a list of IDs) requires splitting the query into multiple chunks. This change includes refactoring every Repository that runs queries using a list of ids, and either flattening or merging results. Fixes #5788, fixes #5997. Also, potentially a fix for #4648 (at least based on [this comment](https://github.com/immich-app/immich/issues/4648#issuecomment-1826134027)). References: * https://github.com/typeorm/typeorm/issues/7565 * [PostgreSQL message format - Bind](https://www.postgresql.org/docs/15/protocol-message-formats.html#PROTOCOL-MESSAGE-FORMATS-BIND) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
OVERLORD added the pull-request label 2026-02-05 14:32:54 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: immich-app/immich#11062