Thread: Problem granting access to a PlPython function

Problem granting access to a PlPython function

From
Mariano Mara
Date:
Hi,
I have this plpython function that I need to execute with a non
superuser. I logged in the postgres account, create it and grant execute
rights to the target user.
However I cannot execute it with this user: I'm getting a "function ...
does not exist" error and after poking it for a few hours without luck,
it seems this problem is too much for a n00b like me.
Can anyone offer a hint how to make it work?
Following is a full example of what I'm doing:


# su - postgres
-bash-3.2$ psql -f hours_pgsql_function.sql
CREATE FUNCTION
-bash-3.2$ psql
Welcome to psql 8.3.8, the PostgreSQL interactive terminal.

postgres=# select hours_between(localtimestamp, localtimestamp,
cast('Argentina' as character varying));
 hours_between
---------------
             0
(1 row)

postgres=# grant execute on function hours_between (timestamp without
time zone, timestamp without time zone, character varying) to otrs;
GRANT
postgres=# \q
-bash-3.2$ psql -d otrs -U otrs
Welcome to psql 8.3.8, the PostgreSQL interactive terminal.

otrs=> select hours_between(localtimestamp, localtimestamp,
cast('Argentina' as character varying));
ERROR:  function hours_between(timestamp without time zone, timestamp
without time zone, character varying) does not exist
LINE 1: select hours_between(localtimestamp, localtimestamp, cast('A...
               ^
HINT:  No function matches the given name and argument types. You might
need to add explicit type casts.
otrs=>

TIA,
Mariano.


Re: Problem granting access to a PlPython function

From
Sam Mason
Date:
On Sun, Nov 08, 2009 at 05:07:16PM -0300, Mariano Mara wrote:
> I have this plpython function that I need to execute with a non
> superuser. I logged in the postgres account, create it and grant execute
> rights to the target user.
> However I cannot execute it with this user: I'm getting a "function ...
> does not exist" error and after poking it for a few hours without luck,

It looks like you're creating it in a different database (and/or schema)
from the one you're trying to access it from.  Functions are associated
with exactly one schema and this schema will exist in exactly one
database. Your search_path specifies the schema(s) to look in for
tables/functions, you can change it by doing:

  SET search_path = myschema;

You need to be connected to the right database for this to work; "psql
-l" gives you a list.  The command "\df" lists all (user defined)
functions that you can currently see.

Hope that helps point you in the right direction!

--
  Sam  http://samason.me.uk/

Re: Problem granting access to a PlPython function

From
Mariano Mara
Date:
Excerpts from Sam Mason's message of Sun Nov 08 17:18:52 -0300 2009:
> On Sun, Nov 08, 2009 at 05:07:16PM -0300, Mariano Mara wrote:
> > I have this plpython function that I need to execute with a non
> > superuser. I logged in the postgres account, create it and grant execute
> > rights to the target user.
> > However I cannot execute it with this user: I'm getting a "function ...
> > does not exist" error and after poking it for a few hours without luck,
>
> It looks like you're creating it in a different database (and/or schema)
> from the one you're trying to access it from.  Functions are associated
> with exactly one schema and this schema will exist in exactly one
> database. Your search_path specifies the schema(s) to look in for
> tables/functions, you can change it by doing:
>
>   SET search_path = myschema;
>
> You need to be connected to the right database for this to work; "psql
> -l" gives you a list.  The command "\df" lists all (user defined)
> functions that you can currently see.
>
> Hope that helps point you in the right direction!
>

That was fast and it was right too. Seems I still need to master the
whole database/schema concept.

Thanks a lot Sam for your time and advice, I really appreciate it.

Mariano.