2016-07-15 119 views
0

我打算在Heroku上部署我的应用程序,为此我在那里创建了一个数据库。由于Hibernate的选项hibernate.hbm2ddl.auto=create没有工作,我手动编写了一个SQL查询。直到我试图将BLOB插入到数据库时,一切都很顺利。Heroku PostgreSQL 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而不是超级用户?

回答

1

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

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

有一点需要注意的是,bytea字段的转义和回避需要相当多的RAM,因此可能需要RAM的8倍或更多倍,而文件很大。所以这只是一件需要考虑的事情。

+0

你的意思是我需要将字节数组转换为字符串?我使用Java。那么在Heroku的数据库中存储“BYTEA”是不可能的? – DimaSan

+0

查看jdbc文档;-) https://jdbc.postgresql.org/documentation/80/binary-data.html –

+0

我曾与之合作过的每个驱动程序都可以为您进行转换。 JDBC也不例外。 –