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. +