【问题标题】:Unable to delete a row in postgres db无法删除 postgres db 中的一行
【发布时间】:2021-09-16 07:30:38
【问题描述】:

我无法删除 postgres 数据库中的一行。这就是它所显示的

candlepin=# delete from cp_upstream_consumer where uuid = 'd88b0079-a271-4ee7-a7fe-ee3a1a7d5';

Cancel request sent
ERROR:  canceling statement due to user request
CONTEXT:  while locking tuple (0,5) in relation "cp_owner"
SQL statement "SELECT 1 FROM ONLY "public"."cp_owner" x WHERE $1::pg_catalog.text OPERATOR(pg_catalog.=) "upstream_id"::pg_catalog.text FOR KEY SHARE OF x"

这已经挂了几分钟。在我强制退出后,它说它与cp_owner 列有关系。但是当我们尝试删除cp_column 时,数据库可能会崩溃。那么还有其他方法可以删除cp_upstream_consumer 表中的条目吗?由于我是 postgres 新手,因此无法找到可能的替代方案。

这是我在 cp_owner 表中的内容

candlepin=# select * from cp_owner;
                id                |            created            |            updated            | contentprefix | defaultservicelevel | displayname | acco
unt | parent_owner |           upstream_id            | loglevel | autobind_disabled | content_access_mode | content_access_mode_list |        last_refreshe
d         | autobind_hypervisor_disabled
----------------------------------+-------------------------------+-------------------------------+---------------+---------------------+-------------+-----
----+--------------+----------------------------------+----------+-------------------+---------------------+--------------------------+---------------------
----------+------------------------------
 021308a2752d917a01752d91b05d0001 | 2020-10-16 00:12:03.997+05:30 | 2021-04-16 16:08:32.789+05:30 | /COT/$env     |                     | COT         | COT
    |              | 021308a278d03bc50178da42c1a402bd |          | f                 | entitlement         | entitlement              | 2021-04-16 16:08:32.
781+05:30 | f
(1 row)

编辑 删除几个 postgres 进程后,我尝试重新运行,这是我尝试运行删除命令时出现的新错误

candlepin=# delete from cp_upstream_consumer where uuid = 'd88b0079-a271-4ee7-a7fe-ee3a1a7d5';
ERROR:  update or delete on table "cp_upstream_consumer" violates foreign key constraint "fk_upstream_consumer_id" on table "cp_owner"
DETAIL:  Key (id)=(021308a278d03bc50178da42c1a402bd) is still referenced from table "cp_owner".

提前致谢

【问题讨论】:

    标签: sql postgresql foreign-keys sql-delete


    【解决方案1】:

    cp_upstream_consumer 有一个指向cp_owner 的外键,并且有一个长时间运行的事务在所引用的行上持有一个锁。

    杀死持有锁的数据库会话,即可删除该行。

    【讨论】:

    • 尝试删除过程,这是我现在得到的错误:错误:更新或删除表“cp_upstream_consumer”违反了表“cp_owner”上的外键约束“fk_upstream_consumer_id”详细信息:键(id)= (021308a278d03bc50178da42c1a402bd) 仍然从表“cp_owner”中引用。
    • 请新的编辑部分。 @LaurenzAlbe
    • 看起来你在另一个方向也有一个外键。删除cp_owner 中取决于您要删除的行的所有行。阅读 PostgreSQL 文档中关于外键的教程。
    • 删除 cp_owner 中的行会导致丢失一些重要数据。除了删除还有什么办法?
    • 您不能删除仍被外键引用的行。
    猜你喜欢
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 2011-03-06
    相关资源
    最近更新 更多