很想知道放弃视图时会发生什么。具体来说,我想知道针对此视图执行的长时间运行查询会发生什么。
长时间运行的查询会在视图删除时失败吗? 视图的计划是否已经在内存中,并且对于长时间运行的查询不需要存在?
我主要对Postgres(& Redshift)如何处理这种情况感兴趣。
答案 0 :(得分:1)
DROP VIEW
必须对视图进行ACCESS EXCLUSIVE
锁定。
查询在使用时会对视图进行ACCESS SHARE
锁定。 ACCESS EXCLUSIVE
与此锁冲突,因此DROP VIEW
将阻止,直到长时间运行的查询完成。
试一试,看看,只需打开几个psql
个会话。您会发现它可以提供信息,以便检查select * from pg_stat_activity sa inner join pg_locks l on (sa.pid = l.pid)
。