Hai bisogno di virgolette intorno ai tuoi array, e questo perché l'array si trova in una versione testuale di una riga.
Facile da testare prendendo il tuo input come una riga e vedere come postgres lo formatta (sono necessarie virgolette singole attorno agli array qui perché {}
è un array nel testo):
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}')
Resi:
(0,,,0,0,0,0,{},"{1,2,3,4,5}","{1,2,3,4,5}","{0,0.25,0.5,0.75,1}")
Quindi devi fare:
...
initcond = '(0,,,0,0,0,0,{},"{1,2,3,4,5}","{1,2,3,4,5}","{0,0.25,0.5,0.75,1}")'
Perché le virgolette non sono richieste su un array che è vuoto o ha un solo valore:
Più valori in una matrice sono delimitati da virgole e anche i campi all'interno di una riga sono delimitati da virgole. Se fornisci una riga come '(0,{1,2})'
, PG interpreterà questo come tre campi:0
, {1
, 2}
. Naturalmente in tal caso riceverai un errore su un array non valido. Mettere un campo tra virgolette significa che tutto all'interno di quelle virgolette è un campo. Pertanto '(0,"{1,2}")'
verrà interpretato correttamente come 0
, {1,2}
. Se l'array è vuoto o contiene un solo valore, non ci saranno virgole, quindi non ci sono problemi ad analizzare correttamente quel campo.