PostgreSQL сообщает об ошибке нехватки памяти с помощью EXEC SQL

Я использую EXEC SQL для выполнения очень длинного SQL (6000 символов) в файле PGC, иногда ошибкаSQLSTATE=[YE001] SQLERRM=[out of memory on line 400], иногда работает нормально. Используйте vmstat для просмотра памяти

      -------------memory----------
swpd free buff cache
13324 2116768 3264 6004164

На машине осталось достаточно памяти Глядя на файл C, скомпилированный PGC, этот EXEC SQL переводится в

      { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "...long sql...",
ECPGt_varchar,&(h_vstrSHORI_DT),(long)8 + 1,(long)1,sizeof(struct varchar_1),ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT, ECPGt_EOLT);
if (sqlca.sqlcode < 0) 
goto SQL_ERR;}

Запросите исходный код ECPGdo и вызовите его в ECPGdo.

      char * ecpg_strdup(const char *string, int lineno) {
     char *new;
     if (string == NULL)
         return NULL;
     new = strdup(string);
     if (!new)     {
         ecpg_raise(lineno, ECPG_OUT_OF_MEMORY, ECPG_SQLSTATE_ECPG_OUT_OF_MEMORY, NULL);
         return NULL;
     }
     return new;
 }

После сбоя strdup здесь будет ошибка OOM. Я использую функцию strdup для проверки этого длинного SQL без ошибки OOM, поэтому здесь может быть и не ошибка.

Недостаток памяти вызван недостаточным объемом памяти машины или недостаточным объемом памяти postgresql?

Что мне делать, чтобы решить эту проблему?

0 ответов

Другие вопросы по тегам