Re: start of transaction (was: Re: [PERFORM] Help with count(*))

From: Greg Stark <gsstark(at)mit(dot)edu>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Re: start of transaction (was: Re: [PERFORM] Help with count(*))
Date: 2003-11-17 06:11:53
Message-ID: 87he13a5hy.fsf@stark.dyndns.tv
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-performance


Neil Conway <neilc(at)samurai(dot)com> writes:

> What does BEGIN actually do now, from a user's perspective?

I think you're thinking about this all wrong. BEGIN doesn't "do" anything.
It's not a procedural statement, it's a declaration. It declares that the
block of statements form a transaction so reads should be consistent and
failures should be handled in a particular way to preserve data integrity.

Given that declaration and the guarantees it requires of the database it's
then up to the database to figure out what constraints that imposes on what
the database can do and still meet the guarantees the BEGIN declaration
requires. The more clever the database is about minimizing those restrictions
the better as it means the database can run more efficiently.

For what it's worth, this is how Oracle handles things too. On the
command-line issuing a BEGIN following a COMMIT is just noise; you're _always_
in a transaction. A COMMIT ends the previous the transaction and implicitly
starts the next transaction. But the snapshot isn't frozen until you first
read from a table.

I'm not sure what other databases do, but I think this is why clients behave
like this. They think of BEGIN as a declaration and therefore initiating a
COMMIT;BEGIN; at the end of every request is perfectly logical, and works fine
in at least Oracle, and probably other databases.

--
greg

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Stephan Szabo 2003-11-17 07:09:05 Re: start of transaction (was: Re: [PERFORM] Help with
Previous Message Bruce Momjian 2003-11-17 05:46:34 Re: [PATCHES] SRA Win32 sync() code

Browse pgsql-performance by date

  From Date Subject
Next Message Stephan Szabo 2003-11-17 07:09:05 Re: start of transaction (was: Re: [PERFORM] Help with
Previous Message Bruce Momjian 2003-11-17 00:31:13 Re: start of transaction (was: Re: [PERFORM] Help with count(*))