我正在尝试添加新列
ALTER TABLE "Cidade" ADD COLUMN "BoundBox" VARCHAR(255)
到这张表:
"Cidade"
"Id" integer not null
constraint "Cidade_PK"
primary key,
"Nome" varchar(120),
"EstadoId" integer not null
constraint "Estado_Cidade_FK"
references "Estado",
"PontoCentralLatitude" numeric,
"PontoCentralLongitude" numeric
但查询永远不会完成,我已经等了5分钟,什么都没发生。该表只有5,000条记录,因为它阻止了对表的访问,所以我不能等待太多时间。 我有一个测试数据库(等于生产),它工作得非常快。 postgres版本是9.5.6。
答案 0 :(得分:4)
如果您正在运行PostgreSQL 9.6+,您可以使用class MyApp(App):
def build(self):
return sm
def on_pause(self):
return True
def on_resume(self):
return sm
查找锁定您的查询的PID。
pg_blocking_pids()
答案 1 :(得分:3)
此语句非常快,但需要对表进行访问独占锁定。必须有一个长时间运行的事务,它会锁定表并阻止你。
使用pg_stat_activity
视图查找长期交易。
答案 2 :(得分:1)
根据你的描述,似乎这个表在系统中被高度使用,你的alter语句需要时间来获取表上的锁来完成这项工作。尝试找到一个窗口,您可以减少系统负载并运行。
答案 3 :(得分:0)
坦克的帮助,这是一个阻止我的ALTER TABLE的查询。
答案 4 :(得分:0)
如果没有什么阻止您的查询和查询执行很长时间,并且此表有许多DELETE查询尝试清理您的表:
VACUUM (VERBOSE, ANALYZE) table_name;