格式不正确的数组文字:数组值必须以“ {”开头或尺寸信息

时间:2019-03-28 10:20:19

标签: postgresql dblink

我正在使用一个postgres函数,该函数循环另一个使用dblink将更新提交到我的数据库的函数。

这是“内部”功能的一部分:

    selectedIds := array(select id from items where id2 is null and id > latestItemId order by id asc  limit _limit);
highestItemId := (select max(x) from unnest(selectedIds) x);
updatedItemCount := array_length(selectedIds, 1);
raise notice 'updatedItemCount %', updatedItemCount;
raise notice 'SelectedItemiDs %', selectedIds;

PERFORM dblink_connect('dblink_trans','dbname=notified-local port=5432 user=postgres');
PERFORM dblink('dblink_trans','update items set id2 = id where id = any(' || selectedIds || ')');
PERFORM dblink('dblink_trans','COMMIT;');
PERFORM dblink_disconnect('dblink_trans'); 

我对selectedIds的加薪通知如下:{23,60,65,66,588,968,1049,1198,1236,1356,1358,1359,1360,1364,1365,1366}

,然后在尝试进行dblink更新时出现标题错误。

错误表明我应该以{作为数组的开头,从加薪通知书中可以看到的正是我所拥有的?

1 个答案:

答案 0 :(得分:0)

您的数组文字缺少单引号。最好使用format来避免SQL注入问题:

PERFORM dblink('dblink_trans',
               format('update items set id2 = id where id = any(%L)',
                      selectedIds)
              );