Use pg_get_triggerdef in pg_dump
authorPeter Eisentraut
Fri, 9 Oct 2009 21:02:56 +0000 (21:02 +0000)
committerPeter Eisentraut
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 

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 @@
-
+
 
  
   Functions and Operators
@@ -12369,6 +12369,11 @@ SELECT pg_type_is_visible('myschema.widget'::regtype);
        text
        get CREATE [ CONSTRAINT ] TRIGGER command for trigger
       
+      
+       pg_get_triggerdef(trigger_oidpretty_bool)
+       text
+       get CREATE [ CONSTRAINT ] TRIGGER command for trigger
+      
       
        pg_get_userbyid(role_oid)
        name
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);