我正在使用一个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更新时出现标题错误。
错误表明我应该以{作为数组的开头,从加薪通知书中可以看到的正是我所拥有的?
答案 0 :(得分:0)
您的数组文字缺少单引号。最好使用format
来避免SQL注入问题:
PERFORM dblink('dblink_trans',
format('update items set id2 = id where id = any(%L)',
selectedIds)
);