gpt4 book ai didi

sql - 由于命名冲突无法创建表

转载 作者:行者123 更新时间:2023-11-29 11:40:40 25 4
gpt4 key购买 nike

我正在尝试在我的数据库中创建一个表,但出现以下错误。

ERROR:  type "tbl_last_alert" already exists
HINT: A relation has an associated type of the same name, so you must use a name that doesn't conflict with any existing type.

然后我认为该表一定存在,所以我运行了以下查询:

select * from pg_tables;

但是找不到任何东西。然后我尝试了:

select * from tbl_last_alert;
ERROR: relation "tbl_last_alert" does not exist

知道如何排序吗?

我想通过

重命名类型
ALTER TYPE v4report.tbl_last_alert RENAME TO tbl_last_alert_old;
ERROR: v4report.tbl_last_alert is a table's row type
HINT: Use ALTER TABLE instead.

并得到错误。

最佳答案

Postgres 为每个表创建一个同名的复合(行)类型。这就是错误消息提到“类型”而不是“表格”的原因。实际上,表名不能与来自 the manual on pg_class 的列表冲突:

r = ordinary table, i = index, S = sequence, t = TOAST table,v = view, m = materialized view, c = composite type, f =foreign table, p = partitioned table, I = partitioned index

大胆强调我的。因此,您可以找到任何与此查询冲突的条目:

SELECT n.nspname AS schemaname, c.relname, c.relkind
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE relname = 'tbl_last_alert';

这涵盖了所有可能的竞争者,而不仅仅是类型。请注意,同一个名称​​可以在多个架构中多次存在 - 但不是在同一架构中。

治愈

如果您发现有冲突的复合类型,您可以重命名或删除它让路 - 如果您不需要它!

DROP TYPE tbl_last_alert;

确保类型的模式是搜索路径中的第一个匹配项或模式限定名称。我将架构添加到上面的查询中。喜欢:

DROP TYPE public.tbl_last_alert;

关于sql - 由于命名冲突无法创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22343877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com