Wow, thanks for sharing your experience. What kind of connection pooling
are we talking about? some connection pools implement a DISCARD ALL
statement after a session close, that may help if possible to configure.

On Wed, Mar 13, 2019 at 4:21 AM Jahwan Kim <blgl13....@gmail.com> wrote:

> Hi all,
>
>
> I'd like to share my (painful) experience, in which temp tables caused
> PostgreSQL shutdown.
> TL;DR. Do not use temp tables in PostgreSQL with connection pool.
>
> * My app uses connection pool AND temp tables, with default setting of ON
> COMMIT PRESERVE ROWS.
> * I found out later that autovacuum doesn't deal with temp tables.
> * The database ages as long as the connection is not closed.
> * So when the database age reaches XID STOP LIMIT, the database refuses to
> process any new transaction requests, saying "database is not accepting
> commands to avoid wraparound data loss... HINT: Stop the postmaster and use
> a standalone backend to vacuum that database. "
>
> After reading the docs, I expected this much. What happens after this
> surprised me.
> * Now the database needs to be shutdown. When shutting down, it tries to
> remove temp tables (of course), but since the database is not accepting any
> commands, ... The temp tables are then ORPHANED, although there was no
> database crash!
> * Because of these orphan temp tables, vacuuming the database in single
> mode won't work, as suggested by HINT. The orphaned temp tables must be
> manually dropped in single mode, and only then the database can be vacuumed
> back to normal state. Without dropping temp tables, vacuuming just takes
> (quite possibly a long) time and do (almost) nothing.
>
> Well, that's all. All of the above facts are documented, albeit tersely.
> If anybody I know ask me about temp tables in PostgreSQL, I'd just say
> "DON'T."
>
>
> Best Regards,
> Jahwan
>
>
>
>
>

-- 
El genio es 1% inspiración y 99% transpiración.
Thomas Alva Edison
http://pglearn.blogspot.mx/

Reply via email to