问题:Postgresql 和 BLOB - bytea 的最大大小?

我目前正在尝试将图像存储在 psql 表中,并且正在按照本指南此处使用 bytea 作为图像。问题是我要插入的图像约为 24kb,并且我不断收到最大大小为 8191 的错误消息,尽管我在其他地方读到过,bytea 应该最多可以存储 1gb。当然,我应该能够以某种方式提高这个最大限制吗?

代码:

String query = "INSERT INTO " + tableName + " VALUES(?);";
try {
    PreparedStatement stmt = conn.prepareStatement(query);
    File file = new File(location);
    FileInputStream fi = new FileInputStream(file);
    stmt.setBinaryStream(1, fi, (int)file.length());
    boolean res = stmt.execute();
    stmt.close();
    fi.close
    return res;
}

数据库表目前仅包含一个字节。

错误信息:

org.postgresql.util.PSQLException: ERROR: index row requires 23888 bytes, maximum size is 8191

解答

显然,您在该列上有一个 index (老实说,我很惊讶您可以创建它 - 我本以为 Postgres 会拒绝它)。

bytea列上的索引实际上没有意义。如果您删除该索引,则应该没问题。

真正的问题是:为什么要在存储二进制数据的列上创建索引?

Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐