Datensatz für andere Nutzer sperren

Hallo,

ich weiß das das Thema schon hier diskutiert wurde aber ich bin daraus nicht wirklich schlau geworden.
Ich habe folgendes Problem.
Ich habe 2 Tabellen in postgresql. In der einen Tabelle stehen Messpunkte drin. In der anderen die dazugehörigen Messwerte.
Meine Anwendung (Java) greift über ein Netzwerk auf diese Daten zu und zeigt diese an. Bei der Eingabe oder Änderung von Messwerten kann nun das Problem auftreten das mehrere Nutzer gleichzeitig auf den selben Datensatz zugreifen und Werte schreiben wollen. Dabei werden die Werte des ersten Nutzer überschrieben.
Daher meine Frage: “Wie kann ich für andere Nutzer Datensätze sperren wenn diese sich gerade in Bearbeitung befinden?”

mein Prof. meinte dazu nur das es eine Abfrage gibt oder so mit der man prüfen kann ob sich ein Datensatz in Bearbeitung befindet und somit keine weiteren Updates/Inserts ausführen kann.

kann mir hier einer weiterhelfen?

Du machst ja jetzt schon ein SELECT … from table where …, da hängst noch ein FOR UPDATE NOWAIT dran. Ist der Datensatz nicht in Bearbeitung, wird er zurückgeliefert UND GESPERRT. Der nächste, der ankommt, bekommt gesagt, daß kein lock erstellt werden konnte.

Erst wenn die erste Transaktion fertig ist, kann jemand anders den Record ändern.

Andreas

Frage : ist "FOR UPDATE nicht die “Standard” Vorgabe ?
NOWAIT scheint es erst seit der v9.x zu geben.

unter Xbase (alle Versionen) weiss ich was ein “lock” ist und wie man ihn wieder aufhebt.

als PostgreSQL Newbie muss ich fragen “wo” ich eine “Absage” bekomme …

SELECT ... FROM MyTable WHERE a="Blabla" -> Result Set mit mehreren Rows
...
BROWSE -> Liste Auswahl einer Zeile
...
// HIER würde ich gerne den "lock" machen
...
FOR i := 1 TO iMax
   AADD(aValue, oResult:getValue( 0, i - 1 ) )
NEXT
...
EDIT -> die Fields der Zeile editieren
...
"UPDATE " + ::cTable + " SET " -> geänderte Fields zurück schreiben

ich benötige die “Sperre” NICHT in der Listen Auswahl sondern erst wenn die Auswahl getroffen wurde.

… wobei “Sperre” so klingt als wenn ich gar keinen Zugriff auf den Datensatz ( Zeile / Result Set) bekäme ? … auch nicht “read-only” ?