aboutsummaryrefslogtreecommitdiff
path: root/src/bin/pg_dump/pg_backup_null.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2009-07-21 21:46:10 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2009-07-21 21:46:10 +0000
commita5375bf90304d0cc39b6ca9d5bb07c20ff51f2b3 (patch)
tree1a079ecf4309340e9d8792a81aafd88ee54b299f /src/bin/pg_dump/pg_backup_null.c
parent5dedce6770557a6e096429ab06f8e3cac14164b6 (diff)
downloadpostgresql-a5375bf90304d0cc39b6ca9d5bb07c20ff51f2b3.tar.gz
postgresql-a5375bf90304d0cc39b6ca9d5bb07c20ff51f2b3.zip
Make pg_dump/pg_restore --clean options drop large objects too.
In passing, make invocations of lo_xxx functions a bit more schema-safe. Itagaki Takahiro
Diffstat (limited to 'src/bin/pg_dump/pg_backup_null.c')
-rw-r--r--src/bin/pg_dump/pg_backup_null.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/bin/pg_dump/pg_backup_null.c b/src/bin/pg_dump/pg_backup_null.c
index abff1138fc2..a89b012e6c0 100644
--- a/src/bin/pg_dump/pg_backup_null.c
+++ b/src/bin/pg_dump/pg_backup_null.c
@@ -17,7 +17,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_null.c,v 1.20 2009/02/02 20:07:37 adunstan Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_null.c,v 1.21 2009/07/21 21:46:10 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -108,7 +108,7 @@ _WriteBlobData(ArchiveHandle *AH, const void *data, size_t dLen)
if (!str)
die_horribly(AH, NULL, "out of memory\n");
- ahprintf(AH, "SELECT lowrite(0, '%s');\n", str);
+ ahprintf(AH, "SELECT pg_catalog.lowrite(0, '%s');\n", str);
free(str);
}
@@ -149,7 +149,12 @@ _StartBlob(ArchiveHandle *AH, TocEntry *te, Oid oid)
if (oid == 0)
die_horribly(AH, NULL, "invalid OID for large object\n");
- ahprintf(AH, "SELECT lo_open(lo_create(%u), %d);\n", oid, INV_WRITE);
+ if (AH->ropt->dropSchema)
+ ahprintf(AH, "SELECT CASE WHEN EXISTS(SELECT 1 FROM pg_catalog.pg_largeobject WHERE loid = '%u') THEN pg_catalog.lo_unlink('%u') END;\n",
+ oid, oid);
+
+ ahprintf(AH, "SELECT pg_catalog.lo_open(pg_catalog.lo_create('%u'), %d);\n",
+ oid, INV_WRITE);
AH->WriteDataPtr = _WriteBlobData;
}
@@ -164,7 +169,7 @@ _EndBlob(ArchiveHandle *AH, TocEntry *te, Oid oid)
{
AH->WriteDataPtr = _WriteData;
- ahprintf(AH, "SELECT lo_close(0);\n\n");
+ ahprintf(AH, "SELECT pg_catalog.lo_close(0);\n\n");
}
/*