Bug and Patch for dump/restore of varchars - Mailing list pgsql-hackers
From | Cary B. O'Brien |
---|---|
Subject | Bug and Patch for dump/restore of varchars |
Date | |
Msg-id | 199810101531.LAA04499@access1.digex.net Whole thread Raw |
Responses |
Re: [HACKERS] Bug and Patch for dump/restore of varchars
|
List | pgsql-hackers |
OK, i finally got some time. I know I should have gotten this out long ago I had three actual bugs I had to fix with 6.3.1 for our production application. 1) can't enter float .001 (FIXED) 2) Can't dump/restore varchar fields (See attached bug report/patch) 3) Problems with tcl interface, storing/retrieving lists (under discussion) Is this the right fix? How do I get the patch applied? I haven't supplied patches before. The patch is against the latest snapshot. -- cary Bug report, can't restore varchar fields --------------------------------------- Version: postgresql snapshot dated oct 9 (well, that's when I downloaded it). Problem: Pg dump dumps varchar fields as varchar(-5). cary=> create table fred (id int, name varchar, salary float); CREATE cary=> \q [cary@jason new]$ pg_dump cary -t fred > /tmp/fred.sql [cary@jason new]$ cat /tmp/fred.sql CREATE TABLE "fred" ("id" "int4", "name" varchar(-5), "salary" "float8"); COPY "fred" FROM stdin; \. [cary@jason new]$ psql < /tmp/fred.sql CREATE TABLE "fred" ("id" "int4", "name" varchar(-5), "salary" "float8"); ERROR: parser: parse error at or near "-" COPY "fred" FROM stdin; EOF Solution: fix pg_dump ---------------------------------------- start patch ---------------------- [cary@jason pg_dump]$ rcsdiff -C 5 pg_dump.c =================================================================== RCS file: RCS/pg_dump.c,v retrieving revision 1.1 diff -C 5 -r1.1 pg_dump.c *** pg_dump.c 1998/10/10 11:24:22 1.1 --- pg_dump.c 1998/10/10 11:34:47 *************** *** 2647,2660 **** sprintf(q, "%s%s%s %s", q, (actual_atts > 0) ? ", " : "", fmtId(tblinfo[i].attnames[j]), tblinfo[i].typnames[j]); ! ! sprintf(q, "%s(%d)", q, tblinfo[i].atttypmod[j] - VARHDRSZ); actual_atts++; } else { strcpy(id1, fmtId(tblinfo[i].attnames[j])); --- 2647,2664 ---- sprintf(q, "%s%s%s %s", q, (actual_atts > 0) ? ", " : "", fmtId(tblinfo[i].attnames[j]), tblinfo[i].typnames[j]); ! if(tblinfo[i].atttypmod[j] != -1) { ! sprintf(q, "%s(%d)", q, tblinfo[i].atttypmod[j] - VARHDRSZ); + } + else { + sprintf(q, "%s", q); + } actual_atts++; } else { strcpy(id1, fmtId(tblinfo[i].attnames[j])); ---------------------- end of patch ------------------------------------------
pgsql-hackers by date: