Thread: Can I use SPI in postgres.c

Can I use SPI in postgres.c

From
Limin Liu
Date:
Helper,

I need to create a temp table for each db connection.  So, I add the
dollowing code into postgres.c
----------------
   SPI_connect();
   SPI_exec("create temp table tbl_tmp (n int);",0);
   SPI_exec("insert into tbl_tmp values (1);",0);
   SPI_finish();
----------------
right after
----------------
    /*
     * POSTGRES main processing loop begins here
     *
     * If an exception is encountered, processing resumes here so we
abort
     * the current transaction and start a new one.
     */
----------------

I checked the return of SPI_exec and both are fine.  Then I run psql and
got two error messages, which contradicts to each other!
-------------------
db1=> select * from tbl_tmp;
ERROR:  Relation 'tbl_tmp' does not exist
db1=> create temp table tbl_tmp (n int);
ERROR:  Relation 'tbl_tmp' already exists
db1=>
-------------------

I checked the SPI document, but cannot find solution.  Can anyone please
tells me which document should I look into?  Or I cannot use SPI like
that at the frist place.  If that's the case, is any workaround?  The
base line is I cannot ask db client program to create that temp table.

Thank you very much

--
LM Liu



Re: Can I use SPI in postgres.c

From
Limin Liu
Date:
Currently I am using 7.1beta4, but I just learned that these SPI code works
fine in 7.02.
We can issue "select * from tbl_tmp" and psql will return the correct
information in the temp table!

> I need to create a temp table for each db connection.  So, I add the
> dollowing code into postgres.c
> ----------------
>    SPI_connect();
>    SPI_exec("create temp table tbl_tmp (n int);",0);
>    SPI_exec("insert into tbl_tmp values (1);",0);
>    SPI_finish();
> ----------------
> right after
> ----------------
>     /*
>      * POSTGRES main processing loop begins here
>      *
>      * If an exception is encountered, processing resumes here so we
> abort
>      * the current transaction and start a new one.
>      */
> ----------------
>
> I checked the return of SPI_exec and both are fine.  Then I run psql and
> got two error messages, which contradicts to each other!
> -------------------
> db1=> select * from tbl_tmp;
> ERROR:  Relation 'tbl_tmp' does not exist
> db1=> create temp table tbl_tmp (n int);
> ERROR:  Relation 'tbl_tmp' already exists
> db1=>
> -------------------
>
> I checked the SPI document, but cannot find solution.  Can anyone please
> tells me which document should I look into?  Or I cannot use SPI like
> that at the frist place.  If that's the case, is any workaround?  The
> base line is I cannot ask db client program to create that temp table.
>
> Thank you very much
>
> --
>
> LM Liu
>