Dette konstruerer en anonym sammensat værdi:
select (1, 'a');
For eksempel:
=> select (1, 'a');
row
-------
(1,a)
(1 row)
=> select row(1, 'a');
row
-------
(1,a)
(1 row)
Bemærk, at det er en enkelt sammensat værdi, ikke flere værdier.
Fra den fine manual:
8.16.2. Sammensat værdiinput
For at skrive en sammensat værdi som en bogstavelig konstant skal du omslutte feltværdierne inden for parentes og adskille dem med kommaer. Du kan sætte dobbelte anførselstegn omkring en hvilken som helst feltværdi og skal gøre det, hvis den indeholder kommaer eller parenteser.
[...]ROW
udtrykssyntaks kan også bruges til at konstruere sammensatte værdier. I de fleste tilfælde er dette betydeligt enklere at bruge end streng-bogstav-syntaksen, da du ikke behøver at bekymre dig om flere lag af citering. Vi har allerede brugt denne metode ovenfor:
ROW('fuzzy dice', 42, 1.99)
ROW('', 42, NULL)
ROW
søgeord er faktisk valgfrit, så længe du har mere end ét felt i udtrykket, så disse kan forenkles til:
('fuzzy dice', 42, 1.99)
('', 42, NULL)
Rækkekonstruktørerne afsnit kan også være af interesse.
Når du siger dette:
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
klausul har kun én kolonne som hele (...)
udtryk repræsenterer en enkelt værdi. Løsningen er simpelthen at droppe disse 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