我有一个数据库,我已经用我想要的数据查看了。数据看起来像这样:
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 :(得分: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;
更改原始表只会更改该表而不更改视图。