Detta konstruerar ett anonymt sammansatt värde:
select (1, 'a');
Till exempel:
=> select (1, 'a');
row
-------
(1,a)
(1 row)
=> select row(1, 'a');
row
-------
(1,a)
(1 row)
Observera att det är ett enda sammansatt värde, inte flera värden.
Från den fina manualen:
8.16.2. Sammansatt värdeinmatning
Om du vill skriva ett sammansatt värde som en bokstavlig konstant, omsluter du fältvärdena inom parentes och separerar dem med kommatecken. Du kan sätta dubbla citattecken runt vilket fältvärde som helst och måste göra det om det innehåller kommatecken eller parenteser.
[...]RAD uttryckssyntax kan också användas för att konstruera sammansatta värden. I de flesta fall är detta betydligt enklare att använda än sträng-bokstavssyntaxen eftersom du inte behöver oroa dig för flera lager av citat. Vi har redan använt den här metoden ovan: ROW('fuzzy dice', 42, 1.99) ROW('', 42, NULL)
ROW
sökord är faktiskt valfritt så länge du har mer än ett fält i uttrycket, så dessa kan förenklas till:('fuzzy dice', 42, 1.99) ('', 42, NULL)
Radkonstruktörerna avsnitt kan också vara av intresse.
När du säger detta:
INSERT INTO circuit (id_circuit, description, date_start, date_end, speed,
length, duration)
SELECT (...)
FROM segment seg, wgs cir where seg.id = 13077
din SELECT
sats har bara en kolumn som hela (...)
uttryck representerar ett enda värde. Lösningen är att helt enkelt släppa dessa parenteser:
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