PostgREST / PostgreSQL Cannot enlarge string buffer 消息
PostgREST / PostgreSQL Cannot enlarge string buffer message
我 运行 在我的 运行ning postgREST API 上出现无法放大字符串缓冲区消息。我想有些 table 太大而无法与 API.
一起使用
我正在使用来自 https://hub.docker.com/r/postgrest/postgrest 的 docker postgrest/postgrest 容器,版本为 PostgREST 5.1.0。
一切都按预期工作,但如果 tables 大小变得太大,我会收到以下错误消息。
hint null
details "Cannot enlarge string buffer containing 1073741822 bytes by 1 more bytes."
code "54000"
message "out of memory"
我无法确定阈值是否有效。
是否有可能在某些配置文件中扩大字符串缓冲区,或者这是硬编码的?
使用 API 时 table 大小是否有任何限制。到目前为止,我在文档中找不到任何信息。
===========更新
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"
错误消息来自 PostgreSQL。 PostgREST 只是将消息包装在 JSON 中并发送 HTTP 响应。
作为发现问题的第一步,请查看触发错误的确切 HTTP 请求是什么。
然后,启用 PostgreSQL logging 并重复请求,检查日志,然后您将看到导致此错误的 SQL 查询是什么。 运行 通过 pgAdmin 或 psql 查询以确保您得到了有问题的查询。
用你的发现更新你的问题。 SQL 查询将是继续所需的内容。
之后你可以在你的问题中添加一个 postgresql 标签。
除非你重新编译 PostgreSQL 是不可能升级限制的(定义here)。
我的建议是尝试减小有效负载的大小(您确定需要所有数据吗?)或在多个请求中获取所有有效负载。
使用 PostgREST,您可以vertical filtering(just select the columns that you need) or paginate减少一次请求中获得的行数。
由于各种原因,导入的文件总是有可能损坏或格式不正确。
我刚好在我的案例中发现我的文件有一些错误的行尾(长话短说,这里不需要)导致整个文件显示为一行,从而导致明显的结果。您的情况可能有类似的情况需要查找+替换类型的解决方案。
不管对其他人有什么好处,我用这个来解决它:
tr -d '[=10=]' < bad_file.csv > bad_file.csv.fixed
我 运行 在我的 运行ning postgREST API 上出现无法放大字符串缓冲区消息。我想有些 table 太大而无法与 API.
一起使用我正在使用来自 https://hub.docker.com/r/postgrest/postgrest 的 docker postgrest/postgrest 容器,版本为 PostgREST 5.1.0。
一切都按预期工作,但如果 tables 大小变得太大,我会收到以下错误消息。
hint null
details "Cannot enlarge string buffer containing 1073741822 bytes by 1 more bytes."
code "54000"
message "out of memory"
我无法确定阈值是否有效。 是否有可能在某些配置文件中扩大字符串缓冲区,或者这是硬编码的?
使用 API 时 table 大小是否有任何限制。到目前为止,我在文档中找不到任何信息。
===========更新
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"
错误消息来自 PostgreSQL。 PostgREST 只是将消息包装在 JSON 中并发送 HTTP 响应。
作为发现问题的第一步,请查看触发错误的确切 HTTP 请求是什么。
然后,启用 PostgreSQL logging 并重复请求,检查日志,然后您将看到导致此错误的 SQL 查询是什么。 运行 通过 pgAdmin 或 psql 查询以确保您得到了有问题的查询。
用你的发现更新你的问题。 SQL 查询将是继续所需的内容。
之后你可以在你的问题中添加一个 postgresql 标签。
除非你重新编译 PostgreSQL 是不可能升级限制的(定义here)。
我的建议是尝试减小有效负载的大小(您确定需要所有数据吗?)或在多个请求中获取所有有效负载。
使用 PostgREST,您可以vertical filtering(just select the columns that you need) or paginate减少一次请求中获得的行数。
由于各种原因,导入的文件总是有可能损坏或格式不正确。
我刚好在我的案例中发现我的文件有一些错误的行尾(长话短说,这里不需要)导致整个文件显示为一行,从而导致明显的结果。您的情况可能有类似的情况需要查找+替换类型的解决方案。
不管对其他人有什么好处,我用这个来解决它:
tr -d '[=10=]' < bad_file.csv > bad_file.csv.fixed