Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres可编辑联合视图_Postgresql_View_Union - Fatal编程技术网

Postgresql Postgres可编辑联合视图

Postgresql Postgres可编辑联合视图,postgresql,view,union,Postgresql,View,Union,我有一个存储两个人之间“链接”的表。为了防止在我正在构建的应用程序上出现进一步的复杂情况,我想创建一个可编辑视图,显示链接记录和链接记录的反向副本 这意味着如果Joe链接到Sally,则视图应显示Joe链接到Sally和Sally链接到Joe 因此,我创建了一个工会,如下所示: CREATE VIEW links AS SELECT id, link_origin_id AS person_id, link_origin_id, link_rcvd_id, link_type

我有一个存储两个人之间“链接”的表。为了防止在我正在构建的应用程序上出现进一步的复杂情况,我想创建一个可编辑视图,显示链接记录和链接记录的反向副本

这意味着如果Joe链接到Sally,则视图应显示Joe链接到Sally和Sally链接到Joe

因此,我创建了一个工会,如下所示:

CREATE VIEW links AS

SELECT  id,
  link_origin_id AS person_id,
  link_origin_id,
  link_rcvd_id,
  link_type,
  link_summary,
  created_at,
  updated_at
 FROM links_data 

 UNION

 SELECT  id,
   link_rcvd_id,
   link_origin_id,
   link_rcvd_id,
   link_type,
   link_summary,
   created_at,
   updated_at
 FROM links_data
风景不错。请注意,该视图创建了一个附加列“person_id”,它不在基础表中

我在创建将编辑基础表的postgres规则时遇到问题

具体地说,当表视图不是联合视图时,我可以成功地编辑它。但以下是我尝试使用UNION视图编写规则时发生的情况:

CREATE RULE inverse_links AS ON INSERT TO links DO INSTEAD
INSERT INTO links_data
  (id, link_origin_id, link_type, link_summary, link_rcvd_id, created_at, 
   updated_at)

VALUES (nextval('people_id_seq'), new.link_origin_id, new.link_type, 
        new.link_summary, new.link_rcvd_id, new.created_at, new.updated_at)

RETURNING *;
上述规则应将编辑重定向到基础表“links\u data”

但我得到了以下错误:

ERROR:  RETURNING list's entry 3 has different type from column "link_origin_id"

********** Error **********

ERROR: RETURNING list's entry 3 has different type from column "link_origin_id"
SQL state: 42P17
我觉得有两件事可能是问题:1视图有一个额外的列,导致列类型不匹配;2表本身是一个联合,编辑这可能是个问题


你知道我该怎么做吗?

免责声明:几乎没有使用可更新视图的经验


您的RETURNING子句就是问题所在-links_数据表很可能有7列,如视图定义和ON INSERT规则所示,您使用RETURNING*返回刚插入行的内容,但视图有8列。检查并同步这两个列表。

如果您显式扩展*以覆盖所有8个返回列,则规则将创建良好的结果,插入操作将在PostgreSQL 8.4.4上正确测试。感谢您的快速回复。你说得对。返回条款就是问题所在。