]> granicus.if.org Git - postgresql/commitdiff
Use pg_get_triggerdef in pg_dump
authorPeter Eisentraut <peter_e@gmx.net>
Fri, 9 Oct 2009 21:02:56 +0000 (21:02 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
Fri, 9 Oct 2009 21:02:56 +0000 (21:02 +0000)
Add a variant of pg_get_triggerdef with a second argument "pretty" that
causes the output to be formatted in the way pg_dump used to do.  Use this
variant in pg_dump with server versions >= 8.5.

This insulates pg_dump from most future trigger feature additions, such as
the upcoming column triggers patch.

Author: Itagaki Takahiro <itagaki.takahiro@oss.ntt.co.jp>

doc/src/sgml/func.sgml
src/backend/utils/adt/ruleutils.c
src/bin/pg_dump/pg_dump.c
src/bin/pg_dump/pg_dump.h
src/include/catalog/catversion.h
src/include/catalog/pg_proc.h
src/include/utils/builtins.h

index 29d821e01a2bb47921a4d8420c3ee945bd6abe28..da558668c8ac34505f4a15ac4169731120e16c9e 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.487 2009/08/16 19:55:21 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.488 2009/10/09 21:02:55 petere Exp $ -->
 
  <chapter id="functions">
   <title>Functions and Operators</title>
@@ -12369,6 +12369,11 @@ SELECT pg_type_is_visible('myschema.widget'::regtype);
        <entry><type>text</type></entry>
        <entry>get <command>CREATE [ CONSTRAINT ] TRIGGER</> command for trigger</entry>
       </row>
+      <row>
+       <entry><function>pg_get_triggerdef</function>(<parameter>trigger_oid</parameter>, <parameter>pretty_bool</>)</entry>
+       <entry><type>text</type></entry>
+       <entry>get <command>CREATE [ CONSTRAINT ] TRIGGER</> command for trigger</entry>
+      </row>
       <row>
        <entry><literal><function>pg_get_userbyid</function>(<parameter>role_oid</parameter>)</literal></entry>
        <entry><type>name</type></entry>
index 4c04bafd7c62be89979e4e7fefaee85383dfeb30..d88d8f22f3229888aa771edc9f9ee61543ff2e5a 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.307 2009/10/08 02:39:23 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.308 2009/10/09 21:02:55 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -139,6 +139,7 @@ static char *deparse_expression_pretty(Node *expr, List *dpcontext,
                                                  bool forceprefix, bool showimplicit,
                                                  int prettyFlags, int startIndent);
 static char *pg_get_viewdef_worker(Oid viewoid, int prettyFlags);
+static char *pg_get_triggerdef_worker(Oid trigid, bool pretty);
 static void decompile_column_index_array(Datum column_index_array, Oid relId,
                                                         StringInfo buf);
 static char *pg_get_ruledef_worker(Oid ruleoid, int prettyFlags);
@@ -462,6 +463,22 @@ Datum
 pg_get_triggerdef(PG_FUNCTION_ARGS)
 {
        Oid                     trigid = PG_GETARG_OID(0);
+
+       PG_RETURN_TEXT_P(string_to_text(pg_get_triggerdef_worker(trigid, false)));
+}
+
+Datum
+pg_get_triggerdef_ext(PG_FUNCTION_ARGS)
+{
+       Oid                     trigid = PG_GETARG_OID(0);
+       bool            pretty = PG_GETARG_BOOL(1);
+
+       PG_RETURN_TEXT_P(string_to_text(pg_get_triggerdef_worker(trigid, pretty)));
+}
+
+static char *
+pg_get_triggerdef_worker(Oid trigid, bool pretty)
+{
        HeapTuple       ht_trig;
        Form_pg_trigger trigrec;
        StringInfoData buf;
@@ -498,9 +515,10 @@ pg_get_triggerdef(PG_FUNCTION_ARGS)
        initStringInfo(&buf);
 
        tgname = NameStr(trigrec->tgname);
-       appendStringInfo(&buf, "CREATE %sTRIGGER %s ",
+       appendStringInfo(&buf, "CREATE %sTRIGGER %s",
                                         trigrec->tgisconstraint ? "CONSTRAINT " : "",
                                         quote_identifier(tgname));
+       appendStringInfoString(&buf, pretty ? "\n    " : " ");
 
        if (TRIGGER_FOR_BEFORE(trigrec->tgtype))
                appendStringInfo(&buf, "BEFORE");
@@ -533,29 +551,33 @@ pg_get_triggerdef(PG_FUNCTION_ARGS)
                else
                        appendStringInfo(&buf, " TRUNCATE");
        }
-       appendStringInfo(&buf, " ON %s ",
+       appendStringInfo(&buf, " ON %s",
                                         generate_relation_name(trigrec->tgrelid, NIL));
+       appendStringInfoString(&buf, pretty ? "\n    " : " ");
 
        if (trigrec->tgisconstraint)
        {
                if (trigrec->tgconstrrelid != InvalidOid)
-                       appendStringInfo(&buf, "FROM %s ",
-                                                        generate_relation_name(trigrec->tgconstrrelid,
-                                                                                                       NIL));
+               {
+                       appendStringInfo(&buf, "FROM %s",
+                                                        generate_relation_name(trigrec->tgconstrrelid, NIL));
+                       appendStringInfoString(&buf, pretty ? "\n    " : " ");
+               }
                if (!trigrec->tgdeferrable)
                        appendStringInfo(&buf, "NOT ");
                appendStringInfo(&buf, "DEFERRABLE INITIALLY ");
                if (trigrec->tginitdeferred)
-                       appendStringInfo(&buf, "DEFERRED ");
+                       appendStringInfo(&buf, "DEFERRED");
                else
-                       appendStringInfo(&buf, "IMMEDIATE ");
-
+                       appendStringInfo(&buf, "IMMEDIATE");
+               appendStringInfoString(&buf, pretty ? "\n    " : " ");
        }
 
        if (TRIGGER_FOR_ROW(trigrec->tgtype))
-               appendStringInfo(&buf, "FOR EACH ROW ");
+               appendStringInfo(&buf, "FOR EACH ROW");
        else
-               appendStringInfo(&buf, "FOR EACH STATEMENT ");
+               appendStringInfo(&buf, "FOR EACH STATEMENT");
+       appendStringInfoString(&buf, pretty ? "\n    " : " ");
 
        appendStringInfo(&buf, "EXECUTE PROCEDURE %s(",
                                         generate_function_name(trigrec->tgfoid, 0,
@@ -594,7 +616,7 @@ pg_get_triggerdef(PG_FUNCTION_ARGS)
 
        heap_close(tgrel, AccessShareLock);
 
-       PG_RETURN_TEXT_P(string_to_text(buf.data));
+       return buf.data;
 }
 
 /* ----------
index d1715eccce8ec2e081715a3cf22b8fba86c3e112..18c1408122643833f60dd1727062001ebe240b28 100644 (file)
@@ -12,7 +12,7 @@
  *     by PostgreSQL
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.549 2009/10/05 19:24:45 tgl Exp $
+ *       $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.550 2009/10/09 21:02:56 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -4282,7 +4282,8 @@ getTriggers(TableInfo tblinfo[], int numTables)
                                i_tgconstrrelname,
                                i_tgenabled,
                                i_tgdeferrable,
-                               i_tginitdeferred;
+                               i_tginitdeferred,
+                               i_tgdef;
        int                     ntups;
 
        for (i = 0; i < numTables; i++)
@@ -4302,7 +4303,19 @@ getTriggers(TableInfo tblinfo[], int numTables)
                selectSourceSchema(tbinfo->dobj.namespace->dobj.name);
 
                resetPQExpBuffer(query);
-               if (g_fout->remoteVersion >= 80300)
+               if (g_fout->remoteVersion >= 80500)
+               {
+                       appendPQExpBuffer(query,
+                                                         "SELECT tgname, "
+                                                         "tgfoid::pg_catalog.regproc AS tgfname, "
+                                                 "pg_catalog.pg_get_triggerdef(oid, true) AS tgdef, "
+                                                         "tgenabled, tableoid, oid "
+                                                         "FROM pg_catalog.pg_trigger t "
+                                                         "WHERE tgrelid = '%u'::pg_catalog.oid "
+                                                         "AND tgconstraint = 0",
+                                                         tbinfo->dobj.catId.oid);
+               }
+               else if (g_fout->remoteVersion >= 80300)
                {
                        /*
                         * We ignore triggers that are tied to a foreign-key constraint
@@ -4389,6 +4402,7 @@ getTriggers(TableInfo tblinfo[], int numTables)
                i_tgenabled = PQfnumber(res, "tgenabled");
                i_tgdeferrable = PQfnumber(res, "tgdeferrable");
                i_tginitdeferred = PQfnumber(res, "tginitdeferred");
+               i_tgdef = PQfnumber(res, "tgdef");
 
                tginfo = (TriggerInfo *) malloc(ntups * sizeof(TriggerInfo));
 
@@ -4401,38 +4415,47 @@ getTriggers(TableInfo tblinfo[], int numTables)
                        tginfo[j].dobj.name = strdup(PQgetvalue(res, j, i_tgname));
                        tginfo[j].dobj.namespace = tbinfo->dobj.namespace;
                        tginfo[j].tgtable = tbinfo;
-                       tginfo[j].tgfname = strdup(PQgetvalue(res, j, i_tgfname));
-                       tginfo[j].tgtype = atoi(PQgetvalue(res, j, i_tgtype));
-                       tginfo[j].tgnargs = atoi(PQgetvalue(res, j, i_tgnargs));
-                       tginfo[j].tgargs = strdup(PQgetvalue(res, j, i_tgargs));
-                       tginfo[j].tgisconstraint = *(PQgetvalue(res, j, i_tgisconstraint)) == 't';
                        tginfo[j].tgenabled = *(PQgetvalue(res, j, i_tgenabled));
-                       tginfo[j].tgdeferrable = *(PQgetvalue(res, j, i_tgdeferrable)) == 't';
-                       tginfo[j].tginitdeferred = *(PQgetvalue(res, j, i_tginitdeferred)) == 't';
-
-                       if (tginfo[j].tgisconstraint)
+                       if (i_tgdef >= 0)
                        {
-                               tginfo[j].tgconstrname = strdup(PQgetvalue(res, j, i_tgconstrname));
-                               tginfo[j].tgconstrrelid = atooid(PQgetvalue(res, j, i_tgconstrrelid));
-                               if (OidIsValid(tginfo[j].tgconstrrelid))
+                               tginfo[j].tgdef = strdup(PQgetvalue(res, j, i_tgdef));
+                       }
+                       else
+                       {
+                               tginfo[j].tgdef = NULL;
+
+                               tginfo[j].tgfname = strdup(PQgetvalue(res, j, i_tgfname));
+                               tginfo[j].tgtype = atoi(PQgetvalue(res, j, i_tgtype));
+                               tginfo[j].tgnargs = atoi(PQgetvalue(res, j, i_tgnargs));
+                               tginfo[j].tgargs = strdup(PQgetvalue(res, j, i_tgargs));
+                               tginfo[j].tgisconstraint = *(PQgetvalue(res, j, i_tgisconstraint)) == 't';
+                               tginfo[j].tgdeferrable = *(PQgetvalue(res, j, i_tgdeferrable)) == 't';
+                               tginfo[j].tginitdeferred = *(PQgetvalue(res, j, i_tginitdeferred)) == 't';
+
+                               if (tginfo[j].tgisconstraint)
                                {
-                                       if (PQgetisnull(res, j, i_tgconstrrelname))
+                                       tginfo[j].tgconstrname = strdup(PQgetvalue(res, j, i_tgconstrname));
+                                       tginfo[j].tgconstrrelid = atooid(PQgetvalue(res, j, i_tgconstrrelid));
+                                       if (OidIsValid(tginfo[j].tgconstrrelid))
                                        {
-                                               write_msg(NULL, "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)\n",
-                                                                 tginfo[j].dobj.name, tbinfo->dobj.name,
-                                                                 tginfo[j].tgconstrrelid);
-                                               exit_nicely();
+                                               if (PQgetisnull(res, j, i_tgconstrrelname))
+                                               {
+                                                       write_msg(NULL, "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)\n",
+                                                                         tginfo[j].dobj.name, tbinfo->dobj.name,
+                                                                         tginfo[j].tgconstrrelid);
+                                                       exit_nicely();
+                                               }
+                                               tginfo[j].tgconstrrelname = strdup(PQgetvalue(res, j, i_tgconstrrelname));
                                        }
-                                       tginfo[j].tgconstrrelname = strdup(PQgetvalue(res, j, i_tgconstrrelname));
+                                       else
+                                               tginfo[j].tgconstrrelname = NULL;
                                }
                                else
+                               {
+                                       tginfo[j].tgconstrname = NULL;
+                                       tginfo[j].tgconstrrelid = InvalidOid;
                                        tginfo[j].tgconstrrelname = NULL;
-                       }
-                       else
-                       {
-                               tginfo[j].tgconstrname = NULL;
-                               tginfo[j].tgconstrrelid = InvalidOid;
-                               tginfo[j].tgconstrrelname = NULL;
+                               }
                        }
                }
 
@@ -11245,113 +11268,120 @@ dumpTrigger(Archive *fout, TriggerInfo *tginfo)
        appendPQExpBuffer(delqry, "%s;\n",
                                          fmtId(tbinfo->dobj.name));
 
-       if (tginfo->tgisconstraint)
-       {
-               appendPQExpBuffer(query, "CREATE CONSTRAINT TRIGGER ");
-               appendPQExpBufferStr(query, fmtId(tginfo->tgconstrname));
-       }
-       else
+       if (tginfo->tgdef)
        {
-               appendPQExpBuffer(query, "CREATE TRIGGER ");
-               appendPQExpBufferStr(query, fmtId(tginfo->dobj.name));
+               appendPQExpBuffer(query, "%s;\n", tginfo->tgdef);
        }
-       appendPQExpBuffer(query, "\n    ");
-
-       /* Trigger type */
-       findx = 0;
-       if (TRIGGER_FOR_BEFORE(tginfo->tgtype))
-               appendPQExpBuffer(query, "BEFORE");
        else
-               appendPQExpBuffer(query, "AFTER");
-       if (TRIGGER_FOR_INSERT(tginfo->tgtype))
-       {
-               appendPQExpBuffer(query, " INSERT");
-               findx++;
-       }
-       if (TRIGGER_FOR_DELETE(tginfo->tgtype))
        {
-               if (findx > 0)
-                       appendPQExpBuffer(query, " OR DELETE");
-               else
-                       appendPQExpBuffer(query, " DELETE");
-               findx++;
-       }
-       if (TRIGGER_FOR_UPDATE(tginfo->tgtype))
-       {
-               if (findx > 0)
-                       appendPQExpBuffer(query, " OR UPDATE");
+               if (tginfo->tgisconstraint)
+               {
+                       appendPQExpBuffer(query, "CREATE CONSTRAINT TRIGGER ");
+                       appendPQExpBufferStr(query, fmtId(tginfo->tgconstrname));
+               }
                else
-                       appendPQExpBuffer(query, " UPDATE");
-       }
-       if (TRIGGER_FOR_TRUNCATE(tginfo->tgtype))
-       {
-               if (findx > 0)
-                       appendPQExpBuffer(query, " OR TRUNCATE");
+               {
+                       appendPQExpBuffer(query, "CREATE TRIGGER ");
+                       appendPQExpBufferStr(query, fmtId(tginfo->dobj.name));
+               }
+               appendPQExpBuffer(query, "\n    ");
+
+               /* Trigger type */
+               findx = 0;
+               if (TRIGGER_FOR_BEFORE(tginfo->tgtype))
+                       appendPQExpBuffer(query, "BEFORE");
                else
-                       appendPQExpBuffer(query, " TRUNCATE");
-       }
-       appendPQExpBuffer(query, " ON %s\n",
-                                         fmtId(tbinfo->dobj.name));
+                       appendPQExpBuffer(query, "AFTER");
+               if (TRIGGER_FOR_INSERT(tginfo->tgtype))
+               {
+                       appendPQExpBuffer(query, " INSERT");
+                       findx++;
+               }
+               if (TRIGGER_FOR_DELETE(tginfo->tgtype))
+               {
+                       if (findx > 0)
+                               appendPQExpBuffer(query, " OR DELETE");
+                       else
+                               appendPQExpBuffer(query, " DELETE");
+                       findx++;
+               }
+               if (TRIGGER_FOR_UPDATE(tginfo->tgtype))
+               {
+                       if (findx > 0)
+                               appendPQExpBuffer(query, " OR UPDATE");
+                       else
+                               appendPQExpBuffer(query, " UPDATE");
+               }
+               if (TRIGGER_FOR_TRUNCATE(tginfo->tgtype))
+               {
+                       if (findx > 0)
+                               appendPQExpBuffer(query, " OR TRUNCATE");
+                       else
+                               appendPQExpBuffer(query, " TRUNCATE");
+               }
+               appendPQExpBuffer(query, " ON %s\n",
+                                                 fmtId(tbinfo->dobj.name));
 
-       if (tginfo->tgisconstraint)
-       {
-               if (OidIsValid(tginfo->tgconstrrelid))
+               if (tginfo->tgisconstraint)
                {
-                       /* If we are using regclass, name is already quoted */
-                       if (g_fout->remoteVersion >= 70300)
-                               appendPQExpBuffer(query, "    FROM %s\n    ",
-                                                                 tginfo->tgconstrrelname);
+                       if (OidIsValid(tginfo->tgconstrrelid))
+                       {
+                               /* If we are using regclass, name is already quoted */
+                               if (g_fout->remoteVersion >= 70300)
+                                       appendPQExpBuffer(query, "    FROM %s\n    ",
+                                                                         tginfo->tgconstrrelname);
+                               else
+                                       appendPQExpBuffer(query, "    FROM %s\n    ",
+                                                                         fmtId(tginfo->tgconstrrelname));
+                       }
+                       if (!tginfo->tgdeferrable)
+                               appendPQExpBuffer(query, "NOT ");
+                       appendPQExpBuffer(query, "DEFERRABLE INITIALLY ");
+                       if (tginfo->tginitdeferred)
+                               appendPQExpBuffer(query, "DEFERRED\n");
                        else
-                               appendPQExpBuffer(query, "    FROM %s\n    ",
-                                                                 fmtId(tginfo->tgconstrrelname));
+                               appendPQExpBuffer(query, "IMMEDIATE\n");
                }
-               if (!tginfo->tgdeferrable)
-                       appendPQExpBuffer(query, "NOT ");
-               appendPQExpBuffer(query, "DEFERRABLE INITIALLY ");
-               if (tginfo->tginitdeferred)
-                       appendPQExpBuffer(query, "DEFERRED\n");
+
+               if (TRIGGER_FOR_ROW(tginfo->tgtype))
+                       appendPQExpBuffer(query, "    FOR EACH ROW\n    ");
                else
-                       appendPQExpBuffer(query, "IMMEDIATE\n");
-       }
+                       appendPQExpBuffer(query, "    FOR EACH STATEMENT\n    ");
 
-       if (TRIGGER_FOR_ROW(tginfo->tgtype))
-               appendPQExpBuffer(query, "    FOR EACH ROW\n    ");
-       else
-               appendPQExpBuffer(query, "    FOR EACH STATEMENT\n    ");
+               /* In 7.3, result of regproc is already quoted */
+               if (g_fout->remoteVersion >= 70300)
+                       appendPQExpBuffer(query, "EXECUTE PROCEDURE %s(",
+                                                         tginfo->tgfname);
+               else
+                       appendPQExpBuffer(query, "EXECUTE PROCEDURE %s(",
+                                                         fmtId(tginfo->tgfname));
 
-       /* In 7.3, result of regproc is already quoted */
-       if (g_fout->remoteVersion >= 70300)
-               appendPQExpBuffer(query, "EXECUTE PROCEDURE %s(",
-                                                 tginfo->tgfname);
-       else
-               appendPQExpBuffer(query, "EXECUTE PROCEDURE %s(",
-                                                 fmtId(tginfo->tgfname));
+               tgargs = (char *) PQunescapeBytea((unsigned char *) tginfo->tgargs,
+                                                                                 &lentgargs);
+               p = tgargs;
+               for (findx = 0; findx < tginfo->tgnargs; findx++)
+               {
+                       /* find the embedded null that terminates this trigger argument */
+                       size_t  tlen = strlen(p);
 
-       tgargs = (char *) PQunescapeBytea((unsigned char *) tginfo->tgargs,
-                                                                         &lentgargs);
-       p = tgargs;
-       for (findx = 0; findx < tginfo->tgnargs; findx++)
-       {
-               /* find the embedded null that terminates this trigger argument */
-               size_t  tlen = strlen(p);
+                       if (p + tlen >= tgargs + lentgargs)
+                       {
+                               /* hm, not found before end of bytea value... */
+                               write_msg(NULL, "invalid argument string (%s) for trigger \"%s\" on table \"%s\"\n",
+                                                 tginfo->tgargs,
+                                                 tginfo->dobj.name,
+                                                 tbinfo->dobj.name);
+                               exit_nicely();
+                       }
 
-               if (p + tlen >= tgargs + lentgargs)
-               {
-                       /* hm, not found before end of bytea value... */
-                       write_msg(NULL, "invalid argument string (%s) for trigger \"%s\" on table \"%s\"\n",
-                                         tginfo->tgargs,
-                                         tginfo->dobj.name,
-                                         tbinfo->dobj.name);
-                       exit_nicely();
+                       if (findx > 0)
+                               appendPQExpBuffer(query, ", ");
+                       appendStringLiteralAH(query, p, fout);
+                       p += tlen + 1;
                }
-
-               if (findx > 0)
-                       appendPQExpBuffer(query, ", ");
-               appendStringLiteralAH(query, p, fout);
-               p += tlen + 1;
+               free(tgargs);
+               appendPQExpBuffer(query, ");\n");
        }
-       free(tgargs);
-       appendPQExpBuffer(query, ");\n");
 
        if (tginfo->tgenabled != 't' && tginfo->tgenabled != 'O')
        {
index 5b2c3d1e6bffcb8e17add646e7b4b9e85b8513a1..b6ee4bb2fc562c64ebc132f2b770ec33327bec9f 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.h,v 1.158 2009/10/05 19:24:46 tgl Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.h,v 1.159 2009/10/09 21:02:56 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -328,6 +328,7 @@ typedef struct _triggerInfo
        char            tgenabled;
        bool            tgdeferrable;
        bool            tginitdeferred;
+       char       *tgdef;
 } TriggerInfo;
 
 /*
index 8959997ea96d6ea1ccd9e24c279de501fec1c0b1..d7c2479158484dd3b8dc6fbe9edfcb4dd2efb550 100644 (file)
@@ -37,7 +37,7 @@
  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.543 2009/10/08 02:39:23 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.544 2009/10/09 21:02:56 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -53,6 +53,6 @@
  */
 
 /*                                                     yyyymmddN */
-#define CATALOG_VERSION_NO     200910072
+#define CATALOG_VERSION_NO     200910101
 
 #endif
index 0ea894854b705ea6bb9e5888353d8b7b402b3326..cd249d841b849bb0b5161a086aaf869b8d3ee184 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.551 2009/09/26 22:42:02 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.552 2009/10/09 21:02:56 petere Exp $
  *
  * NOTES
  *       The script catalog/genbki.sh reads this file and generates .bki
@@ -4083,6 +4083,8 @@ DATA(insert OID = 2599 (  pg_timezone_abbrevs     PGNSP PGUID 12 1 1000 0 f f f t t
 DESCR("get the available time zone abbreviations");
 DATA(insert OID = 2856 (  pg_timezone_names            PGNSP PGUID 12 1 1000 0 f f f t t s 0 0 2249 "" "{25,25,1186,16}" "{o,o,o,o}" "{name,abbrev,utc_offset,is_dst}" _null_ pg_timezone_names _null_ _null_ _null_ ));
 DESCR("get the available time zone names");
+DATA(insert OID = 2730 (  pg_get_triggerdef    PGNSP PGUID 12 1 0 0 f f f t f s 2 0 25 "26 16" _null_ _null_ _null_ _null_ pg_get_triggerdef_ext _null_ _null_ _null_ ));
+DESCR("trigger description with pretty-print option");
 
 /* non-persistent series generator */
 DATA(insert OID = 1066 (  generate_series PGNSP PGUID 12 1 1000 0 f f f t t i 3 0 23 "23 23 23" _null_ _null_ _null_ _null_ generate_series_step_int4 _null_ _null_ _null_ ));
index bcf027ccee9d5419bfcf148b4a01898f2e23484d..d77f4b6ecd913d321b0e8121db865478d6218064 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/utils/builtins.h,v 1.339 2009/09/09 19:00:09 petere Exp $
+ * $PostgreSQL: pgsql/src/include/utils/builtins.h,v 1.340 2009/10/09 21:02:56 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -590,6 +590,7 @@ extern Datum pg_get_indexdef_ext(PG_FUNCTION_ARGS);
 extern char *pg_get_indexdef_string(Oid indexrelid);
 extern char *pg_get_indexdef_columns(Oid indexrelid, bool pretty);
 extern Datum pg_get_triggerdef(PG_FUNCTION_ARGS);
+extern Datum pg_get_triggerdef_ext(PG_FUNCTION_ARGS);
 extern Datum pg_get_constraintdef(PG_FUNCTION_ARGS);
 extern Datum pg_get_constraintdef_ext(PG_FUNCTION_ARGS);
 extern char *pg_get_constraintdef_string(Oid constraintId);