如何向View添加主键?

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)

Oracle Doc for Constraints

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

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

  • @KliverMax:来自[docs](http://www.postgresql.org/docs/8.4/static/sql-createview.html):_您可以通过创建重写插入等的规则来获得可更新视图的效果.关于对其他表的适当操作的视图._另外google搜索_postgresql可更新的views_应该给你很多建议. (2认同)

Col*_*art 9

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

  • 与已接受的答案相比,我更喜欢这个答案,因为它提供了与其他 DBMS 的比较。我发现 Oracle 能够提供此功能很有趣。 (2认同)