我将在 Heroku 上部署我的应用程序,为此我在那里创建了一个数据库。由于 Hibernate 的选项 hibernate.hbm2ddl.auto=create
不起作用,我手动编写了一个 SQL 查询。一切顺利,直到我尝试将 BLOB 插入数据库。
我有一张 table 照片
:
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 而不是 super 用户?
最佳答案
服务器端文件访问仅限 super 用户,因为它以服务器的文件权限运行。如果你可以读取文件,你可以,例如读取数据库文件并存储它。您可以通过写入破坏数据。
因此,服务器上的文件访问功能相对局限于诸如管理操作之类的事情。对于您的应用程序,您想做一些不同的事情。对于 bytea,使用任何你想要进行转义的客户端库。这将取决于语言(在 Perl、PHP、Java 等中是不同的)。
需要注意的一件事是,bytea 字段的转义和取消转义需要相当多的 RAM,因此计算它可能需要 8 倍或更多的 ram,而不是文件大。所以这只是需要考虑的一件事。
关于sql - Heroku PostgreSQL BLOB 插入失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38400635/