sql >> Databáze >  >> RDS >> PostgreSQL

postgresql malformovaný literál pole v create agregaci initcond

Kolem polí potřebujete uvozovky, a to proto, že pole je v textové verzi řádku.

Snadno se otestuje tím, že vezmete svůj vstup jako řádek a uvidíte, jak jej postgres naformátuje (zde jsou nutné jednoduché uvozovky, protože {} je pole v textu):

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

Vrátí:

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

Proto musíte udělat:

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

Proč u pole, které je prázdné nebo má pouze jednu hodnotu, nejsou vyžadovány uvozovky:

Více hodnot v poli je odděleno čárkami a pole v řádku jsou také oddělena čárkou. Pokud zadáte řádek jako '(0,{1,2})' , PG to bude interpretovat jako tři pole:0 , {1 , 2} . Přirozeně v takovém případě dostanete chybu o chybném poli. Vložení pole do uvozovek znamená, že vše v těchto uvozovkách je jedno pole. Proto '(0,"{1,2}")' bude správně interpretováno jako 0 , {1,2} . Pokud je pole prázdné nebo obsahuje pouze jednu hodnotu, nebude tam žádná čárka, takže není problém toto pole správně analyzovat.




  1. Oracle:existuje nějaký logický důvod, proč nepoužívat paralelní spouštění s poddotazy v seznamu SELECT?

  2. Odstraňte poslední znak z řetězce v sql plus

  3. Získejte celkový počet odpracovaných hodin za den mysql

  4. Použití správy verzí (Git) na databázi MySQL