Rocksolid Light

groups  faq  privacy  How to post  login

Message-ID:  

question = ( to ) ? be : ! be; -- Wm. Shakespeare


rocksolid / de.comp.datenbanken.misc / Postgres: gleichzeitiger Zugriff

SubjectAuthor
* Postgres: gleichzeitiger ZugriffAlexander Goetzenstein
+* Re: Postgres: gleichzeitiger ZugriffStefan Froehlich
|`* Re: Postgres: gleichzeitiger ZugriffAlexander Goetzenstein
| +- Re: Postgres: gleichzeitiger ZugriffStefan Froehlich
| `- Re: Postgres: gleichzeitiger ZugriffTim Landscheidt
`* Re: Postgres: gleichzeitiger ZugriffStefan Ram
 `* Re: Postgres: gleichzeitiger ZugriffAlexander Goetzenstein
  `* Re: Postgres: gleichzeitiger ZugriffStefan Ram
   `- Re: Postgres: gleichzeitiger ZugriffStefan Froehlich

1
Subject: Postgres: gleichzeitiger Zugriff
From: Alexander Goetzenste
Newsgroups: de.comp.datenbanken.misc
Date: Fri, 12 Apr 2024 05:55 UTC
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: alexande...@web.de (Alexander Goetzenstein)
Newsgroups: de.comp.datenbanken.misc
Subject: Postgres: gleichzeitiger Zugriff
Date: Fri, 12 Apr 2024 07:55:02 +0200
Lines: 25
Message-ID: <804d9cde-d8d9-4ab4-81f8-0caa048ab5ab@alexander-goetzenstein.my-fqdn.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: individual.net pdSvqUzlMlux7WwzgY2lJwjnDAVuVdRsfZFZFipR7LvQyFNjiz
Cancel-Lock: sha1:iYQ+HFK2A6u+/meXbAA/ajjYueU= sha256:ZNv4lMs74t5XOwP5AQn9Qz5CgE8MhmgaOvHXvPOr7ag=
User-Agent: Mozilla Thunderbird
Content-Language: de-DE
View all headers

Hallo,
vorweg: ich habe so gut wie keine Ahnung von Datenbanken, bin blutiger
Anfänger. Jetzt habe ich mir von einem Entwickler sagen lassen, dass
Postgres (für die schreibt er Anwendungen) nicht von sich aus steuert,
wie mehrere Nutzer gleichzeitig mit der Datenbank arbeiten. Er sagte,
dass mehrere Nutzer zeitgleich denselben Datensatz bearbeiten können,
und wer zuletzt speichert (heißt das so?), dessen Daten sind dann in der
Datenbank, die des anderen Nutzers werden überschrieben.

Ist das so?
Mich hat das überrascht, da ich davon ausging, dass Postgres eine
gleichzeitige Änderung von sich aus nicht zulässt. Wie ich den
Entwickler verstanden habe, müsse die Anwendung, die mit der Datenbank
arbeitet, selbst dafür sorgen, dass die Zugriffe entsprechend
koordiniert und geschützt werden. Sorgt das nicht regelmäßig für
Durcheinander und Datenfehler? Schließlich müssen solche Situationen
erst einmal bemerkt werden, und die Bereinigung stelle ich mir auch
recht aufwendig vor.

Kann mich jemand erhellen?

--
Gruß
Alex

Subject: Re: Postgres: gleichzeitiger Zugriff
From: Stefan Froehlich
Newsgroups: de.comp.datenbanken.misc
Date: Fri, 12 Apr 2024 11:48 UTC
References: 1
Path: i2pn2.org!i2pn.org!usenet.goja.nl.eu.org!3.eu.feeder.erje.net!feeder.erje.net!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: Stefan+U...@Froehlich.Priv.at (Stefan Froehlich)
Newsgroups: de.comp.datenbanken.misc
Subject: Re: Postgres: gleichzeitiger Zugriff
Date: 12 Apr 2024 11:48:15 GMT
Lines: 65
Message-ID: <5t66191c57i1b44d7n3e8%sfroehli@Froehlich.Priv.at>
References: <804d9cde-d8d9-4ab4-81f8-0caa048ab5ab@alexander-goetzenstein.my-fqdn.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: individual.net Q2UKLwStMLdxavdpFNVlQgotXl8HpL3B1ro+fKg+mQvD7C32c=
X-Orig-Path: not-for-mail
Cancel-Lock: sha1:skNEMMg59hGmJ3j+WfDtlCUncDI= sha256:9qwxsO4b+kWQIai0/nyFZbWtmH6IhCUqfuMoxdY8EfA=
X-Blattlinie: dieser Artikel repraesentiert meine persoenliche Meinung
X-Medieninhaber: Stefan Froehlich
X-Verleger: Stefan Froehlich
X-Verlagsort: Wien
X-Anschrift: 1230, Faerbermuehlgasse 4/2
User-Agent: tin/2.6.2-20221225 ("Pittyvaich") (Linux/6.1.0-13-amd64 (x86_64))
View all headers

On Fri, 12 Apr 2024 07:55:02 Alexander Goetzenstein wrote:
> [...] Postgres (für die schreibt er Anwendungen) nicht von sich
> aus steuert, wie mehrere Nutzer gleichzeitig mit der Datenbank
> arbeiten. Er sagte, dass mehrere Nutzer zeitgleich denselben
> Datensatz bearbeiten können, und wer zuletzt speichert (heißt das
> so?), dessen Daten sind dann in der Datenbank, die des anderen
> Nutzers werden überschrieben.

> Ist das so?

Der Jurist würde sagen "das hängt davon ab", aber im Grund genommen
ist das bei vielen Szenarien so, ganz unabhängig von der Datenbank.

> Mich hat das überrascht, da ich davon ausging, dass Postgres eine
> gleichzeitige Änderung von sich aus nicht zulässt. Wie ich den
> Entwickler verstanden habe, müsse die Anwendung, die mit der
> Datenbank arbeitet, selbst dafür sorgen, dass die Zugriffe
> entsprechend koordiniert und geschützt werden.

Es fängt schon einmal mit der Frage an, wann eine Änderung
"gleichzeitig" ist. Anno damals, als Applikationen irgendwo auf
einem Rechner oder Host liefen und permanente Datenbankverbindungen
offen hatten, war die Aufgabenstellung eine ganz andere als heute,
wo eine Webanwendung (notgedrungen) für jeden Zugriff eine neue
Verbindung aufbaut. Du hast meist so etwas wie:

Benutzer A: zeigt Maske zum Bearbeiten von Datensatz A an
Benutzer B: zeigt Maske zum Bearbeiten von Datensatz A an
Benutzer B: speichert geänderten Datensatz A1 ab
Benutzer A: speichert geänderten Datensatz A2 ab

Was sollte die Datenbank hier tun? Sie weiss ja nicht, von welchem
Status Benutzer A beim Speichern ausgegangen ist. Verhindern könnte
das allenfall die Applikation.

> Sorgt das nicht regelmäßig für Durcheinander und Datenfehler?

An sich nicht, nein, denn die allermeisten Daten werden nicht
gleichzeitig von unterschiedlichen Leuten unterschiedlich bearbeitet
(oder es ist irrelevant, weil z.B. von zwei verschiedenen Edits von
Adress-Stammdaten die Datenbank ohnehin nicht sagen kann, welcher
davon korrekt ist, daher ebenso gut der zweite den ersten
überschreiben kann). Letztlich ist das aber genau die Frage, die
sich der Applikationsentwickler stellen und sorgfältig beantworten
muss und auch, wie er das - falls erforderlich - verhindern möchte.

Innerhalb eines Zugriffs (d.h. einer Zeile im obigen Beispiel) muss
jedoch Transaktionssicherheit herrschen, wenn Chaos verhindert
werden soll; man möchte z.B. darauf vertrauen können, dass das
Ergebnis eines SELECT auch beim nachfolgenden INSERT noch gültig
ist. Dafür gibt es (nicht nur in PostgreSQL) Vorkehrungen, die Du
z.B. hier nachlesen kannst:

<https://www.postgresql.org/docs/current/transaction-iso.html>

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Werben mit Stefan - traumhaft werden mit Ironie.
(Sloganizer)

Subject: Re: Postgres: gleichzeitiger Zugriff
From: Stefan Ram
Newsgroups: de.comp.datenbanken.misc
Organization: Stefan Ram
Date: Fri, 12 Apr 2024 18:56 UTC
References: 1
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: ram...@zedat.fu-berlin.de (Stefan Ram)
Newsgroups: de.comp.datenbanken.misc
Subject: Re: Postgres: gleichzeitiger Zugriff
Date: 12 Apr 2024 18:56:24 GMT
Organization: Stefan Ram
Lines: 17
Expires: 1 Feb 2025 11:59:58 GMT
Message-ID: <Transaktion-20240412195550@ram.dialup.fu-berlin.de>
References: <804d9cde-d8d9-4ab4-81f8-0caa048ab5ab@alexander-goetzenstein.my-fqdn.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de jckUEKgciSz4+fqpndribwnYZEKX4Si2BwVF+3vCfHqmDZ
Cancel-Lock: sha1:02oDslSE6Z4o8amDLhiuDmd44pY= sha256:/KZH3xEsHp0I1iWbvcdgZlH4OQ9hFP8SEJsoYb0n0Ck=
X-Copyright: (C) Copyright 2024 Stefan Ram. All rights reserved.
Distribution through any means other than regular usenet
channels is forbidden. It is forbidden to publish this
article in the Web, to change URIs of this article into links,
and to transfer the body without this notice, but quotations
of parts in other Usenet posts are allowed.
X-No-Archive: Yes
Archive: no
X-No-Archive-Readme: "X-No-Archive" is set, because this prevents some
services to mirror the article in the web. But the article may
be kept on a Usenet archive server with only NNTP access.
X-No-Html: yes
Content-Language: de-DE-1901
View all headers

Alexander Goetzenstein <alexander_goetzenstein@web.de> schrieb oder zitierte:
>Anfänger. Jetzt habe ich mir von einem Entwickler sagen lassen, dass
>Postgres (für die schreibt er Anwendungen) nicht von sich aus steuert,
>wie mehrere Nutzer gleichzeitig mit der Datenbank arbeiten. Er sagte,
>dass mehrere Nutzer zeitgleich denselben Datensatz bearbeiten können,
>und wer zuletzt speichert (heißt das so?), dessen Daten sind dann in der
>Datenbank, die des anderen Nutzers werden überschrieben.

PostgreSQL unterstützt ACID-Transaktionen, was die übliche
beste Praxis auf diesem Gebiet ist. Es kann sein, daß
bei einer bestimmten Datenbank bestimmte Teile davon aus
Effizienzgründen deaktiviert wurden oder eine Anwendung nicht
von allen Möglichkeiten solcher Transaktionen Gebrauch macht.

PostgreSQL unterstützt sowohl RS- als auch RX-Sperren auf einer
Zeile, die verhindern, daß andere Transaktionen diese Zeile
verändern beziehungsweise sogar sie lesen können.

Subject: Re: Postgres: gleichzeitiger Zugriff
From: Alexander Goetzenste
Newsgroups: de.comp.datenbanken.misc
Date: Sat, 13 Apr 2024 08:25 UTC
References: 1 2
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: alexande...@web.de (Alexander Goetzenstein)
Newsgroups: de.comp.datenbanken.misc
Subject: Re: Postgres: gleichzeitiger Zugriff
Date: Sat, 13 Apr 2024 10:25:51 +0200
Lines: 78
Message-ID: <d44c3560-20ce-45db-a87c-80561c6ac3e3@alexander-goetzenstein.my-fqdn.de>
References: <804d9cde-d8d9-4ab4-81f8-0caa048ab5ab@alexander-goetzenstein.my-fqdn.de>
<5t66191c57i1b44d7n3e8%sfroehli@Froehlich.Priv.at>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: individual.net 5zMJQB3yWrqGRfAQ8bOgaQP3xdObqAF77KXLdEDXff0O/bV5RL
Cancel-Lock: sha1:bHKdyI/fkMOl7KYbijfWOKl6O2E= sha256:HIdqUbwatxVCpYxrvk4LIOuWW4m9ctuNTTW8YbyM4RU=
User-Agent: Mozilla Thunderbird
Content-Language: de-DE
In-Reply-To: <5t66191c57i1b44d7n3e8%sfroehli@Froehlich.Priv.at>
View all headers

Hallo,

Am 12.04.24 um 13:48 schrieb Stefan Froehlich:
> On Fri, 12 Apr 2024 07:55:02 Alexander Goetzenstein wrote:
>> [...] Postgres (für die schreibt er Anwendungen) nicht von sich
>> aus steuert, wie mehrere Nutzer gleichzeitig mit der Datenbank
>> arbeiten. Er sagte, dass mehrere Nutzer zeitgleich denselben
>> Datensatz bearbeiten können, und wer zuletzt speichert (heißt das
>> so?), dessen Daten sind dann in der Datenbank, die des anderen
>> Nutzers werden überschrieben.
>
>> Ist das so?
>
> Der Jurist würde sagen "das hängt davon ab", aber im Grund genommen
> ist das bei vielen Szenarien so, ganz unabhängig von der Datenbank.
>
>> Mich hat das überrascht, da ich davon ausging, dass Postgres eine
>> gleichzeitige Änderung von sich aus nicht zulässt. Wie ich den
>> Entwickler verstanden habe, müsse die Anwendung, die mit der
>> Datenbank arbeitet, selbst dafür sorgen, dass die Zugriffe
>> entsprechend koordiniert und geschützt werden.
>
> Es fängt schon einmal mit der Frage an, wann eine Änderung
> "gleichzeitig" ist. Anno damals, als Applikationen irgendwo auf
> einem Rechner oder Host liefen und permanente Datenbankverbindungen
> offen hatten, war die Aufgabenstellung eine ganz andere als heute,
> wo eine Webanwendung (notgedrungen) für jeden Zugriff eine neue
> Verbindung aufbaut. Du hast meist so etwas wie:
>
> Benutzer A: zeigt Maske zum Bearbeiten von Datensatz A an
> Benutzer B: zeigt Maske zum Bearbeiten von Datensatz A an
> Benutzer B: speichert geänderten Datensatz A1 ab
> Benutzer A: speichert geänderten Datensatz A2 ab
>
> Was sollte die Datenbank hier tun? Sie weiss ja nicht, von welchem
> Status Benutzer A beim Speichern ausgegangen ist. Verhindern könnte
> das allenfall die Applikation.

ich könnte mir vorstellen, dass die DB einen zum Schreiben geöffneten
Datensatz für andere Bearbeitungen sperrt und nur readonly-Zugriffe
zulässt, bis der Datensatz wieder geschlossen wird. So ähnlich, wie es
bspw. gängige Office-Anwendungen mit einer lock-Datei machen, nur eben
über interne Mechanismen. Im Grunde hätte ich so etwas als Standard
erwartet.

>> Sorgt das nicht regelmäßig für Durcheinander und Datenfehler?
>
> An sich nicht, nein, denn die allermeisten Daten werden nicht
> gleichzeitig von unterschiedlichen Leuten unterschiedlich bearbeitet
> (oder es ist irrelevant, weil z.B. von zwei verschiedenen Edits von
> Adress-Stammdaten die Datenbank ohnehin nicht sagen kann, welcher
> davon korrekt ist, daher ebenso gut der zweite den ersten
> überschreiben kann). Letztlich ist das aber genau die Frage, die
> sich der Applikationsentwickler stellen und sorgfältig beantworten
> muss und auch, wie er das - falls erforderlich - verhindern möchte.
>
>
> Innerhalb eines Zugriffs (d.h. einer Zeile im obigen Beispiel) muss
> jedoch Transaktionssicherheit herrschen, wenn Chaos verhindert
> werden soll; man möchte z.B. darauf vertrauen können, dass das
> Ergebnis eines SELECT auch beim nachfolgenden INSERT noch gültig
> ist. Dafür gibt es (nicht nur in PostgreSQL) Vorkehrungen, die Du
> z.B. hier nachlesen kannst:
>
> <https://www.postgresql.org/docs/current/transaction-iso.html>

Das schaue ich mir gleich mal an und hoffe, dass ich das auch
verstehe... ;-)

>
> Servus,
> Stefan
>

--
Gruß
Alex

Subject: Re: Postgres: gleichzeitiger Zugriff
From: Alexander Goetzenste
Newsgroups: de.comp.datenbanken.misc
Date: Sat, 13 Apr 2024 08:37 UTC
References: 1 2
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: alexande...@web.de (Alexander Goetzenstein)
Newsgroups: de.comp.datenbanken.misc
Subject: Re: Postgres: gleichzeitiger Zugriff
Date: Sat, 13 Apr 2024 10:37:42 +0200
Lines: 44
Message-ID: <1fdf2928-534a-4baf-9ece-9d045668e155@alexander-goetzenstein.my-fqdn.de>
References: <804d9cde-d8d9-4ab4-81f8-0caa048ab5ab@alexander-goetzenstein.my-fqdn.de>
<Transaktion-20240412195550@ram.dialup.fu-berlin.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: individual.net GagzlAHwxvSAAa1SPFS/Gg+rExWTLKXkGLoWBTvpkF3vUAjsh+
Cancel-Lock: sha1:b1WtAfmnmOhLlVOYxCXu3N7Fwm8= sha256:YbvF8+MLdQVbqFSOJhctle022YOEcupkpDfyiVR0vlk=
User-Agent: Mozilla Thunderbird
Content-Language: de-DE
In-Reply-To: <Transaktion-20240412195550@ram.dialup.fu-berlin.de>
View all headers

Hallo,

Am 12.04.24 um 20:56 schrieb Stefan Ram:
> Alexander Goetzenstein <alexander_goetzenstein@web.de> schrieb oder
> zitierte:
>> Anfänger. Jetzt habe ich mir von einem Entwickler sagen lassen,
>> dass Postgres (für die schreibt er Anwendungen) nicht von sich aus
>> steuert, wie mehrere Nutzer gleichzeitig mit der Datenbank
>> arbeiten. Er sagte, dass mehrere Nutzer zeitgleich denselben
>> Datensatz bearbeiten können, und wer zuletzt speichert (heißt das
>> so?), dessen Daten sind dann in der Datenbank, die des anderen
>> Nutzers werden überschrieben.
>
> PostgreSQL unterstützt ACID-Transaktionen, was die übliche beste
> Praxis auf diesem Gebiet ist. Es kann sein, daß bei einer bestimmten
> Datenbank bestimmte Teile davon aus Effizienzgründen deaktiviert
> wurden oder eine Anwendung nicht von allen Möglichkeiten solcher
> Transaktionen Gebrauch macht.

zu diesem Stichwort habe ich diese Erklärung gefunden:

>> Sperren verhindern gleichzeitige Änderung von Datensätzen durch
>> mehrere Benutzer und die Rückgabe inkonsistenter Daten. Hierfür
>> werden z.B. gemeinsame, exklusive, beabsichtigte und andere Sperren
>> auf der Ebene von Datenbanken, Tabellen, Speicher-Seiten und Zeilen
>> verwendet.

ACID bezieht sich dabei auf die einzelne Transaktion, nicht auf die
gesamte DB, wenn ich es richtig verstanden habe.

Das dürfte ziemlich genau das sein, was ich erwartet hätte, was der
Entwickler, mit dem ich sprach, aber in Abrede stellte.

> PostgreSQL unterstützt sowohl RS- als auch RX-Sperren auf einer
> Zeile, die verhindern, daß andere Transaktionen diese Zeile
> verändern beziehungsweise sogar sie lesen können.

Was muss man tun, damit PostgreSQL diese Sperren anwendet?

--
Gruß
Alex

Subject: Re: Postgres: gleichzeitiger Zugriff
From: Stefan Froehlich
Newsgroups: de.comp.datenbanken.misc
Date: Sat, 13 Apr 2024 10:06 UTC
References: 1 2 3
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: Stefan+U...@Froehlich.Priv.at (Stefan Froehlich)
Newsgroups: de.comp.datenbanken.misc
Subject: Re: Postgres: gleichzeitiger Zugriff
Date: 13 Apr 2024 10:06:55 GMT
Lines: 67
Message-ID: <1t661a57a9i1ebe9cn3e8%sfroehli@Froehlich.Priv.at>
References: <804d9cde-d8d9-4ab4-81f8-0caa048ab5ab@alexander-goetzenstein.my-fqdn.de> <5t66191c57i1b44d7n3e8%sfroehli@Froehlich.Priv.at> <d44c3560-20ce-45db-a87c-80561c6ac3e3@alexander-goetzenstein.my-fqdn.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: individual.net zUyPgT5R8HskGw4eO072TQ0U6eV+YQY/s1R5SAOlMIvA/diEk=
X-Orig-Path: not-for-mail
Cancel-Lock: sha1:IeKCPFsYVMJTcfhXKWNYX/iXJXE= sha256:puzDERYLwTOI8YhnawDOjEf9eiBr98ma+Q9YUHK8jBg=
X-Blattlinie: dieser Artikel repraesentiert meine persoenliche Meinung
X-Medieninhaber: Stefan Froehlich
X-Verleger: Stefan Froehlich
X-Verlagsort: Wien
X-Anschrift: 1230, Faerbermuehlgasse 4/2
User-Agent: tin/2.6.2-20221225 ("Pittyvaich") (Linux/6.1.0-13-amd64 (x86_64))
View all headers

On Sat, 13 Apr 2024 10:25:51 Alexander Goetzenstein wrote:
> Am 12.04.24 um 13:48 schrieb Stefan Froehlich:
>> Anno damals, als Applikationen irgendwo auf einem Rechner oder
>> Host liefen und permanente Datenbankverbindungen offen hatten,
>> war die Aufgabenstellung eine ganz andere als heute, wo eine
>> Webanwendung (notgedrungen) für jeden Zugriff eine neue
>> Verbindung aufbaut. Du hast meist so etwas wie:

>> Benutzer A: zeigt Maske zum Bearbeiten von Datensatz A an
>> Benutzer B: zeigt Maske zum Bearbeiten von Datensatz A an
>> Benutzer B: speichert geänderten Datensatz A1 ab
>> Benutzer A: speichert geänderten Datensatz A2 ab

>> Was sollte die Datenbank hier tun? Sie weiss ja nicht, von welchem
>> Status Benutzer A beim Speichern ausgegangen ist. Verhindern könnte
>> das allenfall die Applikation.

> ich könnte mir vorstellen, dass die DB einen zum Schreiben
> geöffneten Datensatz für andere Bearbeitungen sperrt und nur
> readonly-Zugriffe zulässt, bis der Datensatz wieder geschlossen
> wird. So ähnlich, wie es bspw. gängige Office-Anwendungen mit
> einer lock-Datei machen, nur eben über interne Mechanismen. Im
> Grunde hätte ich so etwas als Standard erwartet.

Klar, wenn man das tut (PostgreSQL und die meisten anderen
Datenbanken können entsprechend betrieben werden), funktioniert
alles genau so, wie Du Dir das erwartest. Wenn Du das in der
maximalen Ausbaustufe durchziehst, gibt dabei allerdings zwei
Probleme:

1) ein Datensatz ist vom ersten SELECT bis zum abschließenden COMMIT
für andere (wenigstens zum Bearbeiten) gesperrt. Das kann dauern und
senkt die Benutzerzufriedenheit - was, wenn der erste Benutzer nach
dem Aufruf der Bildschirmmaske ins Wochenende gegangen ist?

2) die meisten aktuellen Anwendungen laufen irgendwo im Browser,
d.h. Du hast gar keine Sitzung, die "Anzeigen" und "Speichern"
einschließt, sondern zwei vollkommen getrennte Requests. In diesem
Fall, und der ist häufig, hat die Datenbank gar keine Möglichkeit,
die schwebende Transaktion als solche zu erkennen.

>> <https://www.postgresql.org/docs/current/transaction-iso.html>

> Das schaue ich mir gleich mal an und hoffe, dass ich das auch
> verstehe... ;-)

Das zu verstehen ist durchaus wichtig, denn selbst im zweiten Fall
möchte man doch innerhalb eines Schreibvorgangs garantierte
Konsistenz.

Dem Benutzer allenfalls auszugeben, dass das, was er gerade
bearbeitet hat, in der Zwischenzeit von jemand anderem gelöscht
wurde: Damit muss er leben, und bei etwas entspannterer Betrachtung
ist das auch gar kein Verlust (der andere hätte den Datensatz ja
auch ein paar Sekunden später löschen können, mit dem gleichen
Ergebnis). *Innerhalb* eines Schreibvorgangs (bestehend aus vielen
SQL-Statements) darf dergleichen jedoch nicht passieren.

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Ein netter Gedanke - Stefan: jammern, welch perverses Verlangen!
(Sloganizer)

Subject: Re: Postgres: gleichzeitiger Zugriff
From: Tim Landscheidt
Newsgroups: de.comp.datenbanken.misc
Organization: https://www.tim-landscheidt.de/
Date: Sat, 13 Apr 2024 10:47 UTC
References: 1 2 3
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: tim...@tim-landscheidt.de (Tim Landscheidt)
Newsgroups: de.comp.datenbanken.misc
Subject: Re: Postgres: gleichzeitiger Zugriff
Date: Sat, 13 Apr 2024 10:47:24 +0000
Organization: https://www.tim-landscheidt.de/
Lines: 61
Message-ID: <87v84lv8sj.fsf@vagabond.tim-landscheidt.de>
References: <804d9cde-d8d9-4ab4-81f8-0caa048ab5ab@alexander-goetzenstein.my-fqdn.de>
<5t66191c57i1b44d7n3e8%sfroehli@Froehlich.Priv.at>
<d44c3560-20ce-45db-a87c-80561c6ac3e3@alexander-goetzenstein.my-fqdn.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Trace: individual.net So/3XgFAJMZJM37D5H3muQqC/YqPjIqGMgxpg7L+YmNhi8xRx2
Cancel-Lock: sha1:jUYJXdf/MvClGPeBhOttwhih6xs= sha1:rRMeoQp96e7t/uW/64S1t3h8AN4= sha256:Dv+aUQeIhvIIPYvj0B5ID0D7qBpaYkJgyDLrWQWHoss=
User-Agent: Gnus/5.13 (Gnus v5.13)
View all headers

Alexander Goetzenstein <alexander_goetzenstein@web.de> wrote:

>>> [...] Postgres (für die schreibt er Anwendungen) nicht von sich
>>> aus steuert, wie mehrere Nutzer gleichzeitig mit der Datenbank
>>> arbeiten. Er sagte, dass mehrere Nutzer zeitgleich denselben
>>> Datensatz bearbeiten können, und wer zuletzt speichert (heißt das
>>> so?), dessen Daten sind dann in der Datenbank, die des anderen
>>> Nutzers werden überschrieben.

>>> Ist das so?

>> Der Jurist würde sagen "das hängt davon ab", aber im Grund genommen
>> ist das bei vielen Szenarien so, ganz unabhängig von der Datenbank.

>>> Mich hat das überrascht, da ich davon ausging, dass Postgres eine
>>> gleichzeitige Änderung von sich aus nicht zulässt. Wie ich den
>>> Entwickler verstanden habe, müsse die Anwendung, die mit der
>>> Datenbank arbeitet, selbst dafür sorgen, dass die Zugriffe
>>> entsprechend koordiniert und geschützt werden.

>> Es fängt schon einmal mit der Frage an, wann eine Änderung
>> "gleichzeitig" ist. Anno damals, als Applikationen irgendwo auf
>> einem Rechner oder Host liefen und permanente Datenbankverbindungen
>> offen hatten, war die Aufgabenstellung eine ganz andere als heute,
>> wo eine Webanwendung (notgedrungen) für jeden Zugriff eine neue
>> Verbindung aufbaut. Du hast meist so etwas wie:

>> Benutzer A: zeigt Maske zum Bearbeiten von Datensatz A an
>> Benutzer B: zeigt Maske zum Bearbeiten von Datensatz A an
>> Benutzer B: speichert geänderten Datensatz A1 ab
>> Benutzer A: speichert geänderten Datensatz A2 ab

>> Was sollte die Datenbank hier tun? Sie weiss ja nicht, von welchem
>> Status Benutzer A beim Speichern ausgegangen ist. Verhindern könnte
>> das allenfall die Applikation.

> ich könnte mir vorstellen, dass die DB einen zum Schreiben geöffneten
> Datensatz für andere Bearbeitungen sperrt und nur readonly-Zugriffe
> zulässt, bis der Datensatz wieder geschlossen wird. So ähnlich, wie es
> bspw. gängige Office-Anwendungen mit einer lock-Datei machen, nur eben
> über interne Mechanismen. Im Grunde hätte ich so etwas als Standard
> erwartet.

> […]

Das funktioniert aber auf so niedriger Ebene schlecht in
Mehrbenutzerumgebungen, und deshalb geht auch bei Office-An-
wendungen die Tendenz dahin, dass man mit mehreren Benutzern
gleichzeitig dieselbe Datei bearbeiten kann und Konflikte
anders signalisiert werden.

Wie in diesem Thread schon geschrieben: Man löst das Problem
normalerweise auf der Anwendungsebene, indem man man dem Be-
nutzer anzeigt, dass gerade ein anderer Benutzer auch diese
und jene Daten bearbeitet/bearbeiten will oder dass die Da-
ten zwischen den Klicks auf „Bearbeiten“ und „Speichern“
durch andere Benutzer geändert wurden, und fragt, ob die Än-
derungen überschrieben werden sollen, man sie überarbeiten
möchte, abbrechen will, etc.

Tim

Subject: Re: Postgres: gleichzeitiger Zugriff
From: Stefan Ram
Newsgroups: de.comp.datenbanken.misc
Organization: Stefan Ram
Date: Sat, 13 Apr 2024 11:36 UTC
References: 1 2 3
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!fu-berlin.de!uni-berlin.de!not-for-mail
From: ram...@zedat.fu-berlin.de (Stefan Ram)
Newsgroups: de.comp.datenbanken.misc
Subject: Re: Postgres: gleichzeitiger Zugriff
Date: 13 Apr 2024 11:36:31 GMT
Organization: Stefan Ram
Lines: 28
Expires: 1 Feb 2025 11:59:58 GMT
Message-ID: <Sperren-20240413123535@ram.dialup.fu-berlin.de>
References: <804d9cde-d8d9-4ab4-81f8-0caa048ab5ab@alexander-goetzenstein.my-fqdn.de> <Transaktion-20240412195550@ram.dialup.fu-berlin.de> <1fdf2928-534a-4baf-9ece-9d045668e155@alexander-goetzenstein.my-fqdn.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de D4usdLUz8tEAlwPytb+x5weovop6u+oij7xanSnReauuNZ
Cancel-Lock: sha1:M7nFkmBlgGwPG+/rD5Rbub7CXzU= sha256:nuHDmsyDzCRvT7sxOqsSta8oKhpRGDcjZQcfsBacTPI=
X-Copyright: (C) Copyright 2024 Stefan Ram. All rights reserved.
Distribution through any means other than regular usenet
channels is forbidden. It is forbidden to publish this
article in the Web, to change URIs of this article into links,
and to transfer the body without this notice, but quotations
of parts in other Usenet posts are allowed.
X-No-Archive: Yes
Archive: no
X-No-Archive-Readme: "X-No-Archive" is set, because this prevents some
services to mirror the article in the web. But the article may
be kept on a Usenet archive server with only NNTP access.
X-No-Html: yes
Content-Language: de-DE-1901
View all headers

Alexander Goetzenstein <alexander_goetzenstein@web.de> schrieb oder zitierte:
>Was muss man tun, damit PostgreSQL diese Sperren anwendet?

In bestimmten Fällen werden diese von PostgreSQL schon automatisch
angewendet, wenn sie erkennbar sinnvoll sind.

Siehe Abschnitt "13.3.2. Row-Level Locks" in dem PostgreSQL-Handbuch
"PostgreSQL 16.2 Documentation" von 2024.

Demnach können Sperren mit Klauseln wie "FOR UPDATE", "FOR
NO KEY UPDATE", "FOR SHARE", "FOR KEY SHARE" auch explizit
angewendet werden (wohl innerhalb einer Transaktion).

(Man sollte dazu aber auch vorher mit "SET TRANSACTION" die
gewünschte Isolationsstufe eingestellt haben. Das Verhalten
kann auch mit der "ON CONFLICT"-Klausel modifiziert werden.)

Allerdings kann damit wohl nicht das /Lesen/ einer Zeile verhindert
werden. Ich hatte zuvor geschrieben, daß es verhindert werden könne,
"daß andere Transaktionen diese Zeile verändern beziehungsweise
sogar sie lesen können", weil ich dies woanders gelesen hatte.
Aber jetzt kann ich nicht herausfinden, wie das genau gehen soll.
Allerdings kann man wohl mit einer ACCESS-EXCLUSIVE-Sperre einer
Table das Lesen in einer anderen Transaktion verhindern.

Möglicherweise können auch ADVISORY-Sperren (13.3.5. Advisory
Locks) verwendet werden, um in einer Anwendungen parallele
Bearbeitungen zu verhindern.

Subject: Re: Postgres: gleichzeitiger Zugriff
From: Stefan Froehlich
Newsgroups: de.comp.datenbanken.misc
Date: Sat, 13 Apr 2024 11:50 UTC
References: 1 2 3 4
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: Stefan+U...@Froehlich.Priv.at (Stefan Froehlich)
Newsgroups: de.comp.datenbanken.misc
Subject: Re: Postgres: gleichzeitiger Zugriff
Date: 13 Apr 2024 11:50:27 GMT
Lines: 28
Message-ID: <3t661a7117i1ef86dn3e8%sfroehli@Froehlich.Priv.at>
References: <804d9cde-d8d9-4ab4-81f8-0caa048ab5ab@alexander-goetzenstein.my-fqdn.de> <Transaktion-20240412195550@ram.dialup.fu-berlin.de> <1fdf2928-534a-4baf-9ece-9d045668e155@alexander-goetzenstein.my-fqdn.de> <Sperren-20240413123535@ram.dialup.fu-berlin.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: individual.net L2jymNuJsWYGDigza8saXgKnHFGkt7lAUJ3Y3klKO1i7alOF4=
X-Orig-Path: not-for-mail
Cancel-Lock: sha1:eC2b9xsInYuTcgSIdEiQthkVZg0= sha256:ABjwTmuTPJRBUjga6QU9SV9IoYCcEaxG8bCm022u208=
X-Blattlinie: dieser Artikel repraesentiert meine persoenliche Meinung
X-Medieninhaber: Stefan Froehlich
X-Verleger: Stefan Froehlich
X-Verlagsort: Wien
X-Anschrift: 1230, Faerbermuehlgasse 4/2
User-Agent: tin/2.6.2-20221225 ("Pittyvaich") (Linux/6.1.0-13-amd64 (x86_64))
View all headers

On Sat, 13 Apr 2024 13:36:31 Stefan Ram wrote:
> Demnach können Sperren mit Klauseln wie "FOR UPDATE", "FOR
> NO KEY UPDATE", "FOR SHARE", "FOR KEY SHARE" auch explizit
> angewendet werden (wohl innerhalb einer Transaktion).

Das ist halt ziemlich grausam, weil sehr fehleranfällig.

> Allerdings kann damit wohl nicht das /Lesen/ einer Zeile
> verhindert werden. Ich hatte zuvor geschrieben, daß es
> verhindert werden könne, "daß andere Transaktionen diese Zeile
> verändern beziehungsweise sogar sie lesen können", weil ich dies
> woanders gelesen hatte. Aber jetzt kann ich nicht herausfinden,
> wie das genau gehen soll.

Ich würde Isolation Leven serializable vorschlagen, damit wird alles
verhindert, was böse sein könnte (sofern alles brav in Transactions
durchgeführt wird, auch reine Lesezugriffe, und deren Gültigkeit
erst nach dem COMMIT als gegeben betrachtet wird).

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Stefan, so superb wie die Erde.
(Sloganizer)


rocksolid / de.comp.datenbanken.misc / Postgres: gleichzeitiger Zugriff

1
server_pubkey.txt

rocksolid light 0.9.12
clearnet tor