@ -6,31 +6,46 @@
\getenv abs_builddir PG_ABS_BUILDDIR
-- ensure consistent test output regardless of the default bytea format
SET bytea_output TO escape;
-- Test ALTER LARGE OBJECT OWNER, GRANT, COMMENT
CREATE ROLE regress_lo_user;
SELECT lo_create(42);
lo_create
-----------
42
(1 row)
ALTER LARGE OBJECT 42 OWNER TO regress_lo_user;
GRANT SELECT ON LARGE OBJECT 42 TO public;
COMMENT ON LARGE OBJECT 42 IS 'the ultimate answer';
-- Test psql's \lo_list et al (we assume no other LOs exist yet)
\lo_list
Large objects
ID | Owner | Description
----+-----------------+---------------------
42 | regress_lo_user | the ultimate answer
(1 row)
\lo_list+
Large objects
ID | Owner | Access privileges | Description
----+-----------------+------------------------------------+---------------------
42 | regress_lo_user | regress_lo_user=rw/regress_lo_user+| the ultimate answer
| | =r/regress_lo_user |
(1 row)
\lo_unlink 42
\dl
Large objects
ID | Owner | Description
----+-------+-------------
(0 rows)
-- Load a file
CREATE TABLE lotest_stash_values (loid oid, fd integer);
-- lo_creat(mode integer) returns oid
-- The mode arg to lo_creat is unused, some vestigal holdover from ancient times
-- returns the large object id
INSERT INTO lotest_stash_values (loid) SELECT lo_creat(42);
-- Test ALTER LARGE OBJECT
CREATE ROLE regress_lo_user;
DO $$
BEGIN
EXECUTE 'ALTER LARGE OBJECT ' || (select loid from lotest_stash_values)
|| ' OWNER TO regress_lo_user';
END
$$;
SELECT
rol.rolname
FROM
lotest_stash_values s
JOIN pg_largeobject_metadata lo ON s.loid = lo.oid
JOIN pg_authid rol ON lo.lomowner = rol.oid;
rolname
-----------------
regress_lo_user
(1 row)
-- NOTE: large objects require transactions
BEGIN;
-- lo_open(lobjId oid, mode integer) returns integer