Использование 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?
Вы не можете передать динамический параметр с помощью команды SET. Вам нужно использовать функцию set_config():
val input = "yes"
connection.prepareStatement("select set_config('log_connections', ?, false)")
.apply {
setString(1, input)
}.use {
it.execute()
}
Пожалуйста, не публикуйте скриншоты трассировки стека исключений, публикуйте их в виде текста в формате кода.