PostgREST / PostgreSQL Не удается увеличить сообщение буфера строки - PullRequest
0 голосов
/ 22 июня 2019

Я сталкиваюсь с сообщением о невозможности увеличить строковый буфер в моем запущенном API postgREST. Я полагаю, что некоторые таблицы слишком велики для успешной работы с API.

Я использую докер postgrest / postgrest контейнера от https://hub.docker.com/r/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"

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Если вы не перекомпилируете PostgreSQL, невозможно обновить ограничение (определено здесь ).

Я бы хотел попытаться уменьшить размер полезной нагрузки (вы уверены, что вам нужно)все данные?) или получить всю полезную нагрузку в нескольких запросах.

С PostgREST вы можете сделать вертикальную фильтрацию (просто выберите нужные столбцы) или paginate чтобы уменьшить количество строк, которые вы получаете в одном запросе.

0 голосов
/ 23 июня 2019

Сообщение об ошибке исходит от PostgreSQL.PostgREST просто упаковывает сообщение в JSON и отправляет HTTP-ответ.

В качестве первого шага для поиска проблемы посмотрите, какой именно HTTP-запрос вы делаете, чтобы вызвать ошибку.

Затем,включите PostgreSQL logging и повторите запрос, проверьте журналы, и затем вы увидите, что является SQL-запросом, который вызывает эту ошибку.Запустите запрос через pgAdmin или psql, чтобы убедиться, что вы получили проблемный запрос.

Обновите ваш вопрос, найдя результаты.Для продолжения необходим SQL-запрос.

После этого вы можете добавить тег postgresql к своему вопросу.

...