Не удается получить параметры моего URL-адреса, соответствующие моему вызову API для postgres

#postgresql #api #rest #post #postgrest

#postgresql #API #rest #Публикация #postgrest

Вопрос:

Я использую postgrest в качестве оболочки API для своей postgres базы данных. API считывает мою схему базы данных и создает URL-адрес, используя общие символы в адресе.

У меня есть такая функция = create function api.dividend(p_stocks text[])

Общий вызов API:

 /url?key=val;key2=val2
 

Мой вызов API для функции create function api.dividend(p_stocks text[]) :

 /dividend?p_stocks=AAPL
 

В этом случае, чтобы проверить ситуацию, я использовал AAPL в качестве входного параметра.
Однако это ошибка, которую я получаю:

 function api.dividend(p_stock => text) does not exist
 

Как вы видите, ошибка возврата ожидает эту функцию, api.dividend(p_stock => text) однако я попытался создать функцию с использованием этих параметров, и я не думаю, что это возможно…

Я был бы очень признателен за некоторые советы или предложения о том, какие предложения я должен попробовать?

Это не проблема схемы, потому что я проверил, находится ли функция в соответствующей схеме.

Вот полная функция из postgres, если это поможет:

 create function dividend(p_stocks text[])
    returns table(symbol char, next_dividend_date date, ex_dividend_date date) 
as $
    select distinct on (symbol) symbol, next_dividend_date, ex_dividend_date
    from api.security_stats 
    where api.security_stats.symbol = any($1)
    order by symbol, date desc 
$ language sql;
 

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

1. Ну, вы объявили p_stocks как текстовый массив. Почти уверен, что ошибка возникает из-за простой передачи ему текстовой строки вместо текстового массива. Postgres допускает перегрузку функции, поэтому она ищет create function dividend(p_stocks text) и не находит ее, и, следовательно, возникает ошибка.

2. Теперь я понимаю ошибку, я уже пробовал передавать ее подобным образом ранее /dividend?p_stock=[AAPL] , но все равно не смог заставить ее работать. Это так, как вы предполагали, будет выглядеть запрос?

3. Нет, это закончилось бы так create function dividend('[AAPL]') , и это не то, как вы вводите массив. Это делается как » или '{AAPL} или ARRAY['AAPL'] » . В какой-то момент процесса вы должны принять переданные параметры и преобразовать их в одну из приведенных выше форм перед использованием в функции. Я не использую postgrest , но я нашел это с помощью array

4. О, вау, я был так сосредоточен на предыдущих сегментах документа, что полностью пропустил параметр массива! Имеет смысл, большое спасибо за вашу помощь!!

Ответ №1:

Мне удалось решить проблему с помощью @Adrian,

/dividend?p_stocks={AAPL}

Это был бы правильный путь URL для postgrest для использования функции / параметра. { = { , и } = }

Теперь URL-адрес имеет правильный формат массива для моей функции.