在postgres

时间:2018-01-27 19:19:49

标签: sql postgresql alter-table

我正在尝试添加新列

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。

5 个答案:

答案 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;