Подготовленный оператор - с НАБОРОМ параметров конфигурации времени выполнения - не работает

Использование PG14, пул Hikari, Kotlin 1.6

Я получаю следующую ошибку при вызове, например, запроса SET:

org.postgresql.util.PSQLException: ОШИБКА: синтаксическая ошибка на уровне или около "$1"

val input = "yes"
connection.prepareStatement("SET log_connections TO ?")
  .apply {
    setString(1, input)
  }.use {
    it.execute()
  }
Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near "$1"
  Position: 22
    at app//org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2675)
    at app//org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2365)
    at app//org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:355)
    at app//org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:490)
    at app//org.postgresql.jdbc.PgStatement.execute(PgStatement.java:408)
    at app//org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:167)
    at app//org.postgresql.jdbc.PgPreparedStatement.execute(PgPreparedStatement.java:156)
    at app//com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44)
    at app//com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java)

Я пытаюсь установить параметры конфигурации PostgreSQL во время выполнения из кода, создав подготовленный оператор и безопасно установив его параметры, но я получаю сообщение об ошибке при выполнении такого оператора. Существуют ли какие-либо ограничения для создания подготовленных операторов, которые могут ограничивать создание такого оператора SET?

Пожалуйста, не публикуйте скриншоты трассировки стека исключений, публикуйте их в виде текста в формате кода.

Mark Rotteveel 24.11.2022 16:16
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете передать динамический параметр с помощью команды SET. Вам нужно использовать функцию set_config():

val input = "yes"
connection.prepareStatement("select set_config('log_connections', ?, false)")
  .apply {
    setString(1, input)
  }.use {
    it.execute()
  }

Другие вопросы по теме