Re: faq 4.20: pl/pgsql temporary tables create/drop

Поиск
Список
Период
Сортировка
От Bruce Momjian
Тема Re: faq 4.20: pl/pgsql temporary tables create/drop
Дата
Msg-id 200502150436.j1F4aCj21193@candle.pha.pa.us
обсуждение исходный текст
Ответ на Re: faq 4.20: pl/pgsql temporary tables create/drop  ("Merlin Moncure" <merlin.moncure@rcsonline.com>)
Список pgsql-docs
Yes, you are right, the question was inaccurate.  Here is the updated
text:

    <H4><A name="4.20">4.20</A>) Why do I get "missing oid" errors when
    accessing temporary tables in PL/PgSQL functions?</H4>

---------------------------------------------------------------------------

Merlin Moncure wrote:
> Bruce Momijan wrote:
> > Merlin Moncure wrote:
> > > The PostgreSQL FAQ currently suggests using dynamic SQL as a
> workaround
> > > for the table OID caching problem of temp tables in pg/pgsql
> functions.
> > > While this is ok, it fails to suggest that besides the initial
> > > create/drop statements, every statement that touches the table must
> also
> > > be dynamic.
> > Uh, the FAQ reads:
> >
> >     <H4><A name="4.20">4.20</A>) Why can't I reliably create/drop
> >     temporary tables in PL/PgSQL functions?</H4>
> >
> >     <P>PL/PgSQL caches function scripts, and an unfortunate side
> effect
> >     is that if a PL/PgSQL function accesses a temporary table, and
> that
> >     table is later dropped and recreated, and the function called
> again,
> >     the function will fail because the cached function contents still
> >     point to the old temporary table. The solution is to use
> >     <SMALL>EXECUTE</SMALL> for temporary table access in PL/PgSQL.
> This
> >     will cause the query to be reparsed every time.</P>
> >
> > What should be changed?  I see it saying "function accesses a
> temporary
> > table".  The word "access" suggests all access, not just create/drop.
>
> You are 100% correct.  But something still doesn't feel right.
>
> Namely, the answer answers the question, "why can't I reliably access
> temporary tables in pg/pgsql functions?"  Note that a temporary table
> not created in a pg/pgsql function will still have this behavior.  So,
> really, it is the question that is misleading, not the answer.
>
> One possible re-phrasing would be:
> "Why do temporary tables in PL/PgSQL functions give me "missing oid"
> errors?"
>
> I think this matches the existing answer much better.  Given further
> consideration, my previous suggestions regarding using exception handing
> to manage temporary table construction, etc. would be more appropriate
> in the proper documentation than in a FAQ.
>
> I will say that for most cases of usage of temporary tables for storage
> from within pg/pgsql functions, using dynamic sql is probably not the
> optimial solution unless dynamic sql is more generally preferred.
>
> Merlin
>
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
>

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

В списке pgsql-docs по дате отправления:

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: Re: Instructions for Linux ipc config
Следующее
От: Bruce Momjian
Дата:
Сообщение: Re: How the planner uses statistics