diff options
author | Itagaki Takahiro <itagaki.takahiro@gmail.com> | 2009-12-14 00:39:11 +0000 |
---|---|---|
committer | Itagaki Takahiro <itagaki.takahiro@gmail.com> | 2009-12-14 00:39:11 +0000 |
commit | 84f910a7076e09e551bf69e0972473ec15d33c79 (patch) | |
tree | 7ce85524e7d24091581b2a0ce6309422d0330811 /src/bin/pg_dump/pg_backup_db.c | |
parent | 0182d6f646997e486f56f847001ff74694bdd7da (diff) | |
download | postgresql-84f910a7076e09e551bf69e0972473ec15d33c79.tar.gz postgresql-84f910a7076e09e551bf69e0972473ec15d33c79.zip |
Additional fixes for large object access control.
Use pg_largeobject_metadata.oid instead of pg_largeobject.loid
to enumerate existing large objects in pg_dump, pg_restore, and
contrib modules.
Diffstat (limited to 'src/bin/pg_dump/pg_backup_db.c')
-rw-r--r-- | src/bin/pg_dump/pg_backup_db.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/bin/pg_dump/pg_backup_db.c b/src/bin/pg_dump/pg_backup_db.c index 836b02cb936..1d72d6dd7e2 100644 --- a/src/bin/pg_dump/pg_backup_db.c +++ b/src/bin/pg_dump/pg_backup_db.c @@ -5,7 +5,7 @@ * Implements the basic DB functions used by the archiver. * * IDENTIFICATION - * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_db.c,v 1.84 2009/06/11 14:49:07 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_db.c,v 1.85 2009/12/14 00:39:11 itagaki Exp $ * *------------------------------------------------------------------------- */ @@ -652,6 +652,23 @@ CommitTransaction(ArchiveHandle *AH) ExecuteSqlCommand(AH, "COMMIT", "could not commit database transaction"); } +void +DropBlobIfExists(ArchiveHandle *AH, Oid oid) +{ + /* Call lo_unlink only if exists to avoid not-found error. */ + if (PQserverVersion(AH->connection) >= 80500) + { + ahprintf(AH, "SELECT pg_catalog.lo_unlink(oid) " + "FROM pg_catalog.pg_largeobject_metadata " + "WHERE oid = %u;\n", oid); + } + else + { + 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); + } +} + static bool _isIdentChar(unsigned char c) { |