diff options
Diffstat (limited to 'src/backend/catalog/pg_largeobject.c')
| -rw-r--r-- | src/backend/catalog/pg_largeobject.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/backend/catalog/pg_largeobject.c b/src/backend/catalog/pg_largeobject.c index a876473976..d5cde9ecf1 100644 --- a/src/backend/catalog/pg_largeobject.c +++ b/src/backend/catalog/pg_largeobject.c @@ -18,6 +18,7 @@ #include "access/heapam.h" #include "access/htup_details.h" #include "access/sysattr.h" +#include "catalog/catalog.h" #include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/pg_largeobject.h" @@ -54,17 +55,22 @@ LargeObjectCreate(Oid loid) memset(values, 0, sizeof(values)); memset(nulls, false, sizeof(nulls)); + if (OidIsValid(loid)) + loid_new = loid; + else + loid_new = GetNewOidWithIndex(pg_lo_meta, + LargeObjectMetadataOidIndexId, + Anum_pg_largeobject_metadata_oid); + + values[Anum_pg_largeobject_metadata_oid - 1] = ObjectIdGetDatum(loid_new); values[Anum_pg_largeobject_metadata_lomowner - 1] = ObjectIdGetDatum(GetUserId()); nulls[Anum_pg_largeobject_metadata_lomacl - 1] = true; ntup = heap_form_tuple(RelationGetDescr(pg_lo_meta), values, nulls); - if (OidIsValid(loid)) - HeapTupleSetOid(ntup, loid); - loid_new = CatalogTupleInsert(pg_lo_meta, ntup); - Assert(!OidIsValid(loid) || loid == loid_new); + CatalogTupleInsert(pg_lo_meta, ntup); heap_freetuple(ntup); @@ -96,7 +102,7 @@ LargeObjectDrop(Oid loid) * Delete an entry from pg_largeobject_metadata */ ScanKeyInit(&skey[0], - ObjectIdAttributeNumber, + Anum_pg_largeobject_metadata_oid, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(loid)); @@ -159,7 +165,7 @@ LargeObjectExists(Oid loid) bool retval = false; ScanKeyInit(&skey[0], - ObjectIdAttributeNumber, + Anum_pg_largeobject_metadata_oid, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(loid)); |
