2017-03-22 74 views
0

我有一个数据库,并用我想要的数据制作了一个视图。数据看起来是这样的:在SQL中添加新列到视图

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

+0

'Alter Table Table1添加状态文本;'你可以试试吗? –

回答

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 
0

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

0

我找到答案的postgresql.org

你可以从pgAdmin通过右键单击视图并选择 CREATE SCRIPT uncomme nt:DROP VIEW;并编辑CREATE VIEW以删除该列。

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

或者,您可以从 pg_catalog.pg_attribute表中删除列。确保但是你知道你 只删除一个人的,你要删除,而不是其他表 列...使用下面的:

从pg_attribute里删去attrelid = regclass的“yourviewname”和 attname =“columnnametodrop”

最好先做几个选择的有选择 正确的,除非你:

选择attrelid :: regclass的力所能及,*从pg_attribute里,其中 attname = 'columnnametodrop'

Johan Nel。