不支持postgresql事务隔离级别4

不支持postgresql事务隔离级别4,postgresql,transactions,kotlin,ktor,kotlin-exposed,Postgresql,Transactions,Kotlin,Ktor,Kotlin Exposed,我试图创建postgres+exposed+ktor+JDBC表,我得到了那个错误 查找以下我的配置: 格雷德尔先生 compile group: 'org.postgresql', name: 'postgresql', version: '9.4-1200-jdbc41' 你好,kt 这是我得到的错误 阅读JDBC驱动程序9.0版的源代码,我发现: /* *您可以调用此方法来尝试更改事务 *使用一个事务值的隔离级别。 * *注意:在运行时无法调用setTransactionIsolatio

我试图创建postgres+exposed+ktor+JDBC表,我得到了那个错误

查找以下我的配置:

格雷德尔先生

compile group: 'org.postgresql', name: 'postgresql', version: '9.4-1200-jdbc41'
你好,kt

这是我得到的错误


阅读JDBC驱动程序9.0版的源代码,我发现:

/* *您可以调用此方法来尝试更改事务 *使用一个事务值的隔离级别。 * *注意:在运行时无法调用setTransactionIsolation *在交易的中间 * *@param一级事务*隔离值与 *交易的例外情况为无;有些数据库可能会 *不支持其他值 *@exception SQLException如果发生数据库访问错误 *@请参阅java.sql.DatabaseMetaDatasupportsTransactionIsolationLevel */ public void setTransactionIsolation级别引发SQLException { 检查关闭; 如果protoConnection.getTransactionState!=ProtocolConnection.TRANSACTION\u空闲 在事务的中间抛出新的PSQLExviguth.Tr.Tunchange事务隔离级别。 PSQLState.ACTIVE_SQL_事务; 字符串isolationLevelName=getIsolationLevelNamelevel; 如果isolationLevelName==null 抛出新的psqlExceptionGet.trTransaction隔离级别{0}不受支持,新的整数级别,PSQLState.not_实现; String isolationLevelSQL=将会话特征设置为事务隔离级别+isolationLevelName; execSQLUpdateisolationLevelSQL;//注意:未触发开始 } getIsolationLevelName的定义如下:

受保护字符串getIsolationLevelNameint级别 { 布尔pg80=haveMinimumServerVersion8.0; 如果级别==Connection.TRANSACTION\u READ\u COMMITTED { 返回读取已提交; } 如果级别==Connection.TRANSACTION\u SERIALIZABLE,则为else { 返回可序列化; } 如果pg80&&level==Connection.TRANSACTION\u READ\u未提交,则为else { 返回读取未提交; } 如果pg80&&level==Connection.TRANSACTION\u REPEATABLE\u READ { 返回可重复读取; } 返回null; } 因为,您的错误消息只能表示pg80为false

因此,唯一的解释是,您实际上使用的是早于8.0的PostgreSQL server版本,或者更可能的是,您使用的是PostgreSQL v10,而JDBC驱动程序太旧,无法理解新的两个数字版本编号系统


在第一种情况下,您应该升级PostgreSQL,但无论如何,您都应该使用当前版本的JDBC驱动程序。这将解决您的问题。

请尝试更新build.gradle

compile group: 'org.postgresql', name: 'postgresql', version: '9.4-1200-jdbc41'

试着使用官方的postgres驱动程序对我来说很好最新版本是42.2.2,不是9.0-801,在更新到org后修复了我的问题。postgresql:postgresql:42.2.29.4-1200-jdbc41也很过时,你不应该使用它
Caused by: org.postgresql.util.PSQLException: Transaction isolation level 4 not supported.
at org.postgresql.jdbc2.AbstractJdbc2Connection.setTransactionIsolation(AbstractJdbc2Connection.java:826)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManager$ThreadLocalTransaction$connectionLazy$1.invoke(ThreadLocalTransactionManager.kt:25)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManager$ThreadLocalTransaction$connectionLazy$1.invoke(ThreadLocalTransactionManager.kt:20)
at kotlin.UnsafeLazyImpl.getValue(Lazy.kt:154)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManager$ThreadLocalTransaction.getConnection(ThreadLocalTransactionManager.kt:29)
at org.jetbrains.exposed.sql.Transaction.getConnection(Transaction.kt)
at org.jetbrains.exposed.sql.Database.getMetadata$exposed(Database.kt:17)
at org.jetbrains.exposed.sql.Database$url$2.invoke(Database.kt:26)
at org.jetbrains.exposed.sql.Database$url$2.invoke(Database.kt:15)
at kotlin.SynchronizedLazyImpl.getValue(Lazy.kt:131)
at org.jetbrains.exposed.sql.Database.getUrl(Database.kt)
at org.jetbrains.exposed.sql.Database$dialect$2.invoke(Database.kt:29)
at org.jetbrains.exposed.sql.Database$dialect$2.invoke(Database.kt:15)
at kotlin.SynchronizedLazyImpl.getValue(Lazy.kt:131)
at org.jetbrains.exposed.sql.Database.getDialect$exposed(Database.kt)
at org.jetbrains.exposed.sql.vendors.DefaultKt.getCurrentDialect(Default.kt:319)
at org.jetbrains.exposed.sql.vendors.DefaultKt.getCurrentDialectIfAvailable(Default.kt:323)
at org.jetbrains.exposed.sql.Column.getOnDelete$exposed(Column.kt:14)
compile group: 'org.postgresql', name: 'postgresql', version: '9.4-1200-jdbc41'