1515 *
1616 *
1717 * IDENTIFICATION
18- *$PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.172 2009/06/11 14:49:07 momjian Exp $
18+ *$PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.173 2009/07/21 21:46:10 tgl Exp $
1919 *
2020 *-------------------------------------------------------------------------
2121 */
@@ -895,7 +895,7 @@ EndRestoreBlobs(ArchiveHandle *AH)
895895 * Called by a format handler to initiate restoration of a blob
896896 */
897897void
898- StartRestoreBlob (ArchiveHandle * AH ,Oid oid )
898+ StartRestoreBlob (ArchiveHandle * AH ,Oid oid , bool drop )
899899{
900900Oid loOid ;
901901
@@ -906,6 +906,10 @@ StartRestoreBlob(ArchiveHandle *AH, Oid oid)
906906
907907ahlog (AH ,2 ,"restoring large object with OID %u\n" ,oid );
908908
909+ if (drop )
910+ ahprintf (AH ,"SELECT CASE WHEN EXISTS(SELECT 1 FROM pg_catalog.pg_largeobject WHERE loid = '%u') THEN pg_catalog.lo_unlink('%u') END;\n" ,
911+ oid ,oid );
912+
909913if (AH -> connection )
910914{
911915loOid = lo_create (AH -> connection ,oid );
@@ -919,7 +923,8 @@ StartRestoreBlob(ArchiveHandle *AH, Oid oid)
919923}
920924else
921925{
922- ahprintf (AH ,"SELECT lo_open(lo_create(%u), %d);\n" ,oid ,INV_WRITE );
926+ ahprintf (AH ,"SELECT pg_catalog.lo_open(pg_catalog.lo_create('%u'), %d);\n" ,
927+ oid ,INV_WRITE );
923928}
924929
925930AH -> writingBlob = 1 ;
@@ -943,7 +948,7 @@ EndRestoreBlob(ArchiveHandle *AH, Oid oid)
943948}
944949else
945950{
946- ahprintf (AH ,"SELECT lo_close(0);\n\n" );
951+ ahprintf (AH ,"SELECTpg_catalog. lo_close(0);\n\n" );
947952}
948953}
949954
@@ -1254,7 +1259,7 @@ dump_lo_buf(ArchiveHandle *AH)
12541259
12551260/* Hack: turn off writingBlob so ahwrite doesn't recurse to here */
12561261AH -> writingBlob = 0 ;
1257- ahprintf (AH ,"SELECT lowrite(0, '%s');\n" ,str );
1262+ ahprintf (AH ,"SELECTpg_catalog. lowrite(0, '%s');\n" ,str );
12581263AH -> writingBlob = 1 ;
12591264
12601265free (str );