ASP Net core некорректный ответ функции из Postgresql

Стоит задача получить все сообщения из бесед ВК и запихнуть их в базу данных. Но, предположим, в таблице уже есть некоторые сообщения из беседы. В моем случае их 53 введите сюда описание изображения

Каждое сообщение имеет Primary Key - ID сообщения.
И, очевидно, если попытаться добавить сообщение с уже имеющимся ID в таблице, то ничего хорошего не будет.

Я написал функцию, в которую на вход идет массив ID (массив ID полученных с сервера ВК всех сообщений из конкретной беседы).
И по идее функция должна искать уже существующие в таблице ID сообщений:

Код функции

CREATE OR REPLACE FUNCTION exists_messages(bigint[]) RETURNS SETOF bigint AS
$$
DECLARE
      ids ALIAS FOR $1;
      rec     RECORD;
BEGIN
      FOR rec IN SELECT "Id" FROM "Messages" WHERE "Id" = ANY(ids)
      LOOP
              RETURN NEXT rec;
      END LOOP;
      -- final return
      RETURN;
END
$$ language plpgsql;

И все бы хорошо, да вот только на бэкэнд приходит ровно на один ID меньше, чем есть в таблице:
введите сюда описание изображения

И я уже не знаю что делать. Тесты вручную проводил, но с куда меньшим количеством ID, поскольку не запихнешь же в терминал 27 тыс. значений.

Код вызова функции

public List<long?> ExistsMessages(List<long?> ids)
        {
            var connection = Database.GetDbConnection();
            using (var command = connection.CreateCommand() )
            {
                if (connection.State == ConnectionState.Closed)
                    connection.Open();
                
                command.CommandType = CommandType.StoredProcedure;
                command.CommandText = "exists_messages";
                    
            var idsParam = command.CreateParameter();
            idsParam.Direction = ParameterDirection.Input;
            idsParam.Value = ids;
            
            command.Parameters.Add(idsParam);

            var reader = command.ExecuteReader();

            List<long?> result = new List<long?>();
            
            while (reader.Read())
            {
                var _ids = reader.Cast<IDataRecord>().Select(x => x.GetInt64(0));
                result.AddRange(_ids.Cast<long?>());
            }
            
            if (connection.State == ConnectionState.Open)
                connection.Close();
            
            return result;
        }

Ответы (0 шт):