Thread: Upgrade to 9.1 causing function problem

Upgrade to 9.1 causing function problem

From
Willem Buitendyk
Date:
I have recently upgraded my database from 8.4 to 9.1.  In the process I have moved everything to a different schema.
Postgisis occupying the public schema.  Everything is working fine except for some of my own functions. Here is a small
functionand table that will not update when I perform the following code:    select
_me_set_process_month('2012-01-01');    It will run but the resulting table will not update.  Any ideas? 


CREATE OR REPLACE FUNCTION _me_set_process_month(date)
  RETURNS void AS
$BODY$

BEGIN

update activity_month set action_month = $1;


END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION _me_set_process_month(date)
  OWNER TO postgres;



CREATE TABLE activity_month
(
  action_month date NOT NULL,
  CONSTRAINT idkeymonth PRIMARY KEY (action_month )
)
WITH (
  OIDS=FALSE
);
ALTER TABLE activity_month
  OWNER TO postgres;
GRANT ALL ON TABLE activity_month TO public;
GRANT ALL ON TABLE activity_month TO postgres;

Re: Upgrade to 9.1 causing function problem

From
Adrian Klaver
Date:
On Thursday, February 23, 2012 11:18:46 am Willem Buitendyk wrote:
> I have recently upgraded my database from 8.4 to 9.1.  In the process I
> have moved everything to a different schema.  Postgis is occupying the
> public schema.  Everything is working fine except for some of my own
> functions. Here is a small function and table that will not update when I
> perform the following code:    select _me_set_process_month('2012-01-01');
>     It will run but the resulting table will not update.  Any ideas?

What does the Postgres log say?
What is your search_path set to?
Is there more than one activity_month?

My guess is that your search_path is limiting the visibility of the table.
Without an explicit schema qualification of the table, Postgres will use the
search_path to locate a table. The logs should say something or you can change
the function to point to a schema qualified table name, if you do want to change
the search_path.

--
Adrian Klaver
adrian.klaver@gmail.com

Re: Upgrade to 9.1 causing function problem

From
Willem Buitendyk
Date:
Here are the log returns:

2012-02-23 11:31:44 PST    WARNING    invalid value for parameter "search_path": "crabdata"
2012-02-23 11:31:44 PST    DETAIL    schema "crabdata" does not exist

Bizarre because I did set my search path to the schema crabdata but now it is saying that crabdata doesn't exist.  But
itclearly does.  I'm at a loss. 

Willem



On 2012-02-23, at 11:41 AM, Adrian Klaver wrote:

> On Thursday, February 23, 2012 11:18:46 am Willem Buitendyk wrote:
>> I have recently upgraded my database from 8.4 to 9.1.  In the process I
>> have moved everything to a different schema.  Postgis is occupying the
>> public schema.  Everything is working fine except for some of my own
>> functions. Here is a small function and table that will not update when I
>> perform the following code:    select _me_set_process_month('2012-01-01');
>>    It will run but the resulting table will not update.  Any ideas?
>
> What does the Postgres log say?
> What is your search_path set to?
> Is there more than one activity_month?
>
> My guess is that your search_path is limiting the visibility of the table.
> Without an explicit schema qualification of the table, Postgres will use the
> search_path to locate a table. The logs should say something or you can change
> the function to point to a schema qualified table name, if you do want to change
> the search_path.
>
> --
> Adrian Klaver
> adrian.klaver@gmail.com


Re: Upgrade to 9.1 causing function problem

From
Rob Sargent
Date:
On 02/23/2012 12:49 PM, Willem Buitendyk wrote:
> Here are the log returns:
>
> 2012-02-23 11:31:44 PST    WARNING    invalid value for parameter "search_path": "crabdata"
> 2012-02-23 11:31:44 PST    DETAIL    schema "crabdata" does not exist
>
> Bizarre because I did set my search path to the schema crabdata but now it is saying that crabdata doesn't exist.
Butit clearly does.  I'm at a loss. 
>
> Willem
>
>
>
> On 2012-02-23, at 11:41 AM, Adrian Klaver wrote:
>
>> On Thursday, February 23, 2012 11:18:46 am Willem Buitendyk wrote:
>>> I have recently upgraded my database from 8.4 to 9.1.  In the process I
>>> have moved everything to a different schema.  Postgis is occupying the
>>> public schema.  Everything is working fine except for some of my own
>>> functions. Here is a small function and table that will not update when I
>>> perform the following code:    select _me_set_process_month('2012-01-01');
>>>     It will run but the resulting table will not update.  Any ideas?
>> What does the Postgres log say?
>> What is your search_path set to?
>> Is there more than one activity_month?
>>
>> My guess is that your search_path is limiting the visibility of the table.
>> Without an explicit schema qualification of the table, Postgres will use the
>> search_path to locate a table. The logs should say something or you can change
>> the function to point to a schema qualified table name, if you do want to change
>> the search_path.
>>
>> --
>> Adrian Klaver
>> adrian.klaver@gmail.com
>
Who owes/owned "crabdata" schema?


Re: Upgrade to 9.1 causing function problem

From
Willem Buitendyk
Date:
crabby=# \dv
                           List of relations
  Schema  |                   Name                    | Type |  Owner
----------+-------------------------------------------+------+----------
 crabdata | Total XXX XXXXX by XXX                   | view | postgres


also;

crabby=# show search_path;
 search_path
-------------
 crabdata
(1 row)


On 2012-02-23, at 12:16 PM, Rob Sargent wrote:

> On 02/23/2012 12:49 PM, Willem Buitendyk wrote:
>> Here are the log returns:
>>
>> 2012-02-23 11:31:44 PST    WARNING    invalid value for parameter "search_path": "crabdata"
>> 2012-02-23 11:31:44 PST    DETAIL    schema "crabdata" does not exist
>>
>> Bizarre because I did set my search path to the schema crabdata but now it is saying that crabdata doesn't exist.
Butit clearly does.  I'm at a loss. 
>>
>> Willem
>>
>>
>>
>> On 2012-02-23, at 11:41 AM, Adrian Klaver wrote:
>>
>>> On Thursday, February 23, 2012 11:18:46 am Willem Buitendyk wrote:
>>>> I have recently upgraded my database from 8.4 to 9.1.  In the process I
>>>> have moved everything to a different schema.  Postgis is occupying the
>>>> public schema.  Everything is working fine except for some of my own
>>>> functions. Here is a small function and table that will not update when I
>>>> perform the following code:    select _me_set_process_month('2012-01-01');
>>>>    It will run but the resulting table will not update.  Any ideas?
>>> What does the Postgres log say?
>>> What is your search_path set to?
>>> Is there more than one activity_month?
>>>
>>> My guess is that your search_path is limiting the visibility of the table.
>>> Without an explicit schema qualification of the table, Postgres will use the
>>> search_path to locate a table. The logs should say something or you can change
>>> the function to point to a schema qualified table name, if you do want to change
>>> the search_path.
>>>
>>> --
>>> Adrian Klaver
>>> adrian.klaver@gmail.com
>>
> Who owes/owned "crabdata" schema?
>
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general


Re: Upgrade to 9.1 causing function problem

From
Adrian Klaver
Date:
On 02/23/2012 11:49 AM, Willem Buitendyk wrote:
> Here are the log returns:
>
> 2012-02-23 11:31:44 PST    WARNING    invalid value for parameter "search_path": "crabdata"
> 2012-02-23 11:31:44 PST    DETAIL    schema "crabdata" does not exist
>
> Bizarre because I did set my search path to the schema crabdata but now it is saying that crabdata doesn't exist.
Butit clearly does.  I'm at a loss. 

Where did you set the search_path, in postgressql.conf of from a SET
command?

>
> Willem
>


--
Adrian Klaver
adrian.klaver@gmail.com

Re: Upgrade to 9.1 causing function problem

From
Willem Buitendyk
Date:
I have it set in postgresql.conf and I've also used:

alter user postgres set search_path = crabdata,public;

looking at the logs after issuing the above alter user command I get:

2012-02-23 13:03:09 PST    WARNING    invalid value for parameter "search_path": "crabdata, public"
2012-02-23 13:03:09 PST    DETAIL    schema "crabdata" does not exist

If i look in the schemata table in the catalogs I see crabdata schema is there:

"crabby";"pg_toast";"postgres";"";"";"";""
"crabby";"pg_temp_1";"postgres";"";"";"";""
"crabby";"pg_toast_temp_1";"postgres";"";"";"";""
"crabby";"pg_catalog";"postgres";"";"";"";""
"crabby";"public";"postgres";"";"";"";""
"crabby";"information_schema";"postgres";"";"";"";""
"crabby";"crabdata";"postgres";"";"";"";""


I should note this is on Windows 7 64 bit - using the 32 bit installation of postgresql 9.1



On 2012-02-23, at 12:57 PM, Adrian Klaver wrote:

> On 02/23/2012 11:49 AM, Willem Buitendyk wrote:
>> Here are the log returns:
>>
>> 2012-02-23 11:31:44 PST    WARNING    invalid value for parameter "search_path": "crabdata"
>> 2012-02-23 11:31:44 PST    DETAIL    schema "crabdata" does not exist
>>
>> Bizarre because I did set my search path to the schema crabdata but now it is saying that crabdata doesn't exist.
Butit clearly does.  I'm at a loss. 
>
> Where did you set the search_path, in postgressql.conf of from a SET command?
>
>>
>> Willem
>>
>
>
> --
> Adrian Klaver
> adrian.klaver@gmail.com


Re: Upgrade to 9.1 causing function problem

From
John R Pierce
Date:
On 02/23/12 11:49 AM, Willem Buitendyk wrote:
> 2012-02-23 11:31:44 PST    WARNING    invalid value for parameter "search_path": "crabdata"
> 2012-02-23 11:31:44 PST    DETAIL    schema "crabdata" does not exist
>
> Bizarre because I did set my search path to the schema crabdata but now it is saying that crabdata doesn't exist.
Butit clearly does.  I'm at a loss. 

add the database name to your log_line_prefix ...  I use something like...

     log_line_prefix = '%m %u@%d[%p]: '

so my log lines look like...


2012-02-21 14:04:21.595 PST user@dbname[8888]: ERROR: .....


(where 8888 is the pid)...    I'm suggesting this so you can confirm
that you are getting this error on the database you think it is, and not
something else.

--
john r pierce                            N 37, W 122
santa cruz ca                         mid-left coast


Re: Upgrade to 9.1 causing function problem

From
Adrian Klaver
Date:
On 02/23/2012 01:08 PM, Willem Buitendyk wrote:
> I have it set in postgresql.conf and I've also used:
>
> alter user postgres set search_path = crabdata,public;
>

Well search_path is a string, so have you tried?;
search_path='crabdata,public'


--
Adrian Klaver
adrian.klaver@gmail.com

Re: Upgrade to 9.1 causing function problem

From
Igor Polishchuk
Date:
Actually, what works is
set search_path='crabdata', 'public' ;


On 2/23/12 1:10 PM, "Adrian Klaver" <adrian.klaver@gmail.com> wrote:

> On 02/23/2012 01:08 PM, Willem Buitendyk wrote:
>> I have it set in postgresql.conf and I've also used:

>> alter user postgres set search_path = crabdata,public;
>>
>
> Well search_path is a string, so have you tried?;
> search_path='crabdata,public'
>



Re: Upgrade to 9.1 causing function problem

From
Adrian Klaver
Date:
On 02/23/2012 01:15 PM, Igor Polishchuk wrote:
> Actually, what works is
> set search_path='crabdata', 'public' ;

Yea, I was not clear here. I was referring to postgresql.conf setting.

>
>



--
Adrian Klaver
adrian.klaver@gmail.com

Re: Upgrade to 9.1 causing function problem

From
Adrian Klaver
Date:
On 02/23/2012 01:08 PM, Willem Buitendyk wrote:
> I have it set in postgresql.conf and I've also used:
>
> alter user postgres set search_path = crabdata,public;
>
> looking at the logs after issuing the above alter user command I get:
>
> 2012-02-23 13:03:09 PST    WARNING    invalid value for parameter "search_path": "crabdata, public"
> 2012-02-23 13:03:09 PST    DETAIL    schema "crabdata" does not exist

>
> I should note this is on Windows 7 64 bit - using the 32 bit installation of postgresql 9.1

How are you doing these changes, via psql or PgAdmin or both?
Is the previous 8.4 instance of Postgres still up and running?
Are you sure you are only working with one database cluster?

>
>
>


--
Adrian Klaver
adrian.klaver@gmail.com

Re: Upgrade to 9.1 causing function problem

From
Willem Buitendyk
Date:
Both via psql and PgAdmin.

Yes only one database cluster.


On 2012-02-23, at 1:32 PM, Adrian Klaver wrote:

> On 02/23/2012 01:08 PM, Willem Buitendyk wrote:
>> I have it set in postgresql.conf and I've also used:
>>
>> alter user postgres set search_path = crabdata,public;
>>
>> looking at the logs after issuing the above alter user command I get:
>>
>> 2012-02-23 13:03:09 PST    WARNING    invalid value for parameter "search_path": "crabdata, public"
>> 2012-02-23 13:03:09 PST    DETAIL    schema "crabdata" does not exist
>
>>
>> I should note this is on Windows 7 64 bit - using the 32 bit installation of postgresql 9.1
>
> How are you doing these changes, via psql or PgAdmin or both?
> Is the previous 8.4 instance of Postgres still up and running?
> Are you sure you are only working with one database cluster?
>
>>
>>
>>
>
>
> --
> Adrian Klaver
> adrian.klaver@gmail.com


Re: Upgrade to 9.1 causing function problem

From
Adrian Klaver
Date:
On 02/23/2012 01:53 PM, Willem Buitendyk wrote:
> Both via psql and PgAdmin.
>
> Yes only one database cluster.

1)
Did you try Johns recommendation, just to be sure?:
"
add the database name to your log_line_prefix ...  I use something like...

     log_line_prefix = '%m %u@%d[%p]: '
"

2)
So what happens if you change your function to have an explicit schema
reference to the table?:

update crabdata.activity_month set action_month = $1;



--
Adrian Klaver
adrian.klaver@gmail.com

Re: Upgrade to 9.1 causing function problem

From
Adrian Klaver
Date:
On Thursday, February 23, 2012 1:53:42 pm Willem Buitendyk wrote:
> Both via psql and PgAdmin.
>
> Yes only one database cluster.
>

Another thought.
Did you CREATE the schema using PgAdmin and if so,  might you have inadvertently
put in a trailing or leading space ?
I ask because if I remember correctly PgAdmin by default quotes object names and
that would trap the space character.

I know  you showed this previously:

"crabby";"crabdata";"postgres";"";"";"";""

On the chance that spaces where trimmed out of the above what does the query
below show?:

SELECT length(schema_name), schema_name from information_schema.schemata;

--
Adrian Klaver
adrian.klaver@gmail.com

Re: Upgrade to 9.1 causing function problem

From
Willem Buitendyk
Date:
I did create the schemas with PgAdmin.  As a test I also created another schema in psql and it too has the same
problemswith the function not working.  I also created the function this time without relying on search_path and even
alteredthe function and tables names slightly just in case there was some kind of conflict.  Consequently there was no
logerror with search_path anymore but again the function will not work even though it appears to go through the motions
ofworking. 

select test2._crab_set_process_month_trial('2012-01-01');


CREATE OR REPLACE FUNCTION test2._crab_set_process_month_trial(date)
  RETURNS void AS
$BODY$

BEGIN

update test2.activity_trial set action_month = $1;


END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION test2._crab_set_process_month_trial(date)
  OWNER TO postgres;


CREATE TABLE test2.activity_trial
(
  action_month date NOT NULL,
  CONSTRAINT idkeymonth PRIMARY KEY (action_month )
)
WITH (
  OIDS=FALSE
);
ALTER TABLE test2.activity_trial
  OWNER TO postgres;




On 2012-02-23, at 6:04 PM, Adrian Klaver wrote:

> On Thursday, February 23, 2012 1:53:42 pm Willem Buitendyk wrote:
>> Both via psql and PgAdmin.
>>
>> Yes only one database cluster.
>>
>
> Another thought.
> Did you CREATE the schema using PgAdmin and if so,  might you have inadvertently
> put in a trailing or leading space ?
> I ask because if I remember correctly PgAdmin by default quotes object names and
> that would trap the space character.
>
> I know  you showed this previously:
>
> "crabby";"crabdata";"postgres";"";"";"";""
>
> On the chance that spaces where trimmed out of the above what does the query
> below show?:
>
> SELECT length(schema_name), schema_name from information_schema.schemata;
>
> --
> Adrian Klaver
> adrian.klaver@gmail.com


Re: Upgrade to 9.1 causing function problem

From
Willem Buitendyk
Date:
Ok I must be doing something wrong.  I tried the same test on my old server running 8.3 which has had no problem with
anythingup till now (but also only working within public schema).  So I am obviously not working with schemas
correctly. Will read the manual for hopefully a deeper understanding. 



> I did create the schemas with PgAdmin.  As a test I also created another schema in psql and it too has the same
problemswith the function not working.  I also created the function this time without relying on search_path and even
alteredthe function and tables names slightly just in case there was some kind of conflict.  Consequently there was no
logerror with search_path anymore but again the function will not work even though it appears to go through the motions
ofworking. 
>
> select test2._crab_set_process_month_trial('2012-01-01');
>
>
> CREATE OR REPLACE FUNCTION test2._crab_set_process_month_trial(date)
>  RETURNS void AS
> $BODY$
>
> BEGIN
>
> update test2.activity_trial set action_month = $1;
>
>
> END;
> $BODY$
>  LANGUAGE plpgsql VOLATILE
>  COST 100;
> ALTER FUNCTION test2._crab_set_process_month_trial(date)
>  OWNER TO postgres;
>
>
> CREATE TABLE test2.activity_trial
> (
>  action_month date NOT NULL,
>  CONSTRAINT idkeymonth PRIMARY KEY (action_month )
> )
> WITH (
>  OIDS=FALSE
> );
> ALTER TABLE test2.activity_trial
>  OWNER TO postgres;
>
On 2012-02-23, at 6:04 PM, Adrian Klaver wrote:

> On Thursday, February 23, 2012 1:53:42 pm Willem Buitendyk wrote:
>> Both via psql and PgAdmin.
>>
>> Yes only one database cluster.
>>
>
> Another thought.
> Did you CREATE the schema using PgAdmin and if so,  might you have inadvertently
> put in a trailing or leading space ?
> I ask because if I remember correctly PgAdmin by default quotes object names and
> that would trap the space character.
>
> I know  you showed this previously:
>
> "crabby";"crabdata";"postgres";"";"";"";""
>
> On the chance that spaces where trimmed out of the above what does the query
> below show?:
>
> SELECT length(schema_name), schema_name from information_schema.schemata;
>
> --
> Adrian Klaver
> adrian.klaver@gmail.com


Re: Upgrade to 9.1 causing function problem

From
Willem Buitendyk
Date:
I tried as you suggested and my results are:

crabby=# SELECT length(schema_name), schema_name from information_schema.schemat
a;
 length |    schema_name
--------+--------------------
      8 | pg_toast
      9 | pg_temp_1
     15 | pg_toast_temp_1
     10 | pg_catalog
      6 | public
     18 | information_schema
      8 | crabdata
(7 rows)


So it seems that crabdata schema is not with extra space character or such.  Likewise I created another schema earlier
ina test (called test) from psql and it exhibited the same behaviour. 
I've spent a whole week migrating from 8.3 to 9.1 and am loathe to repeat the process because I might have a funky
installation. In all other respects everything 
seems to work ok.  Failing all else I can try a re-installation.  If I go down this road are there any suggestions to
wipethe slate clean to give myself 
the best fighting chance of having this work?  Using windows 7 64 bit with postgresql 9.1 32 bit and postgis.  I am
alsomaking sure to operate from the correct database. 

Here are the two problems as such:

1) setting the search_path to another schema returns the error in the server log:

2012-02-24 11:32:59.456 PST @[3868]: WARNING:  invalid value for parameter "search_path": "crabdata, public"
2012-02-24 11:32:59.456 PST @[3868]: DETAIL:  schema "crabdata" does not exist

As noted at the beginning of this post - crabdata is clearly present and does not contain any extraneous characters.

2) using designated schema designation in functions and tables still fail to work correctly.  Such as:

select crabdata._crab_set_report_month('2012-01-01');

CREATE OR REPLACE FUNCTION crabdata._crab_set_report_month(date)
  RETURNS void AS
$BODY$

BEGIN

update activity_month set action_month = $1;
perform * from _crab_pop_tag_day_over();

END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION crabdata._crab_set_report_month(date)
  OWNER TO postgres;
GRANT EXECUTE ON FUNCTION crabdata._crab_set_report_month(date) TO public;
GRANT EXECUTE ON FUNCTION crabdata._crab_set_report_month(date) TO postgres;


CREATE TABLE crabdata.activity_month
(
  action_month date NOT NULL,
  CONSTRAINT idkeymonth PRIMARY KEY (action_month )
)
WITH (
  OIDS=FALSE
);
ALTER TABLE crabdata.activity_month
  OWNER TO postgres;
GRANT ALL ON TABLE crabdata.activity_month TO postgres;
GRANT ALL ON TABLE crabdata.activity_month TO public;














On 2012-02-23, at 6:04 PM, Adrian Klaver wrote:

> On Thursday, February 23, 2012 1:53:42 pm Willem Buitendyk wrote:
>> Both via psql and PgAdmin.
>>
>> Yes only one database cluster.
>>
>
> Another thought.
> Did you CREATE the schema using PgAdmin and if so,  might you have inadvertently
> put in a trailing or leading space ?
> I ask because if I remember correctly PgAdmin by default quotes object names and
> that would trap the space character.
>
> I know  you showed this previously:
>
> "crabby";"crabdata";"postgres";"";"";"";""
>
> On the chance that spaces where trimmed out of the above what does the query
> below show?:
>
> SELECT length(schema_name), schema_name from information_schema.schemata;
>
> --
> Adrian Klaver
> adrian.klaver@gmail.com


Re: Upgrade to 9.1 causing function problem

From
Adrian Klaver
Date:
On Friday, February 24, 2012 10:31:44 am Willem Buitendyk wrote:
> Ok I must be doing something wrong.  I tried the same test on my old server
> running 8.3 which has had no problem with anything up till now (but also
> only working within public schema).  So I am obviously not working with
> schemas correctly.  Will read the manual for hopefully a deeper
> understanding.
>

At this point my guess is it is a GRANT issue, where the user that creates the
SCHEMA is different from the one using the function and the function user does
not have USAGE on the schema.


See:

http://www.postgresql.org/docs/9.0/interactive/sql-grant.html

In particular:
"
USAGE

...
For schemas, allows access to objects contained in the specified schema (assuming
that the objects' own privilege requirements are also met). Essentially this
allows the grantee to "look up" objects within the schema. Without this
permission, it is still possible to see the object names, e.g. by querying the
system tables. Also, after revoking this permission, existing backends might
have statements that have previously performed this lookup, so this is not a
completely secure way to prevent object access.
...

"


--
Adrian Klaver
adrian.klaver@gmail.com