PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

postgresql malformed array literal dalam membuat initcond agregat

Anda memerlukan tanda kutip di sekitar array Anda, dan itu karena array berada dalam versi teks dari sebuah baris.

Mudah diuji dengan mengambil input Anda sebagai baris dan melihat bagaimana postgres memformatnya (tanda kutip tunggal diperlukan di sekitar array di sini karena {} adalah array dalam teks):

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

Pengembalian:

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

Oleh karena itu Anda perlu melakukan:

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

Mengapa tanda kutip tidak diperlukan pada array yang kosong atau hanya memiliki satu nilai:

Beberapa nilai dalam larik dibatasi koma, dan bidang dalam satu baris juga dibatasi koma. Jika Anda memberikan baris sebagai '(0,{1,2})' , PG akan menafsirkan ini sebagai tiga bidang:0 , {1 , 2} . Secara alami dalam hal ini Anda akan mendapatkan kesalahan tentang array yang salah bentuk. Menempatkan bidang dalam tanda kutip berarti semua yang ada di dalam tanda kutip itu adalah satu bidang. Oleh karena itu '(0,"{1,2}")' akan ditafsirkan dengan benar sebagai 0 , {1,2} . Jika array kosong atau hanya berisi satu nilai, tidak akan ada koma, jadi tidak ada masalah saat menguraikan kolom tersebut dengan benar.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana UPDATE dan PILIH secara bersamaan

  2. daftar postgresql dan pesan tabel berdasarkan ukuran

  3. Bandingkan beberapa rentang tanggal

  4. Bagaimana justify_days() Bekerja di PostgreSQL

  5. Setara dengan PostgreSQL untuk TOP n WITH TIES:LIMIT with ties?