python (psycopg2) 中的 Postgres INSERT INTO 语句 hangs/freezes 没有插入或崩溃

Posgres in python (psycopg2) INSERT INTO statement hangs/freezes without inserting or crashing

我正在尝试将数据插入我的 persons table。我已经尝试过在 python cursor.execute(sql) 中使用游标,并通过终端连接到数据库并在其中插入。但是,程序只是在执行点停止。 我最后承诺。 table 是空的,看起来像这样:

CREATE TABLE Persons(
  AKey INT PRIMARY KEY, -- Person ID primary key
  Name VARCHAR(128) UNIQUE NOT NULL, -- Person name
  Website VARCHAR(256), -- URL for persons website
  IKey INT REFERENCES Institutions -- Institution affiliation 
);

插入示例如下所示:

INSERT INTO persons (Akey, Name, Website, IKey) VALUES(1, 'John Smith', 'www.foo.bar', 1);

没有插入,也没有产生错误。终端或 python 只是停在插入语句处,显然什么也没做。插入其他 tables 没有任何问题。

编辑: 我应该提一下,我是唯一一个在这个数据库上做交易的人,它只包含空 tables.

我想你忘记提交查询了。

完整示例如下所示:

import contextlib

import psycopg2

db_config = dict(database="...", user="...", password="...")

with contextlib.closing(psycopg2.connect(**db_config)) as connection:
    try:
        with contextlib.closing(connection.cursor()) as cursor:
            sql = "INSERT INTO persons (Akey, Name, Website, IKey) VALUES(1, 'John Smith', 'www.foo.bar', 1);"
            cursor.execute(sql)
        connection.commit()
    except:
        connection.rollback()
        raise

听起来你被一把锁挡住了。参见 Lock Monitoring。其他一些会话做了一些与您的冲突的事情,例如插入一个与您尝试插入的密钥或名称相同的人,或者从您尝试引用的机构中删除该行,并且该会话尚未提交。现在您的会话正在等待查看另一个会话是否提交或回滚。