我有一個表,其中存儲2人之間的'鏈接'。爲了避免我在構建應用程序時出現進一步的複雜情況,我想創建一個可編輯的視圖,該視圖顯示鏈接記錄和鏈接記錄的反向副本。Postgres可編輯聯盟查看
如果Joe與Sally相關聯,則視圖應顯示與Sally和Sally相關的Joe鏈接到Joe。
所以我創建了一個UNION如下:
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視圖時,我可以成功編輯表視圖。但低於是,當我嘗試寫的規則與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_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的附加列)可能會出現這樣的情況,即表格本身就是UNION,編輯它可能是一個問題。
任何想法,我可以去這裏嗎?
如果您明確地擴展*以覆蓋所有8個返回列,則該規則會創建正常,並且插入正常工作(在PostgreSQL 8.4.4上進行測試)。 – 2010-07-02 14:18:49
感謝您的快速回復。你在現場。 RETURNING子句是問題。 – Oscar 2010-07-03 11:17:13