Re: [HACKERS] pg_dump bug (was Re: [SQL] Slow Inserts Again) - Mailing list pgsql-hackers

From Thomas Lockhart
Subject Re: [HACKERS] pg_dump bug (was Re: [SQL] Slow Inserts Again)
Date
Msg-id 372EFC19.7A9E6514@alumni.caltech.edu
Whole thread Raw
In response to pg_dump bug (was Re: [SQL] Slow Inserts Again)  ("Ross J. Reedstrom" <reedstrm@rice.edu>)
Responses Re: [HACKERS] pg_dump bug (was Re: [SQL] Slow Inserts Again)
List pgsql-hackers
> ... pg_dump seems to have problems with mixed case tablenames. There
> doesn't seem to be a way to send a quoted tablename into pg_dump as the
> value for a -t option, in 6.4.2 (example below). Can someone try this on
> 6.5beta? I know some issues with quoting output of pg_dump (i.e. COPY)
> was addressed, I'm wondering if input parsing got touched.

pg_dump explicitly converts all table names to lowercase. I've got a
patch which looks for a table name which starts with a double quote,
and suppresses the case conversion if so:

[postgres@golem pg_dump]$ pg_dump -t '"MixedCase"' postgres
CREATE TABLE "MixedCase" (
        "i" int4);
COPY "MixedCase" FROM stdin;
1
2
\.

Patch enclosed for you to try. Bruce, any reason not to apply this to
the tree?

                      - Tom

--
Thomas Lockhart                lockhart@alumni.caltech.edu
South Pasadena, California*** pg_dump.c.orig    Thu Apr 15 05:08:53 1999
--- pg_dump.c    Tue May  4 13:47:01 1999
***************
*** 606,615 ****
                      int            i;

                      tablename = strdup(optarg);
!                     for (i = 0; tablename[i]; i++)
!                         if (isascii((unsigned char) tablename[i]) &&
!                             isupper(tablename[i]))
!                             tablename[i] = tolower(tablename[i]);
                  }
                  break;
              case 'v':            /* verbose */
--- 606,626 ----
                      int            i;

                      tablename = strdup(optarg);
!                     /* quoted string? Then strip quotes and preserve case... */
!                     if (tablename[0] == '"')
!                     {
!                         strcpy(tablename, &tablename[1]);
!                         if (*(tablename+strlen(tablename)-1) == '"')
!                             *(tablename+strlen(tablename)-1) = '\0';
!                     }
!                     /* otherwise, convert table name to lowercase... */
!                     else
!                     {
!                         for (i = 0; tablename[i]; i++)
!                             if (isascii((unsigned char) tablename[i]) &&
!                                 isupper(tablename[i]))
!                                 tablename[i] = tolower(tablename[i]);
!                     }
                  }
                  break;
              case 'v':            /* verbose */

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: varchar-array.patch applied
Next
From: Tom Lane
Date:
Subject: Re: [HACKERS] an older problem? hash table out of memory