PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

postgresql letterale array non valido in create aggregate initcond

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.