Manchmal möchten Sie vielleicht verschieben Sie einige Daten von einer Spalte in eine andere Spalte. Durch Verschieben (im Gegensatz zu Kopieren), meine ich, dass die neue Spalte ursprünglich Null vor dem Ausführen der Operation war, und die alte Spalte sollte nach dem Ausführen der Operation auf null festgelegt werden.Verschieben von Daten von einer Spalte in eine andere in PostgreSQL
Ich habe eine Tabelle als solche definiert:
CREATE TABLE photos(id BIGSERIAL PRIMARY KEY, photo1 BYTEA, photo2 BYTEA);
Angenommen, ein Eintrag in der Tabelle ist, wo photo1
einige Daten enthält, und photo2
NULL
ist. Ich möchte eine UPDATE
Anfrage machen, dass photo1
wird NULL
und photo2
enthält die Daten, die ursprünglich in photo1
war.
ich geben Sie den folgenden SQL-Befehl (WHERE
Klausel der Kürze halber weggelassen):
UPDATE photos SET photo2 = photo1, photo1 = NULL;
Es scheint zu funktionieren.
Ich versuchte es auch auf diese Weise:
UPDATE photos SET photo1 = NULL, photo2 = photo1;
Es scheint auch zu funktionieren.
Aber ist es garantiert zu arbeiten? Konnte speziell photo1
auf NULL
gesetzt werden, bevorphoto2
auf photo1
gesetzt wird, wodurch mich am Ende mit NULL
in beiden Spalten enden?
Als Nebenwirkung dieser Standard UPDATE
Syntax scheint ineffizient, wenn meine BYTEA
s groß sind, als photo2
Byte-für-Byte kopiert werden muss von photo1
, wenn ein einfacher Austausch von Zeigern könnte reicht haben. Vielleicht gibt es einen effizienteren Weg, von dem ich nichts weiß?
Ja, dies funktioniert garantiert (und wird vom SQL-Standard benötigt) –