selectSourceSchema(fout, "pg_catalog");
/*
- * Find all user-defined functions. Normally we can exclude functions in
- * pg_catalog, which is worth doing since there are several thousand of
- * 'em. However, there are some extensions that create functions in
- * pg_catalog. In normal dumps we can still ignore those --- but in
- * binary-upgrade mode, we must dump the member objects of the extension,
- * so be sure to fetch any such functions.
+ * Find all interesting functions. This is a bit complicated:
*
- * Also, in 9.2 and up, exclude functions that are internally dependent on
- * something else, since presumably those will be created as a result of
- * creating the something else. This currently only acts to suppress
- * constructor functions for range types. Note that this is OK only
- * because the constructors don't have any dependencies the range type
- * doesn't have; otherwise we might not get creation ordering correct.
+ * 1. Always exclude aggregates; those are handled elsewhere.
+ *
+ * 2. Always exclude functions that are internally dependent on something
+ * else, since presumably those will be created as a result of creating
+ * the something else. This currently acts only to suppress constructor
+ * functions for range types (so we only need it in 9.2 and up). Note
+ * this is OK only because the constructors don't have any dependencies
+ * the range type doesn't have; otherwise we might not get creation
+ * ordering correct.
+ *
+ * 3. Otherwise, we normally exclude functions in pg_catalog. However, if
+ * they're members of extensions and we are in binary-upgrade mode then
+ * include them, since we want to dump extension members individually in
+ * that mode.
*/
if (fout->remoteVersion >= 70300)
"pronamespace, "
"(%s proowner) AS rolname "
"FROM pg_proc p "
- "WHERE NOT proisagg AND ("
- "pronamespace != "
- "(SELECT oid FROM pg_namespace "
- "WHERE nspname = 'pg_catalog')",
+ "WHERE NOT proisagg",
username_subquery);
if (fout->remoteVersion >= 90200)
appendPQExpBuffer(query,
"\n AND NOT EXISTS (SELECT 1 FROM pg_depend "
"WHERE classid = 'pg_proc'::regclass AND "
"objid = p.oid AND deptype = 'i')");
+ appendPQExpBuffer(query,
+ "\n AND ("
+ "\n pronamespace != "
+ "(SELECT oid FROM pg_namespace "
+ "WHERE nspname = 'pg_catalog')");
if (binary_upgrade && fout->remoteVersion >= 90100)
appendPQExpBuffer(query,
"\n OR EXISTS(SELECT 1 FROM pg_depend WHERE "