postgresql - 如何将主键添加到 View ?

标签 postgresql

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

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

如何做到这一点?

最佳答案

Postgresql 中的 View 不能有主键。

你基本上是以错误的方式在 View 上创建约束,应该在表上创建约束,但是一些 DBMS 确实支持使用这种语法在 View 上添加约束,比如 oracle:

ALTER VIEW VIEW_NAME ADD PRIMARY KEY PK_VIEW_NAME DISABLE NOVALIDATE;

Oracle Doc For Constraints

You can specify only unique, primary key, and foreign key constraints on views, and they are supported only in DISABLE NOVALIDATE mode.

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

关于postgresql - 如何将主键添加到 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11667508/

相关文章:

sql - Postgres - 获取分配给变量的查询成本

postgresql - 数据库重构为多对多关系

postgresql - 如何将垂直表和水平表连接在一起

c# - 使用 EntityFramework 6 (C#) 连接到 PostgreSQL 数据库

postgresql - 预写日志记录如何提高 Postgres 中的 IO 性能?

postgresql - 如何在未安装 PostgreSQL 的服务器上仅下载、编译和安装 libpq 源

python - 使用 pickle 在 postgres 表中保存 python 对象

Django 在尝试创建 postgresql 数据库时抛出 "[12728] ERROR: CREATE DATABASE cannot run inside a transaction block"

sql - 如何插入带条件的 SQL 语句

sql - 如何有效地测试 Postgresql 中表列表的存在