Как в PostgreSQL выбрать значения значения которые есть в массиве, но нет в БД?
Всё просто: надо развернуть массив в набор строк и проверить на not existsselect i from unnest(array[1,2,3,4]) as i 
where not exists (select 1 from tablename where id = i);
Проще всего, и дешевле по ресурсам, это сделать не на стороне базы, а программно.
Например, на питоне это займет всего одну строку>>> set([1,2,3,4,5,6,7]) - set([1,2,3,4,5])
set([6, 7])
>>>
PS. вытащить все ID можно одним запросом select ID from mytable
PPS. Сравнение на миллионе ID  - заняло 166 милисекундыMacBook-Pro:~ leah$ python -m timeit 'set(range(1,1000022)) - set(range(1,1000000))'
10 loops, best of 3: 166 msec per loop
MacBook-Pro:~ leah$