What are the implications between the use of a pl language and the
public schema?
When i use createlang on a database without the public schema (dropped
for safety reason), createlang fail with the sequent error
...
postgres@pc-dba:~> createlang -d prova2 plpgsql --echo
SELECT oid FROM pg_language WHERE lanname = 'plpgsql';
SELECT oid FROM pg_proc WHERE proname = 'plpgsql_call_handler' AND
prorettype = 'pg_catalog.language_handler'::regtype AND pronargs = 0;
SELECT oid FROM pg_proc WHERE proname = 'plpgsql_validator' AND
proargtypes[0] = 'pg_catalog.oid'::regtype AND pronargs = 1;
CREATE FUNCTION "plpgsql_call_handler" () RETURNS language_handler AS
'$libdir/plpgsql' LANGUAGE C;
CREATE FUNCTION "plpgsql_validator" (oid) RETURNS void AS
'$libdir/plpgsql' LANGUAGE C;
CREATE TRUSTED LANGUAGE "plpgsql" HANDLER "plpgsql_call_handler"
VALIDATOR "plpgsql_validator";
createlang: language installation failed: ERROR: no schema has been
selected to create in
postgres@pc-dba:~>
...
If i recreate the public schema (as default) the createlang perform
without error.
The client 'createlang' attempt to create 2 functions on the public schema:
plxxx_call_handler
plxxx_validator
these function have got respectively null acl list, from pg_proc:
prova2=# select pg_proc.oid, proname, nspname, proacl from pg_proc,
pg_namespace where pg_namespace.nspname='public' and
pg_namespace.oid=pronamespace;
oid | proname | nspname | proacl
--------+----------------------+---------+--------
571455 | plpgsql_call_handler | public |
571456 | plpgsql_validator | public |
(2 rows)
prova2=#
Can i create languages functions on a different schema?
This schema must be accessible for all db user? With which privileges
(only usage)?
What's the mean of the proacl column for these functions relatively to
TRUSTED|UNTRUSTED create language clause?
===========================================
CINECA Via Magnanelli 6/3
40033 Casalecchio di Reno (Bologna)
Settore Gestione Sistemi
Francesco Dalla Ca'
Email f.dallaca@cineca.it
===========================================