1
執行以下操作方案爲我的數據庫:如何從INSERT/UPDATE規則(觸發器)執行的函數返回記錄?
create sequence data_sequence;
create table data_table
{
id integer primary key;
field varchar(100);
};
create view data_view as
select id, field from data_table;
create function data_insert(_new data_view) returns data_view as
$$declare
_id integer;
_result data_view%rowtype;
begin
_id := nextval('data_sequence');
insert into data_table(id, field) values(_id, _new.field);
select * into _result from data_view where id = _id;
return _result;
end;
$$
language plpgsql;
create rule insert as on insert to data_view do instead
select data_insert(new);
然後輸入PSQL:
insert into data_view(field) values('abc');
想看到的東西,如:
id | field
----+---------
1 | abc
而是看到:
data_insert
-------------
(1, "abc")
是否有可能以某種方式解決這個問題?
感謝您的任何想法。
最終的想法是在其他函數中使用它,以便我可以從頭開始選擇插入的記錄的id。喜歡的東西:
insert into data_view(field) values('abc') returning id into my_variable
將是不錯,但不與錯誤的工作:
ERROR: cannot perform INSERT RETURNING on relation "data_view"
HINT: You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause.
我真的不明白的暗示。我使用PostgreSQL 8.4。
謝謝。上面的簡化示例與簡單插入不同。我的邏輯需要在插入調用(實際上,查看而不是普通表)和實際物理插入之間進行一些處理,這種處理還包括決定 - 是否插入。 所以,我想看到的結果是1或沒有記錄有關插入的數據,包括分配的記錄ID。 我試過返回,它給了我一個如上所述的提示。所以,直到我錯過了你的答案 - 我仍然在尋找解決方案。將審查您的鏈接 - 謝謝。 – seas 2010-04-14 17:18:10