Использование параметров PostgreSQL с логическими значениями в EXECUTE / USING - PullRequest
0 голосов
/ 04 февраля 2019

Я хочу использовать параметры для моих динамических запросов.У меня есть такие заявления:

RETURN QUERY EXECUTE 'SELECT * FROM boards AS b WHERE b.slug = $1 AND $2'
USING filter_slug, parent_id_query;

Я получаю ERROR: argument of AND must be type boolean, not type text

, если я делаю это так:

RETURN QUERY EXECUTE 'SELECT * FROM boards AS b WHERE b.slug = ''' || filter_slug || ''' AND ' || parent_id_query;

это работает, хотя.

Я чувствую, что что-то упускаю / не понимаю что-то.Пожалуйста, помогите.

1 Ответ

0 голосов
/ 04 февраля 2019

Что вам не хватает, так это то, как используются параметры.Параметры не являются макросами, которые заменяют произвольный текст внутри оператора SQL.Вместо этого они являются буквальными значениями, присвоенными «переменным» внутри кода.Этими значениями обычно являются числа, строки или даты.

В частности, параметры нельзя использовать для:

  • идентификаторов (имен столбцов и имен таблиц)
  • functionимена
  • операторы
  • ключевые слова SQL
  • общие выражения

Так что, к сожалению, вы должны построить эту часть запроса без универсального параметра(хотя вы можете иметь $2 = $3)

...