smn*_*cks 3 sql postgresql database-administration
我试图在数据库中创建一个表,它给我以下错误。
Run Code Online (Sandbox Code Playgroud)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;
Run Code Online (Sandbox Code Playgroud)
但是找不到任何东西。然后我尝试了:
Run Code Online (Sandbox Code Playgroud)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.
Run Code Online (Sandbox Code Playgroud)
并得到错误。
Postgres为每个表创建一个具有相同名称的复合类型。这就是为什么错误消息中提到“类型”而不是“表”的原因。实际上,表名不能与以下内容冲突:
r =普通表,i =索引,S =序列,v =视图,m =实例化视图,c =复合类型,t = TOAST表,f =外部表
引文来自的手册pg_class。大胆强调我的。因此,您可以在此查询中找到任何冲突的条目:
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';
Run Code Online (Sandbox Code Playgroud)
这涵盖了所有可能的竞争对手,而不仅仅是类型。请注意,同一名称可以在多个模式中多次存在-但不能在同一模式中。
如果发现有冲突的复合类型,则可以重命名或删除它以让路-如果不需要的话!
DROP TYPE tbl_last_alert;
Run Code Online (Sandbox Code Playgroud)
确保类型的架构是搜索路径中的第一个匹配项,或者确保架构限定名称。我将架构添加到上面的查询中。喜欢:
DROP TYPE public.tbl_last_alert;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1450 次 |
| 最近记录: |