PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

literal de matriz malformada postgresql em criar initcond agregado


Você precisa de aspas em torno de suas matrizes, e isso ocorre porque a matriz está em uma versão de texto de uma linha.

Fácil de testar, tomando sua entrada como uma linha e veja como o postgres a formata (aspas simples são necessárias em torno de matrizes aqui porque {} é uma matriz em texto):
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}')

Devoluções:
(0,,,0,0,0,0,{},"{1,2,3,4,5}","{1,2,3,4,5}","{0,0.25,0.5,0.75,1}")

Portanto, você precisa fazer:
...
initcond = '(0,,,0,0,0,0,{},"{1,2,3,4,5}","{1,2,3,4,5}","{0,0.25,0.5,0.75,1}")'

Por que as aspas não são necessárias em uma matriz vazia ou com apenas um valor:

Vários valores em uma matriz são delimitados por vírgulas e os campos em uma linha também são delimitados por vírgulas. Se você fornecer uma linha como '(0,{1,2})' , o PG interpretará isso como três campos:0 , {1 , 2} . Naturalmente, nesse caso, você receberá um erro sobre uma matriz malformada. Colocar um campo entre aspas significa que tudo dentro dessas aspas é um campo. Portanto, '(0,"{1,2}")' será interpretado corretamente como 0 , {1,2} . Se a matriz estiver vazia ou contiver apenas um valor, não haverá vírgula, portanto, não há problema em analisar esse campo corretamente.