diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 2b111bdce5b4b4b26e9fb6735ac70108df5a6792..dc2bdd83d5bd3775457d4f8472372119d1ea00f0 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -22,7 +22,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.306 2002/11/08 17:37:52 tgl Exp $ + * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.307 2002/11/15 02:52:18 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -3157,8 +3157,10 @@ dumpOneDomain(Archive *fout, TypeInfo *tinfo) PQExpBuffer q = createPQExpBuffer(); PQExpBuffer delq = createPQExpBuffer(); PQExpBuffer query = createPQExpBuffer(); + PQExpBuffer chkquery = createPQExpBuffer(); PGresult *res; int ntups; + int i; char *typnotnull; char *typdefn; char *typdefault; @@ -3228,6 +3230,34 @@ dumpOneDomain(Archive *fout, TypeInfo *tinfo) if (typdefault) appendPQExpBuffer(q, " DEFAULT %s", typdefault); + /* Fetch and process CHECK Constraints */ + appendPQExpBuffer(chkquery, "SELECT conname, consrc " + "FROM pg_catalog.pg_constraint " + "WHERE contypid = '%s'::pg_catalog.oid", + tinfo->oid); + + res = PQexec(g_conn, chkquery->data); + if (!res || + PQresultStatus(res) != PGRES_TUPLES_OK) + { + write_msg(NULL, "query to obtain domain constraint information failed: %s", + PQerrorMessage(g_conn)); + exit_nicely(); + } + + /* Expecting a single result only */ + ntups = PQntuples(res); + for (i = 0; i < ntups; i++) + { + char *conname; + char *consrc; + + conname = PQgetvalue(res, i, PQfnumber(res, "conname")); + consrc = PQgetvalue(res, i, PQfnumber(res, "consrc")); + + appendPQExpBuffer(q, " CONSTRAINT %s CHECK %s", fmtId(conname), consrc); + } + appendPQExpBuffer(q, ";\n"); (*deps)[depIdx++] = NULL; /* End of List */