PostgREST / PostgreSQL无法放大字符串缓冲区消息

时间:2019-06-22 09:28:02

标签: postgresql postgrest

我在运行的postgREST API上遇到无法放大字符串缓冲区消息。我猜有些表太大了,无法成功使用API​​。

我正在使用https://hub.docker.com/r/postgrest/postgrest中的docker postgrest / postgrest容器和PostgREST 5.1.0版本。

一切正常,但是如果表的大小太大,我将收到以下错误消息。

hint    null
details "Cannot enlarge string buffer containing 1073741822 bytes by 1 more bytes."
code    "54000"
message "out of memory"

我无法确定阈值何时起作用。 是否有可能扩大某些配置文件中的字符串缓冲区,或者这是硬编码的?

使用API​​的表格大小是否有限制?到目前为止,我在文档中找不到任何信息。

============更新

postgres日志为我提供了以下SQL查询:

WITH pg_source AS (
  SELECT "public"."n_osm_bawue_line".* 
  FROM "public"."n_osm_bawue_line"
) 
SELECT null AS total_result_set, 
       pg_catalog.count(_postgrest_t) AS page_total, 
       array[]::text[] AS header, 
       coalesce(json_agg(_postgrest_t), '[]')::character varying AS body 
FROM ( 
  SELECT * 
  FROM pg_source
) _postgrest_t

我使用以下postgres版本:

"PostgreSQL 11.1 (Debian 11.1-1.pgdg90+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit"

3 个答案:

答案 0 :(得分:0)

该错误消息来自PostgreSQL。 PostgREST只是将消息包装为JSON并发送HTTP响应。

作为发现问题的第一步,请查看执行触发错误的确切HTTP请求是什么。

然后,启用PostgreSQL logging并重复请求,检查日志,然后您将看到引起此错误的SQL查询是什么。通过pgAdmin或psql运行查询,以确保查询到问题。

用您的发现更新您的问题。将继续执行SQL查询。

之后,您可以在问题中添加一个PostgreSQL标记。

答案 1 :(得分:0)

除非重新编译PostgreSQL,否则无法升级限制(定义为here)。

我的建议是尝试减少有效载荷的大小(确定要使用所有数据吗?)或在多个请求中获得所有有效载荷。

使用PostgREST,您可以进行vertical filtering(只需选择所需的列)或paginate来减少在一个请求中获得的行数。

答案 2 :(得分:0)

由于各种原因,导入的文件总是有可能损坏或格式错误。

我碰巧在我的案例中发现我的文件有类似不正确的行结尾(长篇大论,这里没有必要)导致整个文件显示为一行,从而导致明显的结果。您的情况可能有类似的情况,需要查找+替换类型的解决方案。

为了其他人的利益,我用这个来解决它:

<块引用>

tr -d '\0' bad_file.csv.fixed