Re: pg_dump.save_pkey_name.patch - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: pg_dump.save_pkey_name.patch
Date
Msg-id 200011272051.PAA21135@candle.pha.pa.us
Whole thread Raw
In response to pg_dump.save_pkey_name.patch  (awn@bcs.zp.ua)
List pgsql-patches
Thanks.  Applied.


> This patch allow pg_dump save name of primary key constraint (if primary
> key exist).
>
> Patch was created around PostgreSQL v7.0.3 sources.
>
> --- src/bin/pg_dump/pg_dump.c.O    Sun Nov  5 06:03:44 2000
> +++ src/bin/pg_dump/pg_dump.c    Mon Nov 27 03:23:17 2000
> @@ -1216,6 +1216,8 @@ clearTableInfo(TableInfo *tblinfo, int n
>              free(tblinfo[i].notnull);
>          if (tblinfo[i].primary_key)
>              free(tblinfo[i].primary_key);
> +        if (tblinfo[i].primary_key_name)
> +            free(tblinfo[i].primary_key_name);
>      }
>      free(tblinfo);
>  }
> @@ -1760,6 +1762,49 @@ getTables(int *numTables, FuncInfo *finf
>          else
>              tblinfo[i].primary_key = NULL;
>
> +        /* Get primary key name (if primary key exist) */
> +        if (tblinfo[i].primary_key)
> +        {
> +            PGresult   *res2;
> +            int           n;
> +
> +            resetPQExpBuffer(query);
> +            appendPQExpBuffer(query,
> +                              "SELECT c.relname "
> +                              "FROM pg_index i, pg_class c "
> +                              "WHERE i.indrelid = %s"
> +                              "AND   i.indisprimary "
> +                              "AND   c.oid = i.indexrelid ",
> +                              tblinfo[i].oid);
> +            res2 = PQexec(g_conn, query->data);
> +            if (!res2 || PQresultStatus(res2) != PGRES_TUPLES_OK)
> +            {
> +                fprintf(stderr, "getTables(): SELECT (for PRIMARY KEY NAME) failed.  Explanation from backend: %s",
> +                        PQerrorMessage(g_conn));
> +                exit_nicely(g_conn);
> +            }
> +
> +            n = PQntuples(res2);
> +            if (n != 1)
> +            {
> +                fprintf(stderr,
> +                        "getTables(): SELECT (for PRIMARY KEY NAME) failed. This is impossible but object with OID
==%s have %d primary keys.\n", 
> +                        tblinfo[i].oid,
> +                        n);
> +                exit_nicely(g_conn);
> +            }
> +
> +            tblinfo[i].primary_key_name =
> +                strdup(fmtId(PQgetvalue(res2, 0, 0), force_quotes));
> +            if (tblinfo[i].primary_key_name == NULL)
> +            {
> +                perror("strdup");
> +                exit(1);
> +            }
> +        }
> +        else
> +            tblinfo[i].primary_key_name = NULL;
> +
>          /* Get Triggers */
>          if (tblinfo[i].ntrig > 0)
>          {
> @@ -3206,7 +3251,10 @@ dumpTables(FILE *fout, TableInfo *tblinf
>              {
>                  if (actual_atts + tblinfo[i].ncheck > 0)
>                      appendPQExpBuffer(q, ",\n\t");
> -                appendPQExpBuffer(q, "PRIMARY KEY (%s)", tblinfo[i].primary_key);
> +                appendPQExpBuffer(q,
> +                                  "CONSTRAINT %s PRIMARY KEY (%s)",
> +                                  tblinfo[i].primary_key_name,
> +                                  tblinfo[i].primary_key);
>              }
>
>              appendPQExpBuffer(q, "\n)");
> --- src/bin/pg_dump/pg_dump.h.O    Sun Nov  5 06:03:44 2000
> +++ src/bin/pg_dump/pg_dump.h    Mon Nov 27 03:23:16 2000
> @@ -99,6 +99,7 @@ typedef struct _tableInfo
>      char      **trcomments;        /* COMMENT ON TRIGGER ... */
>      char      **troids;            /* TRIGGER oids */
>      char       *primary_key;    /* PRIMARY KEY of the table, if any */
> +    char       *primary_key_name;    /* PRIMARY KEY name, if any */
>  } TableInfo;
>
>  typedef struct _inhInfo
>
> --
> Andrew W. Nosenko    (awn@bcs.zp.ua)
>


--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

pgsql-patches by date:

Previous
From: awn@bcs.zp.ua
Date:
Subject: pg_dump.save_pkey_name.patch
Next
From: Peter Bierman
Date:
Subject: darwin pgsql patches