diff options
Diffstat (limited to 'src/pl/plperl/sql/plperl_setup.sql')
-rw-r--r-- | src/pl/plperl/sql/plperl_setup.sql | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/pl/plperl/sql/plperl_setup.sql b/src/pl/plperl/sql/plperl_setup.sql new file mode 100644 index 0000000..0eac915 --- /dev/null +++ b/src/pl/plperl/sql/plperl_setup.sql @@ -0,0 +1,73 @@ +-- +-- 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_plperl_user1; +CREATE USER regress_plperl_user2; + +SET ROLE regress_plperl_user1; + +CREATE EXTENSION plperl; -- fail +CREATE EXTENSION plperlu; -- fail + +RESET ROLE; + +DO $$ +begin + execute format('grant create on database %I to regress_plperl_user1', + current_database()); +end; +$$; + +SET ROLE regress_plperl_user1; + +CREATE EXTENSION plperl; +CREATE EXTENSION plperlu; -- fail +CREATE SCHEMA plperl_setup_scratch; +SET search_path = plperl_setup_scratch; +GRANT ALL ON SCHEMA plperl_setup_scratch TO regress_plperl_user2; + +CREATE FUNCTION foo1() returns int language plperl as '1;'; +SELECT foo1(); + +-- Must reconnect to avoid failure with non-MULTIPLICITY Perl interpreters +\c - +SET search_path = plperl_setup_scratch; + +SET ROLE regress_plperl_user1; + +-- Should be able to change privileges on the language +revoke all on language plperl from public; + +SET ROLE regress_plperl_user2; + +CREATE FUNCTION foo2() returns int language plperl as '2;'; -- fail + +SET ROLE regress_plperl_user1; + +grant usage on language plperl to regress_plperl_user2; + +SET ROLE regress_plperl_user2; + +CREATE FUNCTION foo2() returns int language plperl as '2;'; +SELECT foo2(); + +SET ROLE regress_plperl_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_plperl_user1; +DROP USER regress_plperl_user1; +DROP USER regress_plperl_user2; + +-- Now install the versions that will be used by subsequent test scripts. +CREATE EXTENSION plperl; +CREATE EXTENSION plperlu; |