Potrzebujesz cudzysłowów wokół swoich tablic, a to dlatego, że tablica znajduje się w tekstowej wersji wiersza.
Łatwe do przetestowania, biorąc dane wejściowe jako wiersz i zobacz, jak postgres je formatuje (potrzebne są tutaj pojedyncze cudzysłowy wokół tablic, ponieważ {}
jest tablicą w tekście):
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}')
Zwroty:
(0,,,0,0,0,0,{},"{1,2,3,4,5}","{1,2,3,4,5}","{0,0.25,0.5,0.75,1}")
Dlatego musisz zrobić:
...
initcond = '(0,,,0,0,0,0,{},"{1,2,3,4,5}","{1,2,3,4,5}","{0,0.25,0.5,0.75,1}")'
Dlaczego cudzysłowy nie są wymagane w tablicy, która jest pusta lub ma tylko jedną wartość:
Wiele wartości w tablicy jest rozdzielanych przecinkami, a pola w wierszu są również rozdzielane przecinkami. Jeśli podasz wiersz jako '(0,{1,2})'
, PG zinterpretuje to jako trzy pola:0
, {1
, 2}
. Naturalnie w takim przypadku otrzymasz błąd dotyczący nieprawidłowej tablicy. Umieszczenie pola w cudzysłowie oznacza, że wszystko w cudzysłowie jest jednym polem. Dlatego '(0,"{1,2}")'
zostanie poprawnie zinterpretowany jako 0
, {1,2}
. Jeśli tablica jest pusta lub zawiera tylko jedną wartość, nie będzie przecinka, więc nie ma problemu z poprawną analizą tego pola.