Hi community, I am learning the transaction of the postgresql, and I try to test using these:
###### terminal 1: postgres=# select * from t; number -------- 1 (1 row) postgres=# update t set number = 2; UPDATE 1 postgres=# select * from t; number -------- 2 (1 row) postgres=# select * from t; number -------- 2 (1 row) postgres=# ###### terminal 2: postgres=# create table t (number integer); CREATE TABLE postgres=# insert into t values (1); INSERT 0 1 postgres=# begin; BEGIN postgres=*# insert into t values (2); INSERT 0 1 postgres=*# select * from t; number -------- 2 2 (2 rows) postgres=*# rollback; ROLLBACK My question is, in my view, the transaction model should make sure that when one on-process transaction don't commit itself, the data on this transaction shouldn't can be modified by other transaction(I the single-statement also be treated as a simple transaction), but why the update works?(I think terminal 1 will block until the terminal 2's transaction commit or rollback). Can someone share you opinion to me? Thanks in advance! Yours, Wen Yi