Обсуждение: ERROR: cache lookup failed for type
Hello all,
I have been using a particular function for years without issue but
recently tried the Alpha releases of PostGreSQL. I loaded the database
into 9.5 Alpha1 release and did not have problems. After upgrading to
Alpha2, I started getting this error on executing the function. I didn't
reload the database this time as it should not be required.
ERROR: cache lookup failed for type 1082 CONTEXT: compilation of PL/pgSQL function "ds_stats" near line 1
I queried the data type 1082 references and found it is the "date" data
type.
# select oid,typowner,typname from pg_type where oid = 1082 ;oid | typowner | typname
------+----------+---------1082 | 10 | date
(1 row)
The function is simple with the following definition:
# CREATE FUNCTION ds_stats( date, text) RETURNS integer LANGUAGE plpgsql AS $_$
DECLARE -- inserts new statistics into doc_stats -- table calculated from the documents table -- 1st argument is
thepublished date -- 2nd argument is the source pub_date ALIAS FOR $1; pub_source ALIAS FOR $2; new_stat
documents_statistics%ROWTYPE;
BEGIN select into new_stat published, count(*), split_part(filename,'/', 5) from documents where published =
pub_dateand split_part(filename,'/', 5) = pub_source group by published, split_part(filename,'/', 5) ; IF found
then delete from documents_statistics where published = pub_date and
source = pub_source;
insert into documents_statistics ( published, articles, source ) values ( new_stat.published,
new_stat.articles,new_stat.source ); return new_stat.articles; else delete from documents_statistics where
published= pub_date and
source = pub_source; return 0; END IF;
END;
$_$;
The table documents_statistics has definition:
CREATE TABLE documents_statistics ( published date, articles bigint, source text
);
I use the function in queries like:
select ds_stats('2015-08-10'::date, 'wp_news') ;
I dropped the function and can now not add it back to the database. Also
doing a simple query on the table filtering on the published field does
not present any problems. I was going to submit this as a bug against
the new 9.5alpha2 release but thought I would run this by this group
before doing so. Any thoughts?
Thanks,
Stuart
On 08/16/2015 05:58 PM, Stuart wrote:
> Hello all,
>
> I have been using a particular function for years without issue but
> recently tried the Alpha releases of PostGreSQL. I loaded the database
> into 9.5 Alpha1 release and did not have problems. After upgrading to
> Alpha2, I started getting this error on executing the function. I didn't
> reload the database this time as it should not be required.
I do not see anything in the release notes about dump/restore, but this
is an alpha so I would at least try dumping from the Alpha 1 and
restoring to the Alpha 2. If nothing else it will provide another data
point.
>
> ERROR: cache lookup failed for type 1082
> CONTEXT: compilation of PL/pgSQL function "ds_stats" near line 1
>
> I queried the data type 1082 references and found it is the "date" data
> type.
>
> # select oid,typowner,typname from pg_type where oid = 1082 ;
> oid | typowner | typname
> ------+----------+---------
> 1082 | 10 | date
> (1 row)
>
>
> The function is simple with the following definition:
>
> # CREATE FUNCTION ds_stats( date, text) RETURNS integer
> LANGUAGE plpgsql
> AS $_$
> DECLARE
> -- inserts new statistics into doc_stats
> -- table calculated from the documents table
> -- 1st argument is the published date
> -- 2nd argument is the source
> pub_date ALIAS FOR $1;
> pub_source ALIAS FOR $2;
> new_stat documents_statistics%ROWTYPE;
> BEGIN
> select into new_stat
> published, count(*), split_part(filename,'/', 5)
> from documents
> where published = pub_date and
> split_part(filename,'/', 5) = pub_source
> group by published, split_part(filename,'/', 5) ;
> IF found then
> delete from documents_statistics where published = pub_date and
> source = pub_source;
>
> insert into documents_statistics ( published, articles, source )
> values ( new_stat.published, new_stat.articles, new_stat.source );
> return new_stat.articles;
> else
> delete from documents_statistics where published = pub_date and
> source = pub_source;
> return 0;
> END IF;
>
> END;
> $_$;
>
> The table documents_statistics has definition:
>
> CREATE TABLE documents_statistics (
> published date,
> articles bigint,
> source text
> );
>
>
> I use the function in queries like:
>
> select ds_stats('2015-08-10'::date, 'wp_news') ;
>
>
> I dropped the function and can now not add it back to the database. Also
> doing a simple query on the table filtering on the published field does
> not present any problems. I was going to submit this as a bug against
> the new 9.5alpha2 release but thought I would run this by this group
> before doing so. Any thoughts?
>
>
>
> Thanks,
>
> Stuart
>
>
>
>
>
--
Adrian Klaver
adrian.klaver@aklaver.com
Stuart <sfbarbee@gmail.com> writes:
> I have been using a particular function for years without issue but
> recently tried the Alpha releases of PostGreSQL. I loaded the database
> into 9.5 Alpha1 release and did not have problems. After upgrading to
> Alpha2, I started getting this error on executing the function. I didn't
> reload the database this time as it should not be required.
> ERROR: cache lookup failed for type 1082
> CONTEXT: compilation of PL/pgSQL function "ds_stats" near line 1
That's odd.
> I dropped the function and can now not add it back to the database.
What happens when you try, exactly?
I assume the error was persistent across multiple sessions? Have you
changed the schema (rowtype) of table documents_statistics lately?
Does reindexing pg_type make the error go away? If so, what platform
and filesystem is this on?
regards, tom lane
Adrian, Tom, I reloaded the database and the problem doesn't happen anymore. Thanks for the suggestion. Tom - to answer your questions, On 08/17/2015 07:16 AM, Tom Lane wrote: >> I dropped the function and can now not add it back to the database. > > What happens when you try, exactly? The same error occurred > I assume the error was persistent across multiple sessions? Have you > changed the schema (rowtype) of table documents_statistics lately? No there were no changes to the table schema. All dbase objects were loaded via pg_dumpall > file.sql upgrade postgres psql template1 -f file.sql Yes the problem was persistent across multiple sessions > Does reindexing pg_type make the error go away? If so, what platform > and filesystem is this on? No, I didn't try reindexing pg_type The filesystem is XFS Thanks, Stuart
Tom, forgot to include the rest of the platform info. This on openSuSE Linux 13.2 x86_64, kernel 4.1.4 On 08/17/2015 07:52 AM, Stuart wrote: > >> Does reindexing pg_type make the error go away? If so, what platform >> and filesystem is this on? Thanks, Stuart
On 08/16/2015 08:52 PM, Stuart wrote: > Adrian, Tom, > > I reloaded the database and the problem doesn't happen anymore. > Thanks for the suggestion. > > Tom - to answer your questions, > > On 08/17/2015 07:16 AM, Tom Lane wrote: >>> I dropped the function and can now not add it back to the database. >> >> What happens when you try, exactly? > > The same error occurred > >> I assume the error was persistent across multiple sessions? Have you >> changed the schema (rowtype) of table documents_statistics lately? > > No there were no changes to the table schema. All dbase objects were > loaded via > > pg_dumpall > file.sql > > upgrade postgres > > psql template1 -f file.sql So this is what you did when you started with the Alpha 1 database, correct? When you went to Alpha 2 you just installed the new program over the existing Alpha 1, but left the data directory as is and then ran into the error, correct? You then did a dump of the Alpha 1 or other(?) existing database and then a restore into the Alpha 2(the reload above) at which point the error went away, correct? > > Yes the problem was persistent across multiple sessions > >> Does reindexing pg_type make the error go away? If so, what platform >> and filesystem is this on? > > No, I didn't try reindexing pg_type > > The filesystem is XFS > > > Thanks, > > Stuart > -- Adrian Klaver adrian.klaver@aklaver.com
On 08/17/2015 08:08 AM, Adrian Klaver wrote: > So this is what you did when you started with the Alpha 1 database, > correct? > > When you went to Alpha 2 you just installed the new program over the > existing Alpha 1, but left the data directory as is and then ran into > the error, correct? > > You then did a dump of the Alpha 1 or other(?) existing database and > then a restore into the Alpha 2(the reload above) at which point the > error went away, correct? Adrian, that is correct. More precisely, the steps taken were the following which I now see where I may have potentially introduced the error: upgrade from prostgres 9.4.4 to 9.5alpha1 pg_dumpall > file.sql pg_ctl stop upgrade postgres 9.5alpha1 rm -r /pgdir/* initdb -D /pgdir/ pg_ctl start -D /pgdir/ psql template1 -f file.sql upgrade from postgres 9.5alpha1 to 9.5alpha2 upgrade postgres 9.5alpha1 pg_ctl stop pg_ctl start -D /pgdir/ Now I see that not stopping the database prior to the upgrade may have introduced the problem eventhough I don't understand the internals. I did do another pg_ctl stop/start after upgrade just to see if that would fix but it didn't. I just did the following steps, and now no error: pg_dumpall > file.sql pg_ctl stop rm -r /pgdir/* initdb -D /pgdir/ pg_ctl start -D /pgdir/ psql template1 -f file.sql logged into db and recreated the function psql db create function ds_stats... Thanks, Stuart
On 08/16/2015 09:46 PM, Stuart wrote: > On 08/17/2015 08:08 AM, Adrian Klaver wrote: >> So this is what you did when you started with the Alpha 1 database, >> correct? >> >> When you went to Alpha 2 you just installed the new program over the >> existing Alpha 1, but left the data directory as is and then ran into >> the error, correct? >> >> You then did a dump of the Alpha 1 or other(?) existing database and >> then a restore into the Alpha 2(the reload above) at which point the >> error went away, correct? > > Adrian, that is correct. More precisely, the steps taken were the > following which I now see where I may have potentially introduced the error: > > upgrade from prostgres 9.4.4 to 9.5alpha1 > > pg_dumpall > file.sql > pg_ctl stop > upgrade postgres 9.5alpha1 > rm -r /pgdir/* > initdb -D /pgdir/ > pg_ctl start -D /pgdir/ > psql template1 -f file.sql > > > upgrade from postgres 9.5alpha1 to 9.5alpha2 > > upgrade postgres 9.5alpha1 > pg_ctl stop > pg_ctl start -D /pgdir/ > > > Now I see that not stopping the database prior to the upgrade may have > introduced the problem eventhough I don't understand the internals. I > did do another pg_ctl stop/start after upgrade just to see if that would > fix but it didn't. Yeah, I would say all bets are off when overwriting a running database. How are you doing the upgrade, from a package or source? I now the .deb packages allow for running multiple versions concurrently and I believe that yum can work that way also. If building from source you can do something like --prefix=/usr/local/pgsql94 in configure to separate versions. Then you just have to change the port in postgresql.conf to have multiple versions on a machine. Somewhat less dangerous then deleting $DATA. > > I just did the following steps, and now no error: > > pg_dumpall > file.sql > pg_ctl stop > rm -r /pgdir/* > initdb -D /pgdir/ > pg_ctl start -D /pgdir/ > psql template1 -f file.sql > > logged into db and recreated the function > > psql db > create function ds_stats... > > > > > Thanks, > > Stuart > > -- Adrian Klaver adrian.klaver@aklaver.com
<p dir="ltr">Adrian, <p dir="ltr">Doing upgrade from source. <p dir="ltr">Thanks, <p dir="ltr">Stuart<div class="gmail_quote">OnAug 17, 2015 6:11 PM, "Adrian Klaver" <<a href="mailto:adrian.klaver@aklaver.com">adrian.klaver@aklaver.com</a>>wrote:<br type="attribution" /><blockquote class="gmail_quote"style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 08/16/2015 09:46 PM, Stuart wrote:<br/><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> On 08/17/201508:08 AM, Adrian Klaver wrote:<br /><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #cccsolid;padding-left:1ex"> So this is what you did when you started with the Alpha 1 database,<br /> correct?<br /><br/> When you went to Alpha 2 you just installed the new program over the<br /> existing Alpha 1, but left the data directoryas is and then ran into<br /> the error, correct?<br /><br /> You then did a dump of the Alpha 1 or other(?) existingdatabase and<br /> then a restore into the Alpha 2(the reload above) at which point the<br /> error went away, correct?<br/></blockquote><br /> Adrian, that is correct. More precisely, the steps taken were the<br /> following whichI now see where I may have potentially introduced the error:<br /><br /> upgrade from prostgres 9.4.4 to 9.5alpha1<br/><br /> pg_dumpall > file.sql<br /> pg_ctl stop<br /> upgrade postgres 9.5alpha1<br /> rm -r /pgdir/*<br/> initdb -D /pgdir/<br /> pg_ctl start -D /pgdir/<br /> psql template1 -f file.sql<br /><br /><br /> upgradefrom postgres 9.5alpha1 to 9.5alpha2<br /><br /> upgrade postgres 9.5alpha1<br /> pg_ctl stop<br /> pg_ctl start -D/pgdir/<br /><br /><br /> Now I see that not stopping the database prior to the upgrade may have<br /> introduced the problemeventhough I don't understand the internals. I<br /> did do another pg_ctl stop/start after upgrade just to see ifthat would<br /> fix but it didn't.<br /></blockquote><br /> Yeah, I would say all bets are off when overwriting a runningdatabase.<br /><br /> How are you doing the upgrade, from a package or source?<br /><br /> I now the .deb packagesallow for running multiple versions concurrently and I believe that yum can work that way also. If building fromsource you can do something like --prefix=/usr/local/pgsql94 in configure to separate versions. Then you just have tochange the port in postgresql.conf to have multiple versions on a machine. Somewhat less dangerous then deleting $DATA.<br/><br /><br /><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br/> I just did the following steps, and now no error:<br /><br /> pg_dumpall > file.sql<br />pg_ctl stop<br /> rm -r /pgdir/*<br /> initdb -D /pgdir/<br /> pg_ctl start -D /pgdir/<br /> psql template1 -f file.sql<br/><br /> logged into db and recreated the function<br /><br /> psql db<br /> create function ds_stats...<br /><br/><br /><br /><br /> Thanks,<br /><br /> Stuart<br /><br /><br /></blockquote><br /><br /> -- <br /> Adrian Klaver<br/><a href="mailto:adrian.klaver@aklaver.com" target="_blank">adrian.klaver@aklaver.com</a><br /></blockquote></div>