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.