26

我有一个观点,想将一个属性设为主键。

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)...

这个怎么做?

4

2 回答 2

30

Postgresql 中的视图不能有主键。

您基本上在视图上创建约束的方式是错误的,应该在表上创建约束,但是某些 DBMS 确实支持使用以下语法在诸如 oracle 之类的视图上添加约束:

ALTER VIEW VIEW_NAME ADD PRIMARY KEY PK_VIEW_NAME DISABLE NOVALIDATE;

Oracle Doc For Constraints

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

所以他们只支持它的兼容性,如果你想有一个主键来停止在filedata表的第num列中插入重复数据,你应该通过改变filedata表并在其上添加主键或创建你的表来做到这一点从一开始就在列num上使用主键。

于 2012-07-26T10:47:58.830 回答
11

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

于 2012-07-26T10:50:28.327 回答