【问题标题】:Heroku PostgreSQL BLOB insertion failsHeroku PostgreSQL BLOB 插入失败
【发布时间】:2016-11-18 22:20:46
【问题描述】:

我将在 Heroku 上部署我的应用程序,为此我在那里创建了一个数据库。由于 Hibernate 的选项 hibernate.hbm2ddl.auto=create 不起作用,我手动编写了一个 SQL 查询。在我尝试将 BLOB 插入数据库之前,一切都很顺利。

我有一张桌子photo

CREATE TABLE photo (
  id      SERIAL PRIMARY KEY,
  content BYTEA
);

我正在做这样的插入查询:

INSERT INTO photo (content) VALUES (pg_read_file('./files/images/01_Tomato-Soup.jpg')::BYTEA);

在这一步之后我得到一个错误:

[2016-07-15 18:57:01] [42501] ERROR: must be superuser to read files

插入其他实体也会失败,因为它们具有photo 表的外键。

这个错误是关于什么的,是否可以在 Heroku 数据库中插入 BLOB,而不是超级用户?

【问题讨论】:

    标签: sql postgresql heroku heroku-postgres


    【解决方案1】:

    服务器端文件访问仅限超级用户,因为它以服务器的文件权限运行。如果您可以读取文件,则可以,例如读取数据库文件并将其存储。你可以通过写入来破坏数据。

    因此,服务器上的文件访问功能相对仅限于诸如管理操作之类的事情。对于您的应用程序,您想做一些不同的事情。对于 bytea,请使用您想要进行转义的任何客户端库。这将取决于语言(在 Perl、PHP、Java 等中有所不同)。

    需要注意的一点是,bytea 字段的转义和取消转义需要相当多的 RAM,因此估计它可能需要 8 倍或更多 ram 比文件大。所以这只是需要考虑的一件事。

    【讨论】:

    • 您的意思是我需要将字节数组转换为字符串吗?我使用Java。那么在 Heroku 上的数据库中存储BYTEA 是不可能的吗?
    • 我曾经合作过的每个司机都有为您进行转换的设施。 JDBC 也不例外。
    • 在java中将其读入一个字节[],然后将其保存在数据库中?见stackoverflow.com/questions/3677380/…
    • 问题是pg_read_file 从服务器读取文件,而不是我想象的本地文件。现在一切正常!再次感谢您。
    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多