sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL, estado de SQL:42601

Esto construye un valor compuesto anónimo:

select (1, 'a');

Por ejemplo:

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

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

Tenga en cuenta que se trata de un único valor compuesto, no de varios valores.

Del buen manual:

8.16.2. Entrada de valor compuesto

Para escribir un valor compuesto como una constante literal, encierre los valores de campo entre paréntesis y sepárelos con comas. Puede poner comillas dobles alrededor de cualquier valor de campo, y debe hacerlo si contiene comas o paréntesis.
[...]
El ROW La sintaxis de expresión también se puede utilizar para construir valores compuestos. En la mayoría de los casos, esto es considerablemente más simple de usar que la sintaxis de literal de cadena, ya que no tiene que preocuparse por las múltiples capas de comillas. Ya usamos este método arriba:

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

La ROW La palabra clave en realidad es opcional siempre que tenga más de un campo en la expresión, por lo que estos pueden simplificarse a:

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

Los constructores de fila La sección también podría ser de su interés.

Cuando dices esto:

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

tu SELECT la cláusula solo tiene una columna como el (...) completo expresión representa un solo valor. La solución es simplemente eliminar esos paréntesis:

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