Метод PostgREST POST преобразует массив int в текст

#postgresql #postgrest

#postgresql #постгрест

Вопрос:

У меня есть функция PostgreSQL logschema.movement , которая возвращает подмножество таблицы logschema.movement , функция выглядит так:

 CREATE OR REPLACE FUNCTION logschema.movement(  "ids" bigint[], "date" TEXT)  RETURNS SETOF logschema.movement  LANGUAGE 'plpgsql'   COST 100  VOLATILE    AS $  BEGIN RETURN QUERY (SELECT * FROM logschema.movement WHERE "ids" = ANY ("ids") AND "day" gt;= $2::TIMESTAMP); END; $;  

Эта функция работает в PostgreSQL, например SELECT logschema.movement(ARRAY[1,2,3], '2021-09-09') , не возвращает ошибку. Если я попытаюсь запросить функцию с помощью PostgREST и axios, как это:

 let payload = {ids: [1,2,3], date: "2021-09-08"} return await RequestService.postData(new URL(this.api   `/rpc/movement`, this.urlBase), payload);  

Я получаю длинное сообщение об ошибке, которое содержит:

 ... data:  { hint:  'No function matches the given name and argument types. You might need to add explicit type casts.',  details: null,  code: '42883',  message:  'function logschema.movement(lastBatteryChangeDate =gt; text, pseudoIds =gt; text) does not exist' } } ...  

Мне кажется, что мой массив был преобразован в строку, но я не уверен.

Моя версия PostgreSQL PostgreSQL 12.8 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit и моя версия PostgREST v7.0.1

Комментарии:

1. Может быть, я ошибаюсь, но я понимаю, что вы передаете свои входные параметры через URL, так что да, они могут быть преобразованы в текст. Вы можете обновить свою функцию logschema.movement, объявив идентификаторы в виде текста, а затем преобразовать его в функции как bigint[] : ANY ("ids" :: bigint[])

2. Это сработало, большое спасибо, совершенно забыл, что вы можете просто конвертировать приведение в массивы, а не только в примитивы