The large object implementation breaks large objects up into "chunks" and stores the chunks in rows in the database. A B-tree index guarantees fast searches for the correct chunk number when doing random access reads and writes.
As of PostgreSQL 9.0, large objects have an owner and a set of access permissions, which can be managed using GRANT and REVOKE. For compatibility with prior releases, see lo_compat_privileges. SELECT privileges are required to read a large object, and UPDATE privileges are required to write to or truncate it. Only the large object owner (or the database superuser) can unlink, comment on, or change the owner of a large object.