From 8cbbdddac18d5aaf9546342291fa9a20de4deee8 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Thu, 11 Apr 2013 16:38:56 +0000 Subject: [PATCH] Copy hack! --- src/backend/commands/copy.c | 10 ++++++++++ src/backend/utils/misc/guc.c | 11 +++++++++++ src/include/miscadmin.h | 2 ++ 3 files changed, 23 insertions(+) diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index 4eb94a43ad..3e44f094b3 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -2204,9 +2204,19 @@ CopyFrom(CopyState cstate) /* Switch into its memory context */ MemoryContextSwitchTo(GetPerTupleMemoryContext(estate)); + if (copy_hack > 1) + { + if (!CopyReadLine(cstate)) + break; + continue; + } + if (!NextCopyFrom(cstate, econtext, values, nulls, &loaded_oid)) break; + if (copy_hack > 0) + continue; + /* And now we can form the input tuple. */ tuple = heap_form_tuple(tupDesc, values, nulls); diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 22ba35fef9..b9505eb9fd 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -138,6 +138,7 @@ extern bool optimize_bounded_sort; #endif static int GUC_check_errcode_value; +int copy_hack; /* global variables for check hook support */ char *GUC_check_errmsg_string; @@ -2410,6 +2411,16 @@ static struct config_int ConfigureNamesInt[] = NULL, NULL, NULL }, + { + {"copy_hack", PGC_USERSET, DEVELOPER_OPTIONS, + gettext_noop("Hacks COPY."), + NULL + }, + ©_hack, + 0, 0, INT_MAX, + NULL, NULL, NULL + }, + /* End-of-list marker */ { {NULL, 0, 0, NULL, NULL}, NULL, 0, 0, 0, NULL, NULL, NULL diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h index b69ffe59cd..6962a87175 100644 --- a/src/include/miscadmin.h +++ b/src/include/miscadmin.h @@ -445,4 +445,6 @@ extern bool has_rolreplication(Oid roleid); extern bool BackupInProgress(void); extern void CancelBackup(void); +extern int copy_hack; + #endif /* MISCADMIN_H */ -- 2.39.5