PostgreSQL:大对象权限被拒绝

4
当我从开发环境迁移到演示环境时,在演示服务器上对PostgreSQL数据库进行Hibernate SQL调用时,遇到了以下错误。
在开发环境中没有错误。我认为这是演示数据库的权限问题。然而,我从未见过这个错误,也不知道该去哪里找。有人能给些建议吗?
引起的原因:java.io.IOException: org.postgresql.util.PSQLException: ERROR: permission denied for large object 109138 at org.postgresql.largeobject.BlobInputStream.read(BlobInputStream.java:123) at java.io.InputStream.read(InputStream.java:170) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) at java.io.InputStreamReader.read(InputStreamReader.java:184) at org.hibernate.type.descriptor.java.DataHelper.extractString(DataHelper.java:71)

1
https://www.postgresql.org/message-id/50CF651C.9040004@computer.org 可能是一个原因。 - StanislavL
1
一个类似的问题在这里得到了回答:https://dev59.com/7bjps4cB2Jgan1zn8hf5 - Ubercool
1
为了快速解决这个问题,您可以在 postgresql.conf 中添加 lo_compat_privilege = on - Edoardo
you should add as an answer - Jake
2个回答

9
自PostgreSQL 9.0以来,大对象拥有权限(表pg_largeobject_metadata的列lomacl)。默认情况下,除了所有者(列lomowner)之外,没有人对大对象拥有任何权限。
因此,似乎要么是版本迁移问题(例如,您没有使用新版本的pg_dump创建转储),要么是在您的分段环境中以不同的用户身份尝试访问大对象。

1
是的,对我来说也是这样。 - Jake

8
postgresql.conf 中将 lo_compat_privileges 改为 on。这对我有效。

这是一个快速修复(从9.?迁移到10) - Tony Chemit
一个好的回答,重要的是要注意,在迁移到新的Postgres服务器后,需要检查"postgresql.conf"中的配置是否相同,以避免这些错误配置。 - TheGabiRod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接