patch.diff

text/plain

Filename: patch.diff
Type: text/plain
Part: 0
Message: Less than ideal error reporting in pg_stat_statements

Patch

Format: unified
File+
contrib/pg_stat_statements/pg_stat_statements.c 15 5
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;
 	}