4
要在第二臺通過一個唯一索引將它與第一個表自動添加一個專欄中,我有一個規則,例如如下:使用規則插入到輔助表自動遞增序列
CREATE OR REPLACE RULE auto_insert AS ON INSERT TO user DO ALSO
INSERT INTO lastlogin (id) VALUES (NEW.userid);
這工作正常,如果user.userid是一個整數。然而,如果它是一個序列(例如,類型系列或bigserial),插入表lastlogin是什麼是下一個序列id。所以這個命令:
INSERT INTO user (username) VALUES ('john');
會插入列[1, '約翰',...]爲用戶但列[2 ...]爲lastlogin。以下2個變通辦法,除了第二個消耗兩倍多的連續工作,因爲序列仍然是自動遞增:
:CREATE OR REPLACE RULE auto_insert AS ON INSERT TO user DO ALSO
INSERT INTO lastlogin (id) VALUES (lastval());
CREATE OR REPLACE RULE auto_insert AS ON INSERT TO user DO ALSO
INSERT INTO lastlogin (id) VALUES (NEW.userid-1);
不幸的是,如果我將多行的解決方法不起作用
INSERT INTO user (username) VALUES ('john'), ('mary');
第一個解決方法將使用相同的ID,第二個解決方法是所有類型的擰緊。
是否有可能通過postgresql規則來做到這一點,或者我應該簡單地做第二次插入lastlogin我自己還是使用行觸發器?實際上,我認爲行觸發器也會在我訪問NEW.userid時自動遞增序列。
感謝。觸發器起作用。我很好奇爲什麼規則自動遞增順序而不是觸發器。 – KlaxSmashing
規則是在查詢層面進行的,而不是在數據層面。他們很複雜,很容易做錯。我認爲它們主要用於創建可更新的視圖。 – Tometzky