【发布时间】:2010-03-10 01:03:26
【问题描述】:
我在 psql 中试图为 python 管理员创建一个表。它实际上是工作管理员的扩展,所以我添加了一个新表和一些关系。当我按以下顺序输入时,它永远不会执行完成:
BEGIN;
CREATE TABLE "work_projectinteractiveasset" (
"id" serial NOT NULL PRIMARY KEY,
"name" varchar(200) NOT NULL,
"image" varchar(100) NOT NULL,
"project_id" integer NOT NULL REFERENCES "work_project" ("id") DEFERRABLE INITIALLY DEFERRED
);
CREATE INDEX "work_projectinteractiveasset_project_id"
ON "work_projectinteractiveasset" ("project_id");
COMMIT;
提示以
结尾注意:CREATE TABLE 将为串行列“work_projectinteractiveasset.id”创建隐式序列“work_projectinteractiveasset_id_seq”
但它只是停留在那里,直到我 ctrl-c 退出它。有什么方法可以强制完成吗?
【问题讨论】:
-
在添加
create table work_project ( id serial primary key );后,我安装的 PostgreSQL 8.2 运行时不会出错。我怀疑这些查询有一些外部因素在起作用。 -
@Pythovore:你使用的是什么版本的 Postgres?另一种方法是不使用
serial关键字并手动设置序列 -
"NOT NULL" 与 "PRIMARY KEY" 是多余的(但这不是你的问题)。它卡在哪条线上?也就是说,当您注释掉 CREATE INDEX 时会发生什么?您是否在某处有一个长时间运行的事务(例如,另一个 psql 会话,您在其中键入“begin”,对该表执行了某些操作,并且从未键入“abort”或“commit”)?
-
alter 表也会挂起。你在某处有一个长期运行的事务。任务是找到它。 ptop (ptop.projects.postgresql.org) 可能会帮助您发现它。
-
是的,就是这样!有一个卡住的事务需要被终止。谢谢大家!这次只有 6 根白发……
标签: sql postgresql