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

postgresql misdannet array literal i create aggregeret initcond

Du skal bruge anførselstegn omkring dine arrays, og det er fordi arrayet er i en tekstversion af en række.

Let at teste ved at tage dit input som en række og se, hvordan postgres formaterer det (enkelte anførselstegn er nødvendige omkring arrays her, fordi {} er et array i tekst):

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

Returnerer:

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

Derfor skal du gøre:

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

Hvorfor anførselstegn ikke er påkrævet på et array, der er tomt eller kun har én værdi:

Flere værdier i en matrix er kommasepareret, og felter inden for en række er også kommaseparerede. Hvis du angiver en række som '(0,{1,2})' , vil PG fortolke dette som tre felter:0 , {1 , 2} . I så fald vil du naturligvis få en fejlmeddelelse om et misformet array. At sætte et felt i anførselstegn betyder, at alt inden for disse anførselstegn er ét felt. Derfor '(0,"{1,2}")' vil blive fortolket korrekt som 0 , {1,2} . Hvis arrayet er tomt eller kun indeholder én værdi, vil der ikke være komma, så der er ikke noget problem med at parse det felt korrekt.




  1. 3 måder at vise sorteringen for din forbindelse i MariaDB

  2. PHP &MySQL Hvordan man viser kategorier i alle underkategorier fra databasen

  3. Håndtering af e-mail-bekræftelse under registrering i Flask

  4. Kan en Oracle-udløser deaktiveres for den aktuelle session?