Если причина ошибки на стороне сервера: в PostgreSQL функция всегда выполняется внутри транзакции.DO
блоки являются анонимными функциями и обрабатываются одинаково.И поскольку даже команды DML, такие как CREATE
или DROP
, являются транзакционными в PostgreSQL, эти команды также подчеркивают обычные ресурсы, используемые для ROLLBACK
и COMMIT
.
Я предполагаю, что отбрасывание огромного количества больших таблиц приводит к большому объему памяти.Поэтому, если вам не нужно транзакционное поведение в вашей функции, самый простой способ - разделить большую функцию на несколько более мелких.Вызовите каждую функцию в отдельной транзакции.