Re: COPY FREEZE has no warning

Bruce Momjian <bruce@momjian.us>

From: Bruce Momjian <bruce@momjian.us>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Jeff Janes <jeff.janes@gmail.com>, Robert Haas <robertmhaas@gmail.com>, Andres Freund <andres@2ndquadrant.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2013-01-26T04:28:58Z
Lists: pgsql-hackers

Attachments

On Fri, Jan 25, 2013 at 11:08:56PM -0500, Tom Lane wrote:
> Bruce Momjian <bruce@momjian.us> writes:
> > ! 				ereport(ERROR,
> > ! 						(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE,
> > ! 						errmsg("cannot perform FREEZE because of previous table activity in the current transaction")));
> 
> [ itch... ]  What is "table activity"?  I always thought of tables as
> being rather passive objects.  And anyway, isn't this backwards?  What
> we're complaining of is *lack* of activity.  I don't see why this isn't
> using the same message as the other code path, namely

Well, here is an example of this message:

	BEGIN;
	TRUNCATE vistest;
	SAVEPOINT s1;
	COPY vistest FROM stdin CSV FREEZE;
	ERROR:  cannot perform FREEZE because of previous table activity in the current transaction
	COMMIT;

Clearly it was truncated in the same transaction, but the savepoint
somehow invalidates the freeze.  There is a C comment about it:

     * BEGIN;
     * TRUNCATE t;
     * SAVEPOINT save;
     * TRUNCATE t;
     * ROLLBACK TO save;
     * COPY ...

I changed it to:

        ERROR:  cannot perform FREEZE because of transaction activity after table creation or truncation

-- 
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +