PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL, stato SQL:42601

Questo costruisce un valore composito anonimo:

select (1, 'a');

Ad esempio:

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

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

Nota che si tratta di un singolo valore composto, non di più valori.

Dal bel manuale:

8.16.2. Input di valore composito

Per scrivere un valore composto come costante letterale, racchiudere i valori del campo tra parentesi e separarli con virgole. Puoi inserire virgolette intorno a qualsiasi valore di campo e devi farlo se contiene virgole o parentesi.
[...]
La ROW la sintassi dell'espressione può essere utilizzata anche per costruire valori compositi. Nella maggior parte dei casi questo è notevolmente più semplice da usare rispetto alla sintassi stringa-letterale poiché non devi preoccuparti di più livelli di virgolette. Abbiamo già utilizzato questo metodo sopra:

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

La ROW la parola chiave è in realtà facoltativa purché tu abbia più di un campo nell'espressione, quindi questi possono semplificare in:

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

I Costruttori di righe potrebbe interessare anche la sezione.

Quando dici questo:

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

il tuo SELECT la clausola ha solo una colonna come l'intero (...) espressione rappresenta un singolo valore. La soluzione è semplicemente eliminare quelle parentesi:

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