Tom Lane wrote:
"Vincze, Tamas" <[email protected]> writes:
+ * Note that it may still select BLOBs that have no comment if
a pg_description row's objoid
+ * matches a BLOB's loid, but references an object contained in
a different system catalog,
... seems like that would be easy to fix ...
Yes, it wasn't that hard. The revised patch is attached.
Originally I didn't want to add more dependencies on the system
catalogs. Also, I've left the DECLARE statements untouched for
pre-v7.2 backends, so the NULL check on the comment is still
needed for those cases and if the description itself is NULL.
Regards,
Tamas
--- postgresql-8.3.7/src/bin/pg_dump/pg_dump.c.orig 2009-03-31
15:47:28.000000000 -0400
+++ postgresql-8.3.7/src/bin/pg_dump/pg_dump.c 2009-04-01 14:07:55.000000000
-0400
@@ -1759,7 +1759,18 @@
/* Cursor to get all BLOB comments */
if (AH->remoteVersion >= 70200)
- blobQry = "DECLARE blobcmt CURSOR FOR SELECT loid,
obj_description(loid, 'pg_largeobject') FROM (SELECT DISTINCT loid FROM
pg_largeobject) ss";
+ /* Get comments for BLOBs that have a matching pg_description
row. When there are many
+ * (millions) of BLOBs without comments this avoids fetching
and then ignoring them,
+ * potentionally saving hours of backup time. */
+ blobQry = "DECLARE blobcmt CURSOR FOR SELECT loid,
obj_description(loid, 'pg_largeobject') FROM ("
+ "SELECT DISTINCT loid FROM pg_description JOIN
pg_largeobject "
+ "ON (pg_description.objoid =
pg_largeobject.loid) "
+ "WHERE classoid = ("
+ "SELECT oid FROM pg_class WHERE relname
= 'pg_largeobject' AND relnamespace = ("
+ "SELECT oid FROM pg_namespace
WHERE nspname='pg_catalog'"
+ ")"
+ ") AND objsubid = 0"
+ ") ss";
else if (AH->remoteVersion >= 70100)
blobQry = "DECLARE blobcmt CURSOR FOR SELECT loid,
obj_description(loid) FROM (SELECT DISTINCT loid FROM pg_largeobject) ss";
else
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers