On Fri, Jan 25, 2013 at 11:28:58PM -0500, Bruce Momjian wrote:
> 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
Patch applied.
-- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB
http://enterprisedb.com
+ It's impossible for everything to be true. +