Postgresql Postgres可编辑联合视图
我有一个存储两个人之间“链接”的表。为了防止在我正在构建的应用程序上出现进一步的复杂情况,我想创建一个可编辑视图,显示链接记录和链接记录的反向副本 这意味着如果Joe链接到Sally,则视图应显示Joe链接到Sally和Sally链接到Joe 因此,我创建了一个工会,如下所示: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
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上正确测试。感谢您的快速回复。你说得对。返回条款就是问题所在。