Kli*_*Max 23 postgresql postgresql-8.4
我有一个视图,并希望将一个属性作为主键.
CREATE VIEW filedata_view
AS SELECT num PRIMARY KEY, id, ST_TRANSFORM(the_geom,900913) AS the_geom
FROM filedata
Run Code Online (Sandbox Code Playgroud)
但是得到一个错误
ERROR: syntax error at or near "PRIMARY"
LINE 2: AS SELECT num PRIMARY KEY, id, ST_TRANSFORM(the_geom,900913)...
Run Code Online (Sandbox Code Playgroud)
使用postgesSQL 8.4.
这该怎么做?
hmm*_*ftg 27
Postgresql中的视图不能有主键.
你基本上错误地在View上创建约束,应该在表上创建约束,但是有些DBMS确实支持使用这种语法在oracle等视图上添加约束:
ALTER VIEW VIEW_NAME ADD PRIMARY KEY PK_VIEW_NAME DISABLE NOVALIDATE;
Run Code Online (Sandbox Code Playgroud)
您只能在视图上指定唯一,主键和外键约束,并且仅在DISABLE NOVALIDATE模式下支持它们.
所以他们只支持兼容性,如果你想要一个主键来停止在filedata表的列num中插入重复数据,你应该通过改变filedata表并在其上添加主键或创建表来实现从一开始就在列num上使用主键.
Postgresql不支持视图约束.其他DBMS(例如Oracle)确实支持这一点,但Postgresql不支持.