PostgreSQL中删除提示不存在的视图A的解决方法
解决PostgreSQL中无效视图无法删除的问题
步骤1:确认视图的真实存在及正确名称
先通过系统表查询视图的准确信息,排除大小写、schema归属导致的名称匹配错误:
SELECT schemaname, viewname, definition FROM pg_views WHERE viewname ILIKE '%视图A%';
- 把
%视图A%替换成你视图的真实名称,模糊匹配可帮你定位近似名称 - 查询结果会显示视图所在的schema(比如
public)和准确名称,若创建时用双引号包裹了大小写混合的名称,这里会保留带引号的格式
步骤2:使用准确名称删除视图
根据查询到的信息,用完整对象标识符执行删除:
- 若视图在public schema且名称为小写:
DROP VIEW IF EXISTS public.视图A CASCADE;
- 若视图名称含大写或特殊字符,创建时用了双引号:
DROP VIEW IF EXISTS public."视图A" CASCADE;
IF EXISTS可避免因对象不存在报错,CASCADE会一并删除依赖该视图的其他对象(如果有的话)
步骤3:解决pgAdmin缓存问题
如果SQL命令执行成功但pgAdmin界面仍显示视图,或执行时仍报错:
- 右键点击目标数据库,选择刷新(Refresh)
- 或断开pgAdmin的数据库连接,重新连接后再尝试操作
补充说明
你遇到的情况是因为删除表2时用了DROP CASCADE,PostgreSQL仅会将依赖表2的视图标记为无效(invalid),不会自动删除。此时若删除视图时名称或schema指定错误,就会触发“找不到指定对象”的提示。
内容的提问来源于stack exchange,提问作者Thomas Wong
相关产品推荐
相关产品推荐

