在SQL中向视图添加新列

时间:2017-03-22 08:28:35

标签: sql postgresql sql-view

我有一个数据库,我已经用我想要的数据查看了。数据看起来像这样:

    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 ;,但似乎文字不是数据类型。有什么建议吗?

4 个答案:

答案 0 :(得分:2)

在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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我在postgresql.org

找到了答案
  

您可以通过右键单击视图从pgAdmin进行操作并选择   CREATE SCRIPT取消注释:DROP VIEW;并编辑CREATE   查看以删除列。

     

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

     

或者,您可以从中删除列   pg_catalog.pg_attribute表。但要确保你认识你   只删除您要删除的一个而不删除其他表   列...使用以下内容:

     

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

     

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

     

从pg_attribute中选择attrelid :: regclass为*,*   attname =' columnnametodrop'

     

Johan Nel。

答案 3 :(得分:0)

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

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

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