如何设置pgAdmin 4,修改表时自动删除所需依赖的表/视图?
PostgreSQL pgAdmin 中是否有类似 SSMS 的自动删除依赖对象选项?
pgAdmin 目前没有和 SSMS 里那种「修改表/视图时自动删除相关依赖对象」的对应功能。
你遇到的错误提示:
ERROR: cannot alter type of column used by a view or rule .... on view ... depends on column "name"
是因为目标列被视图引用了,PostgreSQL 默认不允许修改被依赖的列类型,除非先处理掉依赖关系。
不过你要把 text 改成 character varying 其实不用删视图——这两种类型在 PostgreSQL 里是二进制兼容的,直接用下面的命令就能完成修改:
ALTER TABLE your_table ALTER COLUMN name TYPE character varying;
如果执行时仍有报错,加上 USING 子句强制转换(大多时候不需要,但保险起见可以加):
ALTER TABLE your_table ALTER COLUMN name TYPE character varying USING name::character varying;
如果是其他不兼容的类型转换、必须处理依赖的场景,只能手动操作:
- 先删除依赖的视图/规则
- 修改列类型
- 重新创建视图/规则
可以把这些操作放到一个事务里,避免中途出现数据不一致:
BEGIN; DROP VIEW IF EXISTS your_dependent_view; ALTER TABLE your_table ALTER COLUMN name TYPE character varying; CREATE VIEW your_dependent_view AS SELECT name FROM your_table; COMMIT;
内容的提问来源于stack exchange,提问作者njminchin
相关产品推荐
相关产品推荐

