AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Einzelne Zeile in Tabelle sperren (lock row)
Thema durchsuchen
Ansicht
Themen-Optionen

Einzelne Zeile in Tabelle sperren (lock row)

Ein Thema von Incocnito · begonnen am 17. Apr 2020 · letzter Beitrag vom 20. Apr 2020
 
Incocnito

Registriert seit: 28. Nov 2016
229 Beiträge
 
#1

Einzelne Zeile in Tabelle sperren (lock row)

  Alt 17. Apr 2020, 16:41
Datenbank: postgres • Version: 10.4 • Zugriff über: unidac
Hallo Zusammen,

ich bräuchte mal einen Mechanismus, wie ich eine einzelne Zeile einer PostgreSQL-Tabelle sperren kann.
1) Ich muss (über einen beliebigen Zeitraum) verhindern, dass die Zeile bearbeitet wird.
2) Ich muss rausfinden können, dass die Zeile gesperrt ist.

Ich habe versucht etwas mit SELECT FOR UPDATE zu bauen:
- Ich öffne pgAdmin
- In einem SQL-Fenster (PC 1) steht (in etwa)
Code:
begin;
select *
from my_super_table
where artikelid = 'AADDEEF' for update;
- Führe ich das aus ist der Datensatz gesperrt und andere pgAdmin-Instanzen (PC 2) können den Datensatz nicht mehr bearbeiten (PC 1 Fenster 2 geht übrigens auch nicht, aber das wäre noch egal)
- Führe ich nun die Freigabe aus (PC 1) (ja das ist tatsächlich im selben SQL-Text-Fenster einfach 2 Minuten später eingegeben)
Code:
select *
from my_super_table
where artikelid = 'AADDEEF';
commit;
so wird der Datensatz wieder freigegeben.

- Versuche ich nun von einer anderen pgAdmin-Instanz auf die Daten zuzugreifen geht wieder alles.
- Das ganze ist auch an die Connection gebunden, so dass bei einem Absturz der Datensatz
automatisch wieder freigegeben ist.

Nun habe ich versucht das Ganze in Delphi mit einer UniDac-Query umzusetzen.
Diese meldet mir aber "cannot insert multiple commands into a prepared statement".
Wieso "auf mal" nur noch 1 Befehl pro Query-ExecSQL möglich ist, ist mir schleierhaft ...
ich hätte schwören können, dass ich schon immer mehr abschicken konnte.

Nun das ganze als Frage:
Gibt es eine Möglichkeit einen einzelnen Datensatz zu sperren und wieder frei zu geben,
so dass ich auf diesem Datensatz (nur an einer Arbeitsstation) arbeiten könnte?
Oder gibt es eine Möglichkeit der Uni-Query zu sagen
"mach trotzdem mehr als einen Befehl pro Query-ExecSQL"?

Vielen Dank schonmal für die Zeit!

Liebe Grüße
Incocnito
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz