Isso constrói um valor composto anônimo:
select (1, 'a');
Por exemplo:
=> select (1, 'a');
row
-------
(1,a)
(1 row)
=> select row(1, 'a');
row
-------
(1,a)
(1 row)
Observe que esse é um único valor composto, não vários valores.
Do manual fino:
8.16.2. Entrada de valor composto
Para escrever um valor composto como uma constante literal, coloque os valores do campo entre parênteses e separe-os por vírgulas. Você pode colocar aspas duplas em qualquer valor de campo e deve fazê-lo se contiver vírgulas ou parênteses.
[...]
AROW
sintaxe de expressão também pode ser usada para construir valores compostos. Na maioria dos casos, isso é consideravelmente mais simples de usar do que a sintaxe literal de string, pois você não precisa se preocupar com várias camadas de citações. Já usamos este método acima:
ROW('fuzzy dice', 42, 1.99) ROW('', 42, NULL)
AROW
palavra-chave é realmente opcional, desde que você tenha mais de um campo na expressão, portanto, eles podem simplificar para:
('fuzzy dice', 42, 1.99) ('', 42, NULL)
Os construtores de linha seção também pode ser de interesse.
Quando você diz isso:
INSERT INTO circuit (id_circuit, description, date_start, date_end, speed,
length, duration)
SELECT (...)
FROM segment seg, wgs cir where seg.id = 13077
seu
SELECT
cláusula tem apenas uma coluna como todo (...)
expressão representa um único valor. A solução é simplesmente eliminar esses parênteses: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