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!