使用PostgreSQL时isReadOnly JDBC参数的行为是什么?

问题描述 投票:4回答:1

Java JDBC Connection类允许设置一个名为readOnly的参数,但是它的用途是什么?

根据JDBC documentation

readOnly用于将连接置于只读模式

根据HikariCP documentation

此属性控制从池获得的连接是否为默认情况下处于只读模式。请注意,某些数据库不支持只读模式的概念,而其他模式则提供查询优化当“连接”设置为只读时。是否需要这个属性与否很大程度上取决于您的应用程序和数据库。默认值:false

但是,只读模式下的连接是什么?什么概念?仅允许SELECT语句的连接?

只读连接对PostgreSQL JDBC驱动程序有好处吗?

java postgresql jdbc
1个回答
3
投票

您可以在github上浏览PostgreSQL JDBC驱动程序。 Connection.setReadOnly的实现指示在调用该方法时,会将以下SQL语句之一发送到数据库:

SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY

SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE

现在,如果我们要阅读PostgreSQL reference,它将指定:

事务访问模式确定事务是读/写还是只读。读/写是默认设置。当事务为只读时,不允许使用以下SQL命令:INSERT,UPDATE,DELETE和COPY FROM(如果要写入的表不是临时表);所有的CREATE,ALTER和DROP命令;注释,授予,撤销,截断;和EXPLAIN ANALYZE和EXECUTE(如果它们将执行的命令在列出的命令中)。这是只读的高级概念,不会阻止所有对磁盘的写入。

所以基本上,主要的好处是您将无法意外修改数据。它类似于使用Collections.unmodifiableList,通常会导致代码更健壮,因此,如果您确定给定的事务应该是只读的,请使用该属性。

© www.soinside.com 2019 - 2024. All rights reserved.