show_schema_in_copy_error_context.patch
text/plain
Filename: show_schema_in_copy_error_context.patch
Type: text/plain
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: context
| File | + | − |
|---|---|---|
| src/backend/commands/copy.c | 20 | 15 |
| src/test/regress/expected/alter_table.out | 1 | 1 |
| src/test/regress/expected/copy2.out | 5 | 5 |
| src/test/regress/expected/domain.out | 5 | 5 |
| src/test/regress/output/constraints.source | 1 | 1 |
| src/test/regress/sql/copy2.sql | 1 | 1 |
Index: src/backend/commands/copy.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/commands/copy.c,v
retrieving revision 1.327
diff -c -r1.327 copy.c
*** src/backend/commands/copy.c 28 Apr 2010 16:10:41 -0000 1.327
--- src/backend/commands/copy.c 2 May 2010 15:40:52 -0000
***************
*** 119,124 ****
--- 119,125 ----
bool *force_notnull_flags; /* per-column CSV FNN flags */
/* these are just for error messages, see copy_in_error_callback */
+ const char *cur_schemaname; /* schema name for error messages */
const char *cur_relname; /* table name for error messages */
int cur_lineno; /* line number for error messages */
const char *cur_attname; /* current att for error messages */
***************
*** 1569,1580 ****
{
/* can't usefully display the data */
if (cstate->cur_attname)
! errcontext("COPY %s, line %d, column %s",
! cstate->cur_relname, cstate->cur_lineno,
! cstate->cur_attname);
else
! errcontext("COPY %s, line %d",
! cstate->cur_relname, cstate->cur_lineno);
}
else
{
--- 1570,1582 ----
{
/* can't usefully display the data */
if (cstate->cur_attname)
! errcontext("COPY %s.%s, line %d, column %s",
! cstate->cur_schemaname, cstate->cur_relname,
! cstate->cur_lineno, cstate->cur_attname);
else
! errcontext("COPY %s.%s, line %d",
! cstate->cur_schemaname, cstate->cur_relname,
! cstate->cur_lineno);
}
else
{
***************
*** 1584,1600 ****
char *attval;
attval = limit_printout_length(cstate->cur_attval);
! errcontext("COPY %s, line %d, column %s: \"%s\"",
! cstate->cur_relname, cstate->cur_lineno,
! cstate->cur_attname, attval);
pfree(attval);
}
else if (cstate->cur_attname)
{
/* error is relevant to a particular column, value is NULL */
! errcontext("COPY %s, line %d, column %s: null input",
! cstate->cur_relname, cstate->cur_lineno,
! cstate->cur_attname);
}
else
{
--- 1586,1602 ----
char *attval;
attval = limit_printout_length(cstate->cur_attval);
! errcontext("COPY %s.%s, line %d, column %s: \"%s\"",
! cstate->cur_schemaname, cstate->cur_relname,
! cstate->cur_lineno, cstate->cur_attname, attval);
pfree(attval);
}
else if (cstate->cur_attname)
{
/* error is relevant to a particular column, value is NULL */
! errcontext("COPY %s.%s, line %d, column %s: null input",
! cstate->cur_schemaname, cstate->cur_relname,
! cstate->cur_lineno, cstate->cur_attname);
}
else
{
***************
*** 1604,1611 ****
char *lineval;
lineval = limit_printout_length(cstate->line_buf.data);
! errcontext("COPY %s, line %d: \"%s\"",
! cstate->cur_relname, cstate->cur_lineno, lineval);
pfree(lineval);
}
else
--- 1606,1614 ----
char *lineval;
lineval = limit_printout_length(cstate->line_buf.data);
! errcontext("COPY %s.%s, line %d: \"%s\"",
! cstate->cur_schemaname, cstate->cur_relname,
! cstate->cur_lineno, lineval);
pfree(lineval);
}
else
***************
*** 1618,1625 ****
* regurgitate it without conversion. So we have to punt and
* just report the line number.
*/
! errcontext("COPY %s, line %d",
! cstate->cur_relname, cstate->cur_lineno);
}
}
}
--- 1621,1629 ----
* regurgitate it without conversion. So we have to punt and
* just report the line number.
*/
! errcontext("COPY %s.%s, line %d",
! cstate->cur_schemaname, cstate->cur_relname,
! cstate->cur_lineno);
}
}
}
***************
*** 1929,1934 ****
--- 1933,1939 ----
/* Initialize state variables */
cstate->fe_eof = false;
cstate->eol_type = EOL_UNKNOWN;
+ cstate->cur_schemaname = get_namespace_name(RelationGetNamespace(cstate->rel));
cstate->cur_relname = RelationGetRelationName(cstate->rel);
cstate->cur_lineno = 0;
cstate->cur_attname = NULL;
Index: src/test/regress/expected/alter_table.out
===================================================================
RCS file: /projects/cvsroot/pgsql/src/test/regress/expected/alter_table.out,v
retrieving revision 1.119
diff -c -r1.119 alter_table.out
*** src/test/regress/expected/alter_table.out 23 Dec 2009 02:35:24 -0000 1.119
--- src/test/regress/expected/alter_table.out 2 May 2010 15:40:52 -0000
***************
*** 998,1004 ****
ERROR: column "........pg.dropped.1........" of relation "test" does not exist
copy test from stdin;
ERROR: extra data after last expected column
! CONTEXT: COPY test, line 1: "10 11 12"
select * from test;
b | c
---+---
--- 998,1004 ----
ERROR: column "........pg.dropped.1........" of relation "test" does not exist
copy test from stdin;
ERROR: extra data after last expected column
! CONTEXT: COPY public.test, line 1: "10 11 12"
select * from test;
b | c
---+---
Index: src/test/regress/expected/copy2.out
===================================================================
RCS file: /projects/cvsroot/pgsql/src/test/regress/expected/copy2.out,v
retrieving revision 1.29
diff -c -r1.29 copy2.out
*** src/test/regress/expected/copy2.out 17 Feb 2010 04:19:41 -0000 1.29
--- src/test/regress/expected/copy2.out 2 May 2010 15:40:52 -0000
***************
*** 1,4 ****
! CREATE TEMP TABLE x (
a serial,
b int,
c text not null default 'stuff',
--- 1,4 ----
! CREATE TABLE public.x (
a serial,
b int,
c text not null default 'stuff',
***************
*** 35,51 ****
-- missing data: should fail
COPY x from stdin;
ERROR: invalid input syntax for integer: ""
! CONTEXT: COPY x, line 1, column a: ""
COPY x from stdin;
ERROR: missing data for column "e"
! CONTEXT: COPY x, line 1: "2000 230 23 23"
COPY x from stdin;
ERROR: missing data for column "e"
! CONTEXT: COPY x, line 1: "2001 231 \N \N"
-- extra data: should fail
COPY x from stdin;
ERROR: extra data after last expected column
! CONTEXT: COPY x, line 1: "2002 232 40 50 60 70 80"
-- various COPY options: delimiters, oids, NULL string
COPY x (b, c, d, e) from stdin with oids delimiter ',' null 'x';
COPY x from stdin WITH DELIMITER AS ';' NULL AS '';
--- 35,51 ----
-- missing data: should fail
COPY x from stdin;
ERROR: invalid input syntax for integer: ""
! CONTEXT: COPY public.x, line 1, column a: ""
COPY x from stdin;
ERROR: missing data for column "e"
! CONTEXT: COPY public.x, line 1: "2000 230 23 23"
COPY x from stdin;
ERROR: missing data for column "e"
! CONTEXT: COPY public.x, line 1: "2001 231 \N \N"
-- extra data: should fail
COPY x from stdin;
ERROR: extra data after last expected column
! CONTEXT: COPY public.x, line 1: "2002 232 40 50 60 70 80"
-- various COPY options: delimiters, oids, NULL string
COPY x (b, c, d, e) from stdin with oids delimiter ',' null 'x';
COPY x from stdin WITH DELIMITER AS ';' NULL AS '';
Index: src/test/regress/expected/domain.out
===================================================================
RCS file: /projects/cvsroot/pgsql/src/test/regress/expected/domain.out,v
retrieving revision 1.45
diff -c -r1.45 domain.out
*** src/test/regress/expected/domain.out 11 Jun 2008 21:53:49 -0000 1.45
--- src/test/regress/expected/domain.out 2 May 2010 15:40:52 -0000
***************
*** 49,55 ****
-- Test copy
COPY basictest (testvarchar) FROM stdin; -- fail
ERROR: value too long for type character varying(5)
! CONTEXT: COPY basictest, line 1, column testvarchar: "notsoshorttext"
COPY basictest (testvarchar) FROM stdin;
select * from basictest;
testint4 | testtext | testvarchar | testnumeric
--- 49,55 ----
-- Test copy
COPY basictest (testvarchar) FROM stdin; -- fail
ERROR: value too long for type character varying(5)
! CONTEXT: COPY public.basictest, line 1, column testvarchar: "notsoshorttext"
COPY basictest (testvarchar) FROM stdin;
select * from basictest;
testint4 | testtext | testvarchar | testnumeric
***************
*** 130,136 ****
COPY domarrtest FROM stdin;
COPY domarrtest FROM stdin; -- fail
ERROR: value too long for type character varying(4)
! CONTEXT: COPY domarrtest, line 1, column testchar4arr: "{qwerty,w,e}"
select * from domarrtest;
testint4arr | testchar4arr
---------------+---------------------
--- 130,136 ----
COPY domarrtest FROM stdin;
COPY domarrtest FROM stdin; -- fail
ERROR: value too long for type character varying(4)
! CONTEXT: COPY public.domarrtest, line 1, column testchar4arr: "{qwerty,w,e}"
select * from domarrtest;
testint4arr | testchar4arr
---------------+---------------------
***************
*** 173,186 ****
-- Test copy
COPY nulltest FROM stdin; --fail
ERROR: null value in column "col3" violates not-null constraint
! CONTEXT: COPY nulltest, line 1: "a b \N d d"
COPY nulltest FROM stdin; --fail
ERROR: domain dcheck does not allow null values
! CONTEXT: COPY nulltest, line 1, column col5: null input
-- Last row is bad
COPY nulltest FROM stdin;
ERROR: new row for relation "nulltest" violates check constraint "nulltest_col5_check"
! CONTEXT: COPY nulltest, line 3: "a b c \N a"
select * from nulltest;
col1 | col2 | col3 | col4 | col5
------+------+------+------+------
--- 173,186 ----
-- Test copy
COPY nulltest FROM stdin; --fail
ERROR: null value in column "col3" violates not-null constraint
! CONTEXT: COPY public.nulltest, line 1: "a b \N d d"
COPY nulltest FROM stdin; --fail
ERROR: domain dcheck does not allow null values
! CONTEXT: COPY public.nulltest, line 1, column col5: null input
-- Last row is bad
COPY nulltest FROM stdin;
ERROR: new row for relation "nulltest" violates check constraint "nulltest_col5_check"
! CONTEXT: COPY public.nulltest, line 3: "a b c \N a"
select * from nulltest;
col1 | col2 | col3 | col4 | col5
------+------+------+------+------
Index: src/test/regress/output/constraints.source
===================================================================
RCS file: /projects/cvsroot/pgsql/src/test/regress/output/constraints.source,v
retrieving revision 1.49
diff -c -r1.49 constraints.source
*** src/test/regress/output/constraints.source 22 Mar 2010 17:43:28 -0000 1.49
--- src/test/regress/output/constraints.source 2 May 2010 15:40:52 -0000
***************
*** 278,284 ****
COPY COPY_TBL FROM '@abs_srcdir@/data/constrf.data';
ERROR: new row for relation "copy_tbl" violates check constraint "copy_con"
! CONTEXT: COPY copy_tbl, line 2: "7 check failed 6"
SELECT * FROM COPY_TBL;
x | y | z
---+---------------+---
--- 278,284 ----
COPY COPY_TBL FROM '@abs_srcdir@/data/constrf.data';
ERROR: new row for relation "copy_tbl" violates check constraint "copy_con"
! CONTEXT: COPY public.copy_tbl, line 2: "7 check failed 6"
SELECT * FROM COPY_TBL;
x | y | z
---+---------------+---
Index: src/test/regress/sql/copy2.sql
===================================================================
RCS file: /projects/cvsroot/pgsql/src/test/regress/sql/copy2.sql,v
retrieving revision 1.20
diff -c -r1.20 copy2.sql
*** src/test/regress/sql/copy2.sql 17 Feb 2010 04:19:41 -0000 1.20
--- src/test/regress/sql/copy2.sql 2 May 2010 15:40:52 -0000
***************
*** 1,4 ****
! CREATE TEMP TABLE x (
a serial,
b int,
c text not null default 'stuff',
--- 1,4 ----
! CREATE TABLE public.x (
a serial,
b int,
c text not null default 'stuff',