Heroku PostgreSQL BLOB 插入失败

Heroku PostgreSQL BLOB insertion fails

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

我有一个 table 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 table.

的外键

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

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

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

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