我有一个视图,并希望将一个属性作为主键。
CREATE VIEW filedata_view
AS SELECT num PRIMARY KEY, id, ST_TRANSFORM(the_geom,900913) AS the_geom
FROM filedata
但是收到错误
ERROR: syntax error at or near "PRIMARY"
LINE 2: AS SELECT num PRIMARY KEY, id, ST_TRANSFORM(the_geom,900913)...
使用postgesSQL 8.4。
怎么做?
答案 0 :(得分:26)
Postgresql中的视图不能有主键。
基本上你在View上创建约束是错误的,应该在表上创建约束,但是有些DBMS支持使用这种语法在oracle等视图上添加约束:
ALTER VIEW VIEW_NAME ADD PRIMARY KEY PK_VIEW_NAME DISABLE NOVALIDATE;
您只能在视图上指定唯一,主键和外键约束,并且仅在DISABLE NOVALIDATE模式下支持它们。
所以他们只支持兼容性,如果你想让主键停止在 filedata 表的 num 列中插入重复数据,你应该这样做通过更改 filedata 表并在其上添加主键,或者从一开始就在 num 列上创建包含主键的表格。
答案 1 :(得分:9)
Postgresql不支持视图约束。其他DBMS(例如Oracle)支持这一点,但Postgresql不支持。