Complete PostgreSQL Concurrent Upsert Support for All Primary Key Types
Les mainteneurs répondent en général sous 3 jours
@aaronburtle y travaille déjà.
Depuis le 1/9/2026.
Évaluation
Cette issue n'a pas encore été évaluée.
Description
Extend PostgreSQL concurrent PUT/PATCH upsert handling to cover every primary-key type supported by DAB, including composite keys and values with multiple database-equivalent representations. Ensure requests targeting the same logical key acquire the same transaction-scoped lock, use PostgreSQL-native comparison semantics, and complete without duplicate-key conflicts or lost updates. Add focused unit and PostgreSQL integration coverage for the supported type matrix, verifying that one concurrent request inserts while subsequent requests update successfully.
PostgreSQL normally protects existing rows with row-level locks. That is insufficient for an upsert race because, when two requests check for a missing key, there is no row to lock. Both requests can conclude that an insert is required, and one then fails against the unique constraint.
DAB uses transaction-scoped PostgreSQL advisory locks to serialize that sequence:
Derive a deterministic lock identity from the entity and primary key.
Acquire pg_advisory_xact_lock(...).
Recheck whether the row exists.
Insert or update as appropriate.
Release the lock automatically when the transaction commits or rolls back.
Requests for the same logical key must derive the same advisory lock, while requests for different keys should ideally continue concurrently.
The complication is that PostgreSQL equality is type-specific. Different request values can represent the same database key, for example:
character(n) values that differ only by trailing spaces
Numerically equivalent representations such as 1, 1.0, or 1.00
UUIDs with different casing or formatting
Timestamps representing the same instant with different offsets
Composite keys containing any combination of these types
If DAB hashes the raw request text, two database-equal values may acquire different locks. They can then race despite advisory locking. Parameter typing also matters: sending a fixed-width character key as PostgreSQL text can cause an existence predicate to use text equality instead of the column’s native character(n) semantics.
This work is needed to ensure lock identities and post-lock comparisons follow PostgreSQL’s native type semantics for every supported primary-key type. A coarse source-level lock is a safe fallback but serializes unrelated rows; type-aware, key-scoped locks preserve correctness with better concurrency.
- Langage dominant
- C#
- Étoiles
- 1.5k
- Forks
- 371
- Merge moyen
- 5 j 6 h
- PR mergées (30 j)
- 19
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Fournit un Dockerfile ou un fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de Azure/data-api-builder
-
pgsql
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Azure/data-api-builder#3598 ·
Les mainteneurs répondent en général sous 3 jours
-
2.x cli mcp-server
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Azure/data-api-builder#3576 ·
Les mainteneurs répondent en général sous 3 jours
-
2.x health-endpoint
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Azure/data-api-builder#3570 ·
Les mainteneurs répondent en général sous 3 jours
-
2.x telemetry
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Azure/data-api-builder#3564 ·
Les mainteneurs répondent en général sous 3 jours
-
2.x telemetry
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
Azure/data-api-builder#3562 ·
Les mainteneurs répondent en général sous 3 jours
Toutes les issues de Azure/data-api-builder
Issues similaires
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
ClickHouse/clickhouse-cs#639 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 92/100
ifpebj-ti/controle-acesso-veiculos#377 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 1 jour
-
Money ExploitsOuverteS: Untriaged
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
project-wayfarer/wayfarer-14#1628 ·
Les mainteneurs répondent en général sous 3 jours
-
:watch: Not Triaged dotnet-target-version
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
Les mainteneurs répondent en général sous 1 jour