PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgresql zniekształcony literał tablicowy podczas tworzenia agregacji initcond

Potrzebujesz cudzysłowów wokół swoich tablic, a to dlatego, że tablica znajduje się w tekstowej wersji wiersza.

Łatwe do przetestowania, biorąc dane wejściowe jako wiersz i zobacz, jak postgres je formatuje (potrzebne są tutaj pojedyncze cudzysłowy wokół tablic, ponieważ {} jest tablicą w tekście):

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

Zwroty:

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

Dlatego musisz zrobić:

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

Dlaczego cudzysłowy nie są wymagane w tablicy, która jest pusta lub ma tylko jedną wartość:

Wiele wartości w tablicy jest rozdzielanych przecinkami, a pola w wierszu są również rozdzielane przecinkami. Jeśli podasz wiersz jako '(0,{1,2})' , PG zinterpretuje to jako trzy pola:0 , {1 , 2} . Naturalnie w takim przypadku otrzymasz błąd dotyczący nieprawidłowej tablicy. Umieszczenie pola w cudzysłowie oznacza, że ​​wszystko w cudzysłowie jest jednym polem. Dlatego '(0,"{1,2}")' zostanie poprawnie zinterpretowany jako 0 , {1,2} . Jeśli tablica jest pusta lub zawiera tylko jedną wartość, nie będzie przecinka, więc nie ma problemu z poprawną analizą tego pola.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Automatyczne przełączanie awaryjne bazy danych Moodle PostgreSQL

  2. ROK daje błąd

  3. Generuj serie miesięcy dla każdego wiersza w Oracle

  4. Gdy autovacuum nie odkurza

  5. Uzyskaj różne następujące po sobie zakresy dat z nakładających się zakresów dat