On Wednesday 25 November 2009 17:25:43 Tom Lane wrote:
> Simon Riggs <simon@2ndQuadrant.com> writes:
> > An idle-in-transaction transaction can also hold a temporary file. Think
> > of an open cursor, for example. Therefore, remove the distinction
> > between CONFLICT_MODE_ERROR and CONFLICT_MODE_ERROR_IF_NOT_IDLE,
> > idle-in-transaction backends need to be killed too when a tablespace is
> > dropped.
>
> Um ... I think you have forgotten about WITH HOLD cursors, which will
> also have temp files. Implication: whatever you are thinking of here
> would require killing EVERY session. Conclusion: you need a different
> design.
Actually WITH HOLD cursors should not pose a problem - the code already tries
to handle that:
In fd.c:OpenTemporaryFile:
* BUT: if the temp file is slated to outlive the current transaction, * force it into the database's default
tablespace,so that it will not * pose a threat to possible tablespace drop attempts. */
Whether thats generally a good idea is another question.
Andres