diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 18dd71e364f7415697bfc83a198687a4ee019ec5..52ba1c9d704614ed47af944797d81dae6fb70a89 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -25,7 +25,7 @@
  *	http://archives.postgresql.org/pgsql-bugs/2010-02/msg00187.php
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.577 2010/03/03 23:38:44 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.578 2010/03/11 04:36:43 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -3956,6 +3956,11 @@ getIndexes(TableInfo tblinfo[], int numTables)
 		 * that is related by an internal dependency link to the index. If we
 		 * find one, create a CONSTRAINT entry linked to the INDEX entry.  We
 		 * assume an index won't have more than one internal dependency.
+		 *
+		 * As of 9.0 we don't need to look at pg_depend but can check for
+		 * a match to pg_constraint.conindid.  The check on conrelid is
+		 * redundant but useful because that column is indexed while conindid
+		 * is not.
 		 */
 		resetPQExpBuffer(query);
 		if (g_fout->remoteVersion >= 90000)
@@ -3975,13 +3980,10 @@ getIndexes(TableInfo tblinfo[], int numTables)
 							"array_to_string(t.reloptions, ', ') AS options "
 							  "FROM pg_catalog.pg_index i "
 					  "JOIN pg_catalog.pg_class t ON (t.oid = i.indexrelid) "
-							  "LEFT JOIN pg_catalog.pg_depend d "
-							  "ON (d.classid = t.tableoid "
-							  "AND d.objid = t.oid "
-							  "AND d.deptype = 'i') "
 							  "LEFT JOIN pg_catalog.pg_constraint c "
-							  "ON (d.refclassid = c.tableoid "
-							  "AND d.refobjid = c.oid) "
+							  "ON (i.indrelid = c.conrelid AND "
+							  "i.indexrelid = c.conindid AND "
+							  "c.contype IN ('p','u','x')) "
 							  "WHERE i.indrelid = '%u'::pg_catalog.oid "
 							  "ORDER BY indexname",
 							  tbinfo->dobj.catId.oid);
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index a6fa883c47bfb70ef9989885a0f3e372165bfb79..d1610e2139365e99a05084a51d3841dae1773e67 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -8,7 +8,7 @@
  *
  * Copyright (c) 2000-2010, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.239 2010/03/01 20:55:45 heikki Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.240 2010/03/11 04:36:43 tgl Exp $
  */
 #include "postgres_fe.h"
 
@@ -1417,21 +1417,17 @@ describeOneTableDetails(const char *schemaname,
 		if (pset.sversion >= 90000)
 			appendPQExpBuffer(&buf,
 							  "  (NOT i.indimmediate) AND "
-							  "EXISTS (SELECT 1 FROM pg_catalog.pg_depend d, "
-							  "pg_catalog.pg_constraint con WHERE "
-				"d.classid = 'pg_catalog.pg_class'::pg_catalog.regclass AND "
-							  "d.objid = i.indexrelid AND "
-							  "d.refclassid = 'pg_catalog.pg_constraint'::pg_catalog.regclass AND "
-							  "d.refobjid = con.oid AND d.deptype = 'i' AND "
-							  "con.condeferrable) AS condeferrable,\n"
+							  "EXISTS (SELECT 1 FROM pg_catalog.pg_constraint "
+							  "WHERE conrelid = i.indrelid AND "
+							  "conindid = i.indexrelid AND "
+							  "contype IN ('p','u','x') AND "
+							  "condeferrable) AS condeferrable,\n"
 							  "  (NOT i.indimmediate) AND "
-							  "EXISTS (SELECT 1 FROM pg_catalog.pg_depend d, "
-							  "pg_catalog.pg_constraint con WHERE "
-				"d.classid = 'pg_catalog.pg_class'::pg_catalog.regclass AND "
-							  "d.objid = i.indexrelid AND "
-							  "d.refclassid = 'pg_catalog.pg_constraint'::pg_catalog.regclass AND "
-							  "d.refobjid = con.oid AND d.deptype = 'i' AND "
-							  "con.condeferred) AS condeferred,\n");
+							  "EXISTS (SELECT 1 FROM pg_catalog.pg_constraint "
+							  "WHERE conrelid = i.indrelid AND "
+							  "conindid = i.indexrelid AND "
+							  "contype IN ('p','u','x') AND "
+							  "condeferred) AS condeferred,\n");
 		else
 			appendPQExpBuffer(&buf,
 						"  false AS condeferrable, false AS condeferred,\n");
@@ -1553,21 +1549,17 @@ describeOneTableDetails(const char *schemaname,
 			if (pset.sversion >= 90000)
 				appendPQExpBuffer(&buf,
 								  ",\n  (NOT i.indimmediate) AND "
-							 "EXISTS (SELECT 1 FROM pg_catalog.pg_depend d, "
-								  "pg_catalog.pg_constraint con WHERE "
-				"d.classid = 'pg_catalog.pg_class'::pg_catalog.regclass AND "
-								  "d.objid = i.indexrelid AND "
-								  "d.refclassid = 'pg_catalog.pg_constraint'::pg_catalog.regclass AND "
-							  "d.refobjid = con.oid AND d.deptype = 'i' AND "
-								  "con.condeferrable) AS condeferrable"
+								  "EXISTS (SELECT 1 FROM pg_catalog.pg_constraint "
+								  "WHERE conrelid = i.indrelid AND "
+								  "conindid = i.indexrelid AND "
+								  "contype IN ('p','u','x') AND "
+								  "condeferrable) AS condeferrable"
 								  ",\n  (NOT i.indimmediate) AND "
-							 "EXISTS (SELECT 1 FROM pg_catalog.pg_depend d, "
-								  "pg_catalog.pg_constraint con WHERE "
-				"d.classid = 'pg_catalog.pg_class'::pg_catalog.regclass AND "
-								  "d.objid = i.indexrelid AND "
-								  "d.refclassid = 'pg_catalog.pg_constraint'::pg_catalog.regclass AND "
-							  "d.refobjid = con.oid AND d.deptype = 'i' AND "
-								  "con.condeferred) AS condeferred");
+								  "EXISTS (SELECT 1 FROM pg_catalog.pg_constraint "
+								  "WHERE conrelid = i.indrelid AND "
+								  "conindid = i.indexrelid AND "
+								  "contype IN ('p','u','x') AND "
+								  "condeferred) AS condeferred");
 			else
 				appendPQExpBuffer(&buf, ", false AS condeferrable, false AS condeferred");
 			if (pset.sversion >= 80000)