65 lines
1.4 KiB
SQL
65 lines
1.4 KiB
SQL
--
|
|
-- Install the plperl and plperlu extensions
|
|
--
|
|
|
|
-- Before going ahead with the to-be-tested installations, verify that
|
|
-- a non-superuser is allowed to install plperl (but not plperlu) when
|
|
-- suitable permissions have been granted.
|
|
|
|
CREATE USER regress_user1;
|
|
CREATE USER regress_user2;
|
|
|
|
SET ROLE regress_user1;
|
|
|
|
CREATE EXTENSION plperl; -- fail
|
|
CREATE EXTENSION plperlu; -- fail
|
|
|
|
RESET ROLE;
|
|
|
|
DO $$
|
|
begin
|
|
execute format('grant create on database %I to regress_user1',
|
|
current_database());
|
|
end;
|
|
$$;
|
|
|
|
SET ROLE regress_user1;
|
|
|
|
CREATE EXTENSION plperl;
|
|
CREATE EXTENSION plperlu; -- fail
|
|
|
|
CREATE FUNCTION foo1() returns int language plperl as '1;';
|
|
SELECT foo1();
|
|
|
|
-- Should be able to change privileges on the language
|
|
revoke all on language plperl from public;
|
|
|
|
SET ROLE regress_user2;
|
|
|
|
CREATE FUNCTION foo2() returns int language plperl as '2;'; -- fail
|
|
|
|
SET ROLE regress_user1;
|
|
|
|
grant usage on language plperl to regress_user2;
|
|
|
|
SET ROLE regress_user2;
|
|
|
|
CREATE FUNCTION foo2() returns int language plperl as '2;';
|
|
SELECT foo2();
|
|
|
|
SET ROLE regress_user1;
|
|
|
|
-- Should be able to drop the extension, but not the language per se
|
|
DROP LANGUAGE plperl CASCADE;
|
|
DROP EXTENSION plperl CASCADE;
|
|
|
|
-- Clean up
|
|
RESET ROLE;
|
|
DROP OWNED BY regress_user1;
|
|
DROP USER regress_user1;
|
|
DROP USER regress_user2;
|
|
|
|
-- Now install the versions that will be used by subsequent test scripts.
|
|
CREATE EXTENSION plperl;
|
|
CREATE EXTENSION plperlu;
|