如何向View添加主键?

时间:2012-07-26 10:38:31

标签: postgresql postgresql-8.4

我有一个视图,并希望将一个属性作为主键。

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。

怎么做?

2 个答案:

答案 0 :(得分:26)

Postgresql中的视图不能有主键。

基本上你在View上创建约束是错误的,应该在表上创建约束,但是有些DBMS支持使用这种语法在oracle等视图上添加约束:

ALTER VIEW VIEW_NAME ADD PRIMARY KEY PK_VIEW_NAME DISABLE NOVALIDATE;

Oracle Doc For Constraints

  

您只能在视图上指定唯一,主键和外键约束,并且仅在DISABLE NOVALIDATE模式下支持它们。

所以他们只支持兼容性,如果你想让主键停止在 filedata 表的 num 列中插入重复数据,你应该这样做通过更改 filedata 表并在其上添加主键,或者从一开始就在 num 列上创建包含主键的表格。

答案 1 :(得分:9)

Postgresql不支持视图约束。其他DBMS(例如Oracle)支持这一点,但Postgresql不支持。