如何在运行ALTER或在该表上创建TRIGGER之前检查表是否忙碌或空闲

时间:2018-08-21 13:23:49

标签: postgresql triggers ddl postgresql-9.2

我们有数千张桌子。在这些表中,我们只有几个表。有时候很忙。如果我在这些表上执行任何ALTER语句或创建触发器,则将无法执行。在postgresql数据库中运行ALTER或在该表上创建TRIGGER之前,如何检查表是忙还是闲。

2 个答案:

答案 0 :(得分:1)

最简单的方法是运行

LOCK TABLE mytable NOWAIT;

如果没有错误,则ALTER TABLE语句可以继续进行而无需等待。

答案 1 :(得分:1)

下面的查询返回数据库中的锁定对象。

select t.relname, l.locktype, page, virtualtransaction, pid, mode, granted 
  from pg_locks l, pg_stat_all_tables t 
 where l.relation=t.relid 
 order by relation asc;