From ae8479e3abfa4e19dafcea5bc30638fdf8c4355b Mon Sep 17 00:00:00 2001
From: Bharath Rupireddy <bharath.rupireddy@enterprisedb.com>
Date: Sat, 27 Jun 2020 09:18:22 +0530
Subject: [PATCH v3] Remove Extra palloc Of raw_buf For Binary Format In COPY
 FROM

For binary files raw_buf is not used and instead attribute_buf
is used in CopyReadBinaryAttribute. Hence, don't palloc raw_buf
for binary files.
---
 src/backend/commands/copy.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 6b1fd6d4cc..6ddf3bee99 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -3367,7 +3367,14 @@ BeginCopyFrom(ParseState *pstate,
 	initStringInfo(&cstate->attribute_buf);
 	initStringInfo(&cstate->line_buf);
 	cstate->line_buf_converted = false;
-	cstate->raw_buf = (char *) palloc(RAW_BUF_SIZE + 1);
+
+	/*
+	 * For binary files raw_buf is not used and instead attribute_buf
+	 * is used in CopyReadBinaryAttribute. Hence, don't palloc raw_buf
+	 * for binary files.
+	 */
+	 cstate->raw_buf = (cstate->binary) ? NULL : (char *) palloc(RAW_BUF_SIZE + 1);
+
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 
 	/* Assign range table, we'll need it in CopyFrom. */
-- 
2.25.1

