sql - Heroku PostgreSQL BLOB 插入失败

标签 sql postgresql heroku heroku-postgres

我将在 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/

相关文章:

postgresql - Datagrip - 与 Heroku 的 PostgreSQL 连接不显示表

更改给定行的列中文本编码的 SQL 脚本?

ruby-on-rails - Nginx、 unicorn 和 Heroku

ruby-on-rails - 如果 Dbs 不扩展,Heroku(或其他服务器场)有什么意义?

mysql - 访问虚拟主机时 SQL 访问被拒绝

php - 二维数组不显示数据

postgresql - Postgres 以错误的顺序返回记录

python - Heroku H10错误— Python

php - MYSQL:加入两个排序的结果集

java - Jooq 插入重复键更新