"Tom Lane" <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote
>
> Right, the snapshot does not become set until you do a non-utility
> command (normally, SELECT/INSERT/UPDATE/DELETE). This is a feature, not
> a bug, because it lets the transaction take table locks before its
> snapshot becomes set.
>
Hm, mostly I understand it as an optimization. What do you mean by "it lets
the transaction take table locks before its snapshot becomes set"? If we
take a snapshot at BEGIN, then the transaction can't take table locks?
test=# begin;select count(*) from k;
BEGIN
count
-------
9999
(1 row)
test=# lock table k;
LOCK TABLE
Regards,
Qingqing