Heim > Datenbank > MySQL-Tutorial > Wie rufe ich alte Spaltenwerte nach einem UPDATE in PostgreSQL nur mit SQL ab?

Wie rufe ich alte Spaltenwerte nach einem UPDATE in PostgreSQL nur mit SQL ab?

DDD
Freigeben: 2025-01-06 00:52:39
Original
287 Leute haben es durchsucht

How to Retrieve Old Column Values After an UPDATE in PostgreSQL Using Only SQL?

So erhalten Sie Spaltenwerte vor der Aktualisierung nur mit SQL

Problem:

PostgreSQL erlaubt das Abrufen von Voraktualisierungen nicht Spaltenwerte in der RETURNING-Klausel einer UPDATE-Anweisung aktualisieren. Dies stellt eine Herausforderung dar, wenn versucht wird, die alten Werte aktualisierter Spalten zu erhalten, ohne zusätzliche Mechanismen wie Trigger oder Prozeduren einzusetzen.

Lösung mit einem Self-Join:

Eine Lösung besteht darin, einen Self-Join in der FROM-Klausel zu nutzen. Diese Technik erstellt effektiv eine Kopie der Tabelle und ermöglicht die Referenzierung sowohl der aktualisierten als auch der Werte vor der Aktualisierung:

UPDATE tbl x
SET    tbl_id = 23
     , name = 'New Guy'
FROM   tbl y                -- Using the FROM clause
WHERE  x.tbl_id = y.tbl_id  -- Must be UNIQUE NOT NULL
AND    x.tbl_id = 3
RETURNING y.tbl_id AS old_id, y.name AS old_name
        , x.tbl_id          , x.name;
Nach dem Login kopieren

Diese Methode erfordert eine UNIQUE NOT NULL-Spalte für die Selbstverknüpfung, um sicherzustellen, dass jede Zeile übereinstimmt an ein einzelnes Gegenstück in der verbundenen Instanz.

Lösungen für gleichzeitige Schreiblast:

In In Szenarien mit starker Schreibparallelität gibt es zwei Optionen zur Verhinderung von Race Conditions:

Option 1: SERIALIZABLE-Isolationsstufe:

Die Verwendung der SERIALIZABLE-Isolationsstufe gewährleistet den exklusiven Zugriff auf Zeilen während Transaktionsausführung, wodurch gleichzeitige Schreibvorgänge verhindert werden:

BEGIN ISOLATION LEVEL SERIALIZABLE;
UPDATE ... ;
COMMIT;
Nach dem Login kopieren

Option 2: Explizit Sperren:

Alternativ kann eine explizite Sperre verwendet werden, um gleichzeitige Aktualisierungen von Zeilen zu verhindern:

UPDATE tbl x
SET    tbl_id = 24
     , name = 'New Gal'
FROM  (SELECT tbl_id, name FROM tbl WHERE tbl_id = 4 FOR UPDATE) y 
WHERE  x.tbl_id = y.tbl_id
RETURNING y.tbl_id AS old_id, y.name AS old_name
        , x.tbl_id          , x.name;
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie rufe ich alte Spaltenwerte nach einem UPDATE in PostgreSQL nur mit SQL ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage