неверно сформированный массив литерал: значение массива должно начинаться с "{" или информации об измерении - PullRequest
0 голосов
/ 28 марта 2019

Я использую функцию 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 голосов
/ 28 марта 2019

В вашем литерале массива отсутствуют одинарные кавычки. Лучше всего использовать format, чтобы избежать проблем с SQL-инъекцией:

PERFORM dblink('dblink_trans',
               format('update items set id2 = id where id = any(%L)',
                      selectedIds)
              );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...