diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index 59b8a2e..06a0912 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -1893,14 +1893,24 @@ qtext_load_file(Size *buffer_size) /* Allocate buffer; beware that off_t might be wider than size_t */ if (stat.st_size <= MaxAllocSize) - buf = (char *) malloc(stat.st_size); - else - buf = NULL; - if (buf == NULL) { + buf = (char *) malloc(stat.st_size); + + if (buf == NULL) + { + ereport(LOG, + (errcode(ERRCODE_OUT_OF_MEMORY), + errmsg("out of memory attempting to pg_stat_statement file"), + errdetail("file \"%s\": size %lld", PGSS_TEXT_FILE, stat.st_size))); + CloseTransientFile(fd); + return NULL; + } + } else { ereport(LOG, + /* Is there a better code to use? IE: SQLSTATE 53000, 53400 or 54000 */ (errcode(ERRCODE_OUT_OF_MEMORY), - errmsg("out of memory"))); + errmsg("pg_stat_statement file is too large to process"), + errdetail("file \"%s\": size %lld", PGSS_TEXT_FILE, stat.st_size))); CloseTransientFile(fd); return NULL; }