PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL, estado SQL:42601


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.
[...]
A ROW 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)

A ROW 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