diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2009-07-21 21:46:10 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2009-07-21 21:46:10 +0000 |
commit | a5375bf90304d0cc39b6ca9d5bb07c20ff51f2b3 (patch) | |
tree | 1a079ecf4309340e9d8792a81aafd88ee54b299f /src/bin/pg_dump/pg_backup_null.c | |
parent | 5dedce6770557a6e096429ab06f8e3cac14164b6 (diff) | |
download | postgresql-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.c | 13 |
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"); } /* |