--当pg开启一个事务,执行dml操作时,如果另一个事务要修改表结构,其不得不等待
--session1 中执行dml
postgres=# begin;
BEGIN
postgres=# select pg_backend_pid();
pg_backend_pid
----------------
4144
(1 row)
postgres=# insert into t values(2,'rudy2');
INSERT 0 1
postgres=#
--在session2 中执行ddl语句,发现其要等待
postgres=# begin;
BEGIN
postgres=# select pg_backend_pid();
pg_backend_pid
----------------
3128
(1 row)
postgres=# alter table t add password1 varchar(50);
--在session3中可以发现session2发等待session 1
postgres=# SELECT locktype,
postgres-# pg_locks.pid,
postgres-# virtualtransaction,
postgres-#
--session1 中执行dml
postgres=# begin;
BEGIN
postgres=# select pg_backend_pid();
pg_backend_pid
----------------
4144
(1 row)
postgres=# insert into t values(2,'rudy2');
INSERT 0 1
postgres=#
--在session2 中执行ddl语句,发现其要等待
postgres=# begin;
BEGIN
postgres=# select pg_backend_pid();
pg_backend_pid
----------------
3128
(1 row)
postgres=# alter table t add password1 varchar(50);
--在session3中可以发现session2发等待session 1
postgres=# SELECT locktype,
postgres-# pg_locks.pid,
postgres-# virtualtransaction,
postgres-#