To tworzy anonimową wartość złożoną:
select (1, 'a');
Na przykład:
=> select (1, 'a');
row
-------
(1,a)
(1 row)
=> select row(1, 'a');
row
-------
(1,a)
(1 row)
Pamiętaj, że jest to pojedyncza wartość złożona, a nie wiele wartości.
Z dobrego podręcznika:
8.16.2. Wprowadzanie wartości złożonej
Aby zapisać wartość złożoną jako stałą literału, należy umieścić wartości pól w nawiasach i oddzielić je przecinkami. Możesz umieścić podwójne cudzysłowy wokół dowolnej wartości pola i musisz to zrobić, jeśli zawiera przecinki lub nawiasy.
[...]ROW
składnia wyrażenia może być również używana do konstruowania wartości złożonych. W większości przypadków jest to znacznie prostsze w użyciu niż składnia string-literal, ponieważ nie musisz się martwić o wiele warstw cytowania. Używaliśmy już tej metody powyżej:
ROW('fuzzy dice', 42, 1.99)
ROW('', 42, NULL)
ROW
słowo kluczowe jest w rzeczywistości opcjonalne, o ile w wyrażeniu jest więcej niż jedno pole, więc można to uprościć do:
('fuzzy dice', 42, 1.99)
('', 42, NULL)
Konstruktory wierszy sekcja może być również interesująca.
Kiedy to powiesz:
INSERT INTO circuit (id_circuit, description, date_start, date_end, speed,
length, duration)
SELECT (...)
FROM segment seg, wgs cir where seg.id = 13077
Twój SELECT
klauzula ma tylko jedną kolumnę jako całość (...)
wyrażenie reprezentuje pojedynczą wartość. Rozwiązaniem jest po prostu usunięcie tych nawiasów:
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