【问题标题】:Postgresql PSQL sequence stare-down. Why does this not execute to completion?Postgresql PSQL 序列凝视。为什么这没有执行完成?
【发布时间】: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


【解决方案1】:

我实际上无法产生此错误。然而,听起来你有一把锁,阻止了工作的完成。

 postgres=# create table work_project (id int primary key);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "work_project_pkey" for table "work_project"
CREATE TABLE
postgres=# BEGIN;
BEGIN
postgres=# 
postgres=#    CREATE TABLE "work_projectinteractiveasset" (
postgres(#      "id" serial NOT NULL PRIMARY KEY,
postgres(#      "name" varchar(200) NOT NULL,
postgres(#      "image" varchar(100) NOT NULL,
postgres(#      "project_id" integer NOT NULL REFERENCES "work_project" ("id") DEFERRABLE INITIALLY DEFERRED
postgres(#    );
NOTICE:  CREATE TABLE will create implicit sequence "work_projectinteractiveasset_id_seq" for serial column "work_projectinteractiveasset.id"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "work_projectinteractiveasset_pkey" for table "work_projectinteractiveasset"
CREATE TABLE
postgres=# 
postgres=#     CREATE INDEX "work_projectinteractiveasset_project_id" 
postgres-#         ON "work_projectinteractiveasset" ("project_id");
CREATE INDEX
postgres=# 
postgres=# COMMIT;
COMMIT

postgres=# 选择版本();

版本

x86_64-pc-linux-gnu 上的 PostgreSQL 8.3.8,由 GCC gcc-4.4.real (Ubuntu 4.4.1-3ubuntu3) 4.4.1 编译 (1 行)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多