LWLocks and SPI calls

Hallo liebe Community,

wir arbeiten grade an einer Erweiterung in C geschrieben, welche LWLocks benutzt.
Meine Idee davon, wie diese Funktionieren war, dass man ein Lock anfordern kann (entweder exklusiv oder geteilt) und dann gewartet wird, bis der momentane Halter des locks dieses freigibt.
Hierbei ist aber wichtig, dass im code explizit auf dieses Lock zugegriffen wird. Also gelockte Bereiche müssen mit einem LockAcquire() und LockRelease() umgeben sein.

Allerdings haben wir nun den Fall, dass ein Lock das gehalten wird anscheinend den Zugriff auf eine unabhängige Tabelle einschränkt.

Die Struktur ist folgende:

LWLock -> acquire EXCLUSIVE
SPI ("SELECT * FROM unrelated_table")  -- hängt hier fest
LWLock -> release

Das lock ist nur im Rahmen der Erweiterung verwendet, während die Tabelle eine ganz normale Tabelle mit ein paar config Einträgen ist.
Wenn ich das lock for dem SPI call freigebe, dann geht alles durch.
Das Problem tritt außerdem nur auf, wen man die in der configuration der Postgres
force_parallel_mode = true
setzt.

Über Hilfe würden wir uns sehr freuen!

Ohne mehr vom Code zu sehen, ist es unmöglich, eine genaue Antwort zu geben.

Wenn das wirklich ein Lock ist, der von der Extension definiert wurde und nur dort verwendet wird, kann er nicht zu einer Blockade einer Abfrage über SPI führen. Wo genau hängt denn der Prozeß, wenn man sich mit einem Debugger verwendet?

Für die richtige Definition und Verwendung eines Lightweight Locks schaut man am besten in ein Contrib-Modul, das so etwas macht, zum Beispiel contrib/pg_stat_statements/pg_stat_statements.c: dort wird ein Lock namens pg_stat_statements definiert, in pgss->lock gespeichert und mehrmals verwendet.

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.