sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL, SQL-tillstånd:42601

Detta konstruerar ett anonymt sammansatt värde:

select (1, 'a');

Till exempel:

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

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

Observera att det är ett enda sammansatt värde, inte flera värden.

Från den fina manualen:

8.16.2. Sammansatt värdeinmatning

Om du vill skriva ett sammansatt värde som en bokstavlig konstant, omsluter du fältvärdena inom parentes och separerar dem med kommatecken. Du kan sätta dubbla citattecken runt vilket fältvärde som helst och måste göra det om det innehåller kommatecken eller parenteser.
[...]
RAD uttryckssyntax kan också användas för att konstruera sammansatta värden. I de flesta fall är detta betydligt enklare att använda än sträng-bokstavssyntaxen eftersom du inte behöver oroa dig för flera lager av citat. Vi har redan använt den här metoden ovan:

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

ROW sökord är faktiskt valfritt så länge du har mer än ett fält i uttrycket, så dessa kan förenklas till:

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

Radkonstruktörerna avsnitt kan också vara av intresse.

När du säger detta:

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

din SELECT sats har bara en kolumn som hela (...) uttryck representerar ett enda värde. Lösningen är att helt enkelt släppa dessa parenteser:

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. Hur man begränsar åtkomst till databasen i PostgreSQL

  2. DatabaseError:aktuell transaktion avbröts, kommandon ignoreras till slutet av transaktionsblocket?

  3. Hur man får månaden från ett datum i T-SQL

  4. Hur man väljer varje rad där kolumnvärdet INTE är distinkt