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.