【问题标题】:Add a new column to a view in SQL将新列添加到 SQL 中的视图
【发布时间】:2017-08-14 05:59:50
【问题描述】:

我有一个数据库,并使用我想要的数据创建了一个视图。数据看起来像这样:

    n     |   value |
----------+---------+
 50404791 |     112 | 
  5034591 |     164 |
 50280287 |      31 |

我想添加一列这样的文本:

    n     |   value | status |
----------+---------+--------+
 50404791 |     112 |default | 
  5034591 |     164 |biggest |
 50280287 |      31 |smallest|

我试过Alter Table Table1 Add Column status text ;,但似乎文本不是数据类型。有什么建议吗?

【问题讨论】:

  • Alter Table Table1 Add status text ;你能试试这个吗?

标签: sql postgresql sql-view


【解决方案1】:

在 Rextester.com 上测试(记住,无论如何都要避免在视图中使用 SELECT *

CREATE TABLE TABLE1 (ID INTEGER);
CREATE VIEW V1 AS SELECT * FROM TABLE1;
INSERT INTO TABLE1 VALUES (0);

ALTER TABLE TABLE1 ADD COLUMN STATUS TEXT;    
INSERT INTO TABLE1 (ID, STATUS) VALUES (1, 'aaa');

SELECT * FROM V1;
DROP VIEW V1;

CREATE VIEW V1 AS SELECT * FROM TABLE1;
SELECT * FROM V1;

输出:

    id
1   0
2   1

    id  status
1   0   NULL
2   1   aaa

【讨论】:

    【解决方案2】:

    您需要删除并重新创建视图 - 您无法更改现有视图。是的,文本是一种数据类型。

    【讨论】:

      【解决方案3】:

      在 Postgres 中,您可以在不删除视图的情况下使用 CREATE OR REPLACE 并执行以下操作

          CREATE OR REPLACE VIEW View1 AS
              SELECT value, status FROM Table 1;
      

      更改原始表只会更改该表而不更改视图。

      【讨论】:

      • 只是为了给这个答案添加额外的信息,新列应该是最后一列,否则执行查询时会抛出一些错误。
      【解决方案4】:

      我在postgresql.org找到答案

      您可以在 pgAdmin 中通过右键单击视图并选择 CREATE SCRIPT 取消注释: DROP VIEW ;并编辑 CREATE VIEW 删除列。

      但是,如果视图在其他视图中使用,则必须将它们全部删除 并按顺序重新创建。

      或者,您可以从 pg_catalog.pg_attribute 表。但请确保您了解您 仅删除您要删除的表,而不删除其他表 列...使用以下内容:

      从 pg_attribute 中删除 attrelid = regclass 'yourviewname' 和 attname = 'columnnametodrop'

      最好先做几个选择,直到你有选择 正确:

      选择 attrelid::regclass 作为任何东西,* from pg_attribute where attname = 'columnnametodrop'

      约翰·内尔。

      【讨论】:

        猜你喜欢
        • 2012-05-10
        • 1970-01-01
        • 1970-01-01
        • 2011-01-03
        • 1970-01-01
        • 2022-12-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多