> x...@thebuild.com wrote:
> 
>> b...@yugabyte.com wrote:
>> 
>> 2. If I send over "begin" and then "insert into s.t(v) values(42)", then (so 
>> far) a second session will not see the effect of my SQL's. It sees this only 
>> when I send over "commit". (If I send over "rollback" instead of "commit", 
>> then other sessions never know what I did.)
> 
> This may or may not be true. If the second session currently has a 
> transaction open in REPEATABLE READ or SERIALIZABLE mode, it *won't* see the 
> effects of that statement, since it took its snapshot at the start of the 
> transaction (to be technical, at the first statement in that transaction), 
> and holds it until commit time. However, a transaction in READ COMMITTED mode 
> *will* see the results after the statement completes.
> 
>> I can't see that a client-side "autocommit off" mode like psql supports 
>> brings me anything of value.
> 
> There's general agreement on that point.
> 
> https://www.cybertec-postgresql.com/en/disabling-autocommit-in-postgresql-can-damage-your-health/

Thanks, Christophe. Yes, I sacrificed correctness for brevity. I should have 
stipulated that observations made from a second concurrent session are to be 
done using a singleton "select" in its own txn—i.e. outside of an explicitly 
started txn (whether this is started by hand or using a client's implementation 
of "autocommit off"). Thanks, too, for the xref to the Cybertec post by Laurenz 
Albe.

And thanks, David, for your separate tip about using « psql -c ». I tried it 
and watched the server log. Sure enough, I saw this:

2023-02-20 12:42:44.993 PST [2540504] d0$u0@d0 LOG:  00000: statement: insert 
into s.t(v) values(17); insert into s.t(v) values(42);
2023-02-20 12:42:44.993 PST [2540504] d0$u0@d0 LOCATION:  exec_simple_query, 
postgres.c:971

It seems a bit odd that psql has no syntax to ask for this in its interactive 
mode. But, yes, it doesn't actually matter because I can get the same semantics 
by starting a txn myself.

Reply via email to