我要在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而不是超级用户?
答案 0 :(得分:1)
服务器端文件访问仅限超级用户,因为它使用服务器的文件权限运行。如果你可以读取文件,例如读取数据库文件并存储它。你可以通过写入来破坏数据。
因此,服务器上的文件访问功能相对局限于管理操作。对于您的应用程序,您希望执行不同的操作。对于bytea,使用任何客户端库来进行转义。这将取决于语言(在Perl,PHP,Java等方面有所不同)。
需要注意的一点是,bytea字段的转义和取消转换占用了相当多的RAM,因此它可能需要8倍或更多的ram而不是文件很大。所以这只是一件值得思考的问题。