PostgreSQL:"please specify covering index name" 是什么意思

PostgreSQL: What is meant by "please specify covering index name"

我想编辑 table 中的动作。但是,当我尝试编辑 FK 时收到错误消息 "Please specify covering index name."。我该如何解决这个问题?

table只包含两列:

外键:

类别 FK:

我无法重现你的问题,因为 pgAdmin4 首先不允许我更改约束(除了它的名称)的任何内容,所以我无法达到它会抛出我的地步这样的错误。所有进行更改的功能都在那里,但它们都是灰色的。

此外,PostgreSQL 本身不允许您更改 FK 约束上的操作("ALTER TABLE" 根本没有实现它的变体),因此您必须删除并重新创建。因此,pgAdmin4 不会让我在无法完成此类操作时对其进行建模也就不足为奇了。

我不知道你是如何让它产生这个错误的,但这可能是 pgAdmin4 中的一个表示错误,它正在将错误情况报告为错误,但没有帮助的消息。

我遇到了同样的问题。真的很难重现它。

我需要添加几个外键。所以我开始添加新的列和新的外键。在某些时候,在 pgAdmin 中的每个操作之后都会出现此错误 "Please specify covering index name."。也许我为列使用了不正确的名称,因为我复制粘贴了名称并且可能有不正确的符号,我不知道。

所以为了修复它我恢复了所有更新:删除了所有新外键和新列。然后这个错误就消失了。

作为另一种解决方案,我认为最好只编写 SQL 查询来添加一些外键。

我有同样的错误。问题是我在其他 table 中有另一个同名的外键。我认为 postgres 跟踪覆盖索引和外键的名称并且不允许相同的名称。所以你必须使用另一个名字。

我的情况有效 - 如果您 在新创建的外键上手动打开 "Validated?" 选项 并在先前创建的外键上打开 "edit"键,然后消息消失,您可以保存约束。似乎是某种错误。

在我们的案例中,这有帮助:在保存“新 FK”之前,首先打开“以前创建的 FK”的“编辑选项”,并且不要更改 然后 return 到“新创建的 FK”编辑选项,神奇地激活保存按钮

我刚刚解决了这个问题,根据 https://www.pgadmin.org/docs/pgadmin4/4.19/foreign_key_dialog.html 创建外键时选择 "Auto FK Index" 时覆盖索引警告被激活。这是默认启用的。我仔细检查并取消选中 table 上的每个索引,这给我带来了问题,消息消失了。

这个问题对我来说是随机发生的。我刚刚发现,如果我转到 constraints -> primary key 选项卡并单击垃圾桶图标,然后当确认删除对话框出现时,我将其取消并弹出,错误消失并启用保存按钮!

这是我的解决方案:

  1. Table -> 属性 -> 约束 -> 外键 -> 单击所有外键的删除图标。

  2. Table -> 属性 -> 约束 -> 外键 -> 再次添加外键。

我猜你改变了当前 FK 或添加了导致此问题的新 FK。

临时解决方法:使用 pgAdmin

如果你只有一个外键:

点击编辑展开,再次点击折叠,保存按钮应该再次启用。

如果你有多个外键:

在每个外键条目上重复,单击编辑和“取消编辑”对于每个外键,保存按钮应该是每次点击后重新启用

通常,每当我想向约束中添加任何内容时弹出错误,我都会展开和折叠每个外键,保存按钮应该会再次起作用。

为动作,

如果要添加一个动作,eg: On update/On delete

错误消息将再次弹出。 不要忘记点击“+”按钮添加列,然后重复上述步骤(展开、折叠)清除错误消息,然后您就可以保存外键了。 是啊~我知道丑...

用于更新现有外键的操作

目前,我不知道任何解决方法,但丑陋的方式...

删除fkey -> 重新创建外键 -> 更新操作 -> 通过上述步骤清除错误消息 -> 保存。

只需输入外键索引名称...几个字母fki_index_name(如果你想要一个索引生成“自动FK索引”或关闭它!

是的,它看起来像是 pgadmin 中的错误,而不是 postgresql

PgAdmin 在左侧有一个浏览器,select table 然后转到 Constraints,右键单击要更改的外键,然后在属性中可以改变它。

尝试使用查询工具添加列:

ALTER TABLE x ADD COLUMN c INT NOT NULL
CONSTRAINT xy_fk_c REFERENCES y (a)

其中: x 将是当前 table 名称,c 将是您要创建的列,xy_fk_c 将是外键名称,y 将是您的外键 table 的引用,a 将是引用列。