sql >> Databasteknik >  >> RDS >> PostgreSQL

postgresql missbildad array literal i skapa aggregerad initcond

Du behöver citattecken runt dina arrayer, och det beror på att arrayen är i en textversion av en rad.

Lätt att testa genom att ta din input som en rad och se hur postgres formaterar den (enkla citattecken behövs runt arrayer här eftersom {} är en array i text):

SELECT ROW(0,NULL,NULL, 0, 0, 0, 0, '{}', '{1,2,3,4,5}', '{1,2,3,4,5}', '{0,0.25,0.5,0.75,1}')

Returnerar:

(0,,,0,0,0,0,{},"{1,2,3,4,5}","{1,2,3,4,5}","{0,0.25,0.5,0.75,1}")

Därför måste du göra:

...
initcond = '(0,,,0,0,0,0,{},"{1,2,3,4,5}","{1,2,3,4,5}","{0,0.25,0.5,0.75,1}")'

Varför citat inte krävs på en array som är tom eller bara har ett värde:

Flera värden i en matris är kommaavgränsade och fält inom en rad är också kommaavgränsade. Om du anger en rad som '(0,{1,2})' , PG kommer att tolka detta som tre fält:0 , {1 , 2} . Naturligtvis i så fall får du ett felmeddelande om en felaktig array. Att sätta ett fält inom citattecken betyder att allt inom dessa citattecken är ett fält. Därför '(0,"{1,2}")' kommer att tolkas korrekt som 0 , {1,2} . Om arrayen är tom eller bara innehåller ett värde, kommer det inte att finnas något kommatecken, så det är inga problem att analysera det fältet korrekt.




  1. Bästa strukturen för en relationsdatabas med artiklar och taggar

  2. mysql_fetch_array, mysql_fetch_assoc, mysql_fetch_object

  3. Ska en databasanslutning vara öppen hela tiden eller bara öppnas när det behövs?

  4. Så här ändrar du språket för din Oracle-session