sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL, stav SQL:42601

Tím se vytvoří anonymní složená hodnota:

select (1, 'a');

Například:

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

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

Všimněte si, že se jedná o jednu složenou hodnotu, nikoli o více hodnot.

Z jemného manuálu:

8.16.2. Zadání složené hodnoty

Chcete-li zapsat složenou hodnotu jako doslovnou konstantu, uzavřete hodnoty polí do závorek a oddělte je čárkami. Kolem libovolné hodnoty pole můžete umístit dvojité uvozovky a musíte tak učinit, pokud obsahuje čárky nebo závorky.
[...]
The ROW syntaxi výrazu lze také použít ke konstrukci složených hodnot. Ve většině případů je to podstatně jednodušší na použití než syntaxe řetězcového literálu, protože se nemusíte starat o více vrstev citací. Tuto metodu jsme již použili výše:

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

ROW klíčové slovo je ve skutečnosti nepovinné, pokud máte ve výrazu více než jedno pole, takže to lze zjednodušit na:

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

Řádkové konstruktory sekce by také mohla být zajímavá.

Když řeknete toto:

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

váš SELECT klauzule má pouze jeden sloupec jako celek (...) výraz představuje jednu hodnotu. Řešením je jednoduše vypustit tyto závorky:

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



  1. Upgrade na PostgreSQL 11 s logickou replikací

  2. SQLite - Vytvořte tabulku

  3. Jak zálohovat a obnovit databázi PostgreSQL přes DBeaver

  4. WEEKDAY() vs DAYOFWEEK() v MariaDB:Jaký je rozdíl?