配列を引用符で囲む必要があります。これは、配列がテキストバージョンの行にあるためです。
入力を行として取得し、postgresがどのようにフォーマットするかを確認することで簡単にテストできます({}
のため、ここでは配列を一重引用符で囲む必要があります) テキスト内の配列です):
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}')
返品:
(0,,,0,0,0,0,{},"{1,2,3,4,5}","{1,2,3,4,5}","{0,0.25,0.5,0.75,1}")
したがって、次のことを行う必要があります。
...
initcond = '(0,,,0,0,0,0,{},"{1,2,3,4,5}","{1,2,3,4,5}","{0,0.25,0.5,0.75,1}")'
空の配列または値が1つしかない配列で引用符が不要な理由:
配列内の複数の値はコンマで区切られ、行内のフィールドもコンマで区切られます。行を'(0,{1,2})'
として指定した場合 、PGはこれを次の3つのフィールドとして解釈します:0
、{1
、2}
。当然、その場合、不正な形式の配列に関するエラーが発生します。フィールドを引用符で囲むということは、それらの引用符内のすべてが1つのフィールドであることを意味します。したがって、'(0,"{1,2}")'
0
として正しく解釈されます 、{1,2}
。配列が空であるか、値が1つしかない場合は、カンマがないため、そのフィールドを正しく解析するのに問題はありません。