Search Postgresql Archives

Re: Problem with temporary tables

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wednesday 30 June 2010 6:21:44 am Andrea Lombardoni wrote:
> >> Am I doing something wrong or is this a bug?
> >
> > The plan is cached, to avoid this problem, use dynamic SQL. In your
> > case:
> >
> > EXECUTE 'CREATE TEMPORARY TABLE idmap ...'
>
> Nice idea, but the problem persists, see log below.
>
> I am beginning to mentally place this into the 'bug' area :)
>
>
> CREATE OR REPLACE FUNCTION test() RETURNS bigint AS $$
> DECLARE
>
>
>   v_oid bigint;
> BEGIN
>
>     -- create tmp-table used to map old-id to new-id
>     -- type: 1=skill  3=function
>     EXECUTE 'CREATE TEMPORARY TABLE idmap (oldid bigint PRIMARY KEY,
> type bigint, newid bigint)  ON COMMIT DROP';
>
>     SELECT INTO  v_oid oid FROM pg_class WHERE relname = 'idmap';
>     RAISE NOTICE 'OOID of idmap %', v_oid;
>
>
>         -- add id mapping (type=1)
>         INSERT INTO idmap (oldid, type, newid) VALUES(1, 1, 1);
>
>
>     RETURN 1;
> END;
> $$ LANGUAGE plpgsql;
>
>
> # begin;select test();commit;
> BEGIN
> NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index
> "idmap_pkey" for table "idmap"
> CONTEXT:  SQL statement "CREATE TEMPORARY TABLE idmap (oldid bigint
> PRIMARY KEY, type bigint, newid bigint)  ON COMMIT DROP"
> PL/pgSQL function "test" line 9 at execute statement
> NOTICE:  OOID of idmap 475391188
>  test
> ------
>     1
> (1 row)
>
> COMMIT
> # begin;select test();commit;
> BEGIN
> NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index
> "idmap_pkey" for table "idmap"
> CONTEXT:  SQL statement "CREATE TEMPORARY TABLE idmap (oldid bigint
> PRIMARY KEY, type bigint, newid bigint)  ON COMMIT DROP"
> PL/pgSQL function "test" line 9 at execute statement
> NOTICE:  OOID of idmap 475391192
> ERROR:  relation with OID 475391188 does not exist
> CONTEXT:  SQL statement "INSERT INTO idmap (oldid, type, newid) VALUES(1,
> 1, 1)" PL/pgSQL function "test" line 16 at SQL statement
> ROLLBACK

You need to use EXECUTE for the INSERT statement as well per error:

CONTEXT:  SQL statement "INSERT INTO idmap (oldid, type, newid) VALUES(1,
 1, 1)" PL/pgSQL function "test" line 16 at SQL statement

-- 
Adrian Klaver
adrian.klaver@xxxxxxxxx

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux