我正在尝试在postgres中创建一个新表,但是当我这样做时,只是在CREATE TABLE调用之后挂起.
$sudo usermod -s /bin/bash postgres $sudo su - postgres postgres@host:~$psql ranking_analytics psql (8.4.8) Type "help" for help. ranking_analytics=# BEGIN; BEGIN ranking_analytics=# CREATE TABLE "about_contactmessage" ( ranking_analytics(# "id" serial NOT NULL PRIMARY KEY,ranking_analytics(# "user_id" integer NOT NULL REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED,ranking_analytics(# "subject" text NOT NULL,ranking_analytics(# "message" text NOT NULL,ranking_analytics(# "recorded_time" timestamp with time zone NOT NULL ranking_analytics(# ) ranking_analytics-# ; NOTICE: CREATE TABLE will create implicit sequence "about_contactmessage_id_seq" for serial column "about_contactmessage.id"
然后它将无限期地坐在这里直到我CTRL-C它.
数据库中还有其他表,这个表尚不存在:
ranking_analytics=# \d about_contactmessage Did not find any relation named "about_contactmessage".
ranking_analytics=# insert into locations_continent (continent_name) VALUES ('testing'); INSERT 0 1 ranking_analytics=# delete from locations_continent where continent_name = 'testing'; DELETE 1
机器上有足够的驱动器空间:
$df -H Filesystem Size Used Avail Use% Mounted on /dev/xvda 21G 2.3G 18G 12% / devtmpfs 255M 132k 255M 1% /dev none 257M 476k 256M 1% /dev/shm none 257M 54k 257M 1% /var/run none 257M 0 257M 0% /var/lock
什么想法可能是错的?
如果重新启动postgres是一个选项,那么这很可能会解决问题,并且可以节省您花时间阅读其余答案:-)
检查pg_stat_activity视图,可能还有一些阻止架构更改的其他事务.
select * from pg_stat_activity where not waiting and xact_start is not NULL order by xact_start;
显示的第一行可能是导致问题的那一行.它通常是“在事务中闲置” – 这可能很好地保持锁定,如果它是一个旧事务,它也可能会扼杀性能.可能程序员忘记确保以“提交”或“回滚”结束事务,或者可能由于网络问题导致某些数据库会话卡住.
要使用pid 1234终止事务,请使用select pg_cancel_backend(1234);,如果失败,请选择pg_terminate_backend(1234).使用shell访问时,等效的命令是kill -INT 1234和kill 1234.(请记住,kill -9 1234是一个非常糟糕的主意).
还有一个视图pg_locks可能会提供一些见解,虽然它可能不容易从中获取任何有用的信息.如果grant为true,则保持锁定,当grant为false时,表示查询正在等待锁定.这里有一些关于如何从pg_locks:http://wiki.postgresql.org/wiki/Lock_Monitoring中提取有用信息的更多提示