我们有一个带有相当大表(约 5000 万行)的 PostgreSQL 数据库。该表具有跨多个列的唯一约束,每一列都有索引。对于上下文,我最近删除了表中大约一半的行——旧数据。现在我想简单地删除多列唯一约束,所以我执行了这个 SQL:
alter table my_big_table drop constraint my_constraint_name
Run Code Online (Sandbox Code Playgroud)
但是,我在 10 多个小时前启动了该命令,它仍在运行,没有减弱的迹象。为什么删除约束需要这么长时间?有什么我遗漏的,或者有什么方法可以通过某种进度或状态指示来执行这样的操作?
(我在 Windows 64 位系统上使用 PostgreSQL 9.0,我通常使用 pgAdmin 连接到它,但我也可以使用命令行客户端或以编程方式连接。)
小智 9
第一步 - 进入任务管理器,看看是否真的发生了什么。如果您看不到大量 cpu 和/或磁盘带宽,那么它什么也没做。
第二步 - 检查 PostgreSQL 所说的正在发生的事情。这里有两个有用的系统视图:pg_stat_activity 和 pg_locks。看看两者都有什么。pg_locks 中的数据库/关系编号是内部 OID - 尝试 SELECT OID,* FROM pg_class 以查看哪些表/索引被锁定。
我的猜测是系统空闲,它只是在等待有关表上的排他锁,而其他东西正在阻止它。两个系统视图应该向您展示正在发生的事情。
归档时间: |
|
查看次数: |
9323 次 |
最近记录: |