2017-03-22 68 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。