如何使用PostgreSQL在视图中更改或更改列类型?

sha*_*468 4 postgresql

我有一个观点,他的专栏之一是时间类型整数,我想将其更改为数值。为此,我在下面的语法中使用了

ALTER VIEW view_timesheets  ALTER COLUMN timetaken type numeric;
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到了例外

“ view_timesheets”不是表,复合类型或外部表

请说明如何更改列类型。谢谢

Dan*_*iel 5

这不可能。您将必须通过提供完整的定义来重新创建视图。另请注意,更改列的类型时,您甚至无法创建或替换视图。如果您有依赖于更改视图的视图,则还必须删除/创建它们。

在我的公司中,我们采用的策略是将数据库中所有可重新创建的内容(例如视图,函数等)存储在一堆大型SQL文件中,每当底层表结构发生任何更改时,我们都会执行该文件,因此我们不会必须照顾从属观点。

这些文件中的视图部分基本上是这样的:

DROP VIEW IF EXISTS vw_a CASCADE;
CREATE OR REPLACE VIEW vw_a AS
...;

DROP VIEW IF EXISTS vw_b_depending_on_a CASCADE;
CREATE OR REPLACE VIEW vw_b_depending_on_a AS
...;
Run Code Online (Sandbox Code Playgroud)

当然,第二个CASCADE以及OR REPLACE似乎都没用,但是他们毫不犹豫地将更改的定义轻松复制并粘贴到正在运行的dev数据库中是可能的。