PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

postgresql fehlerhaftes Array-Literal in Aggregat initcond erstellen

Sie brauchen Anführungszeichen um Ihre Arrays, und das liegt daran, dass sich das Array in einer Textversion einer Zeile befindet.

Einfach zu testen, indem Sie Ihre Eingabe als Zeile nehmen und sehen, wie Postgres sie formatiert (hier sind einfache Anführungszeichen um Arrays erforderlich, da {} ist ein Array im Text):

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}')

Rückgabe:

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

Daher müssen Sie Folgendes tun:

...
initcond = '(0,,,0,0,0,0,{},"{1,2,3,4,5}","{1,2,3,4,5}","{0,0.25,0.5,0.75,1}")'

Warum Anführungszeichen für ein Array, das leer ist oder nur einen Wert hat, nicht erforderlich sind:

Mehrere Werte in einem Array sind durch Kommas getrennt, und Felder innerhalb einer Zeile sind ebenfalls durch Kommas getrennt. Wenn Sie eine Zeile als '(0,{1,2})' angeben , interpretiert PG dies als drei Felder:0 , {1 , 2} . In diesem Fall erhalten Sie natürlich eine Fehlermeldung über ein fehlerhaftes Array. Ein Feld in Anführungszeichen zu setzen bedeutet, dass alles innerhalb dieser Anführungszeichen ein Feld ist. Daher '(0,"{1,2}")' wird korrekt als 0 interpretiert , {1,2} . Wenn das Array leer ist oder nur einen Wert enthält, wird es kein Komma geben, sodass es kein Problem gibt, dieses Feld korrekt zu analysieren.