PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL, SQL-Status:42601

Dies erstellt einen anonymen zusammengesetzten Wert:

select (1, 'a');

Zum Beispiel:

=> select (1, 'a');
  row  
-------
 (1,a)
(1 row)

=> select row(1, 'a');
  row  
-------
 (1,a)
(1 row)

Beachten Sie, dass dies ein einzelner zusammengesetzter Wert ist, nicht mehrere Werte.

Aus dem feinen Handbuch:

8.16.2. Eingabe zusammengesetzter Werte

Um einen zusammengesetzten Wert als Literalkonstante zu schreiben, schließen Sie die Feldwerte in Klammern ein und trennen Sie sie durch Kommas. Sie können jeden Feldwert in doppelte Anführungszeichen setzen und müssen dies tun, wenn er Kommas oder Klammern enthält.
[...]
Die ROW Ausdruckssyntax kann auch verwendet werden, um zusammengesetzte Werte zu erstellen. In den meisten Fällen ist dies wesentlich einfacher zu verwenden als die String-Literal-Syntax, da Sie sich nicht um mehrere Ebenen von Anführungszeichen kümmern müssen. Diese Methode haben wir bereits oben verwendet:

ROW('fuzzy dice', 42, 1.99)
ROW('', 42, NULL)

Die ROW Schlüsselwort ist eigentlich optional, solange Sie mehr als ein Feld im Ausdruck haben, also können diese vereinfacht werden zu:

('fuzzy dice', 42, 1.99)
('', 42, NULL)

Die Zeilenkonstruktoren Abschnitt könnte ebenfalls von Interesse sein.

Wenn Sie das sagen:

INSERT INTO circuit (id_circuit, description, date_start, date_end, speed,
length, duration)
SELECT (...)
FROM segment seg, wgs cir where seg.id = 13077

Ihr SELECT -Klausel hat nur eine Spalte als gesamter (...) Ausdruck stellt einen einzelnen Wert dar. Die Lösung besteht darin, diese Klammern einfach wegzulassen:

INSERT INTO circuit (id_circuit, description, date_start, date_end, speed, length, duration)
SELECT seg.id_segment, ..., (seg.date_end - seg.date_start)
FROM segment seg, wgs cir where seg.id = 13077