sql >> Base de Datos >  >> RDS >> PostgreSQL

literal de matriz con formato incorrecto de postgresql en crear agregado initcond

Necesita comillas alrededor de sus arreglos, y eso es porque el arreglo está en una versión de texto de una fila.

Fácil de probar tomando su entrada como una fila y viendo cómo postgres la formatea (se necesitan comillas simples alrededor de las matrices aquí porque {} es una matriz en el 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}')

Devoluciones:

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

Por lo tanto, debe hacer:

...
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 qué no se requieren comillas en una matriz que está vacía o tiene un solo valor:

Los valores múltiples en una matriz están delimitados por comas y los campos dentro de una fila también están delimitados por comas. Si proporciona una fila como '(0,{1,2})' , PG interpretará esto como tres campos:0 , {1 , 2} . Naturalmente, en ese caso obtendrá un error sobre una matriz mal formada. Poner un campo entre comillas significa que todo dentro de esas comillas es un campo. Por lo tanto '(0,"{1,2}")' se interpretará correctamente como 0 , {1,2} . Si la matriz está vacía o contiene solo un valor, no habrá coma, por lo que no hay problema para analizar ese campo correctamente.