【发布时间】:2014-05-16 12:05:25
【问题描述】:
使用 postgreSQL 9.1.9,我有一些这样的 SQL 请求:
INSERT INTO "my_table" VALUES(10,'James','California');
下面是原始名称查找表的简化表...
names
name_id name
--- -----
3 James
但实际上我不必输入(进入“my_table”)SQL请求提供的文本值(人名,州名),而是其对应的ID位于另一个表中(例如:名称表)
所以我正在考虑创建一个触发器,调用一个应该执行选择 SQL 请求并返回要插入的修改行的函数。
这可能吗?
CREATE FUNCTION insert_by_ID() RETURNS TRIGGER AS '
BEGIN
--Can we execute this query, store the result in a variable to be added
to the NEW record?
SELECT name_id from names where name=NEW.name;
--this request would be...
--SELECT name_id from names where name='James'
RETURN NEW;
END;
' LANGUAGE plpgsql;
CREATE TRIGGER insert_info_ID
BEFORE INSERT ON my_table
FOR EACH ROW
EXECUTE PROCEDURE insert_by_ID();
【问题讨论】:
-
当然可以,但可能是多余的。用 my_table 和 names 定义完成您的问题。
-
在 psql 中运行
\d names并发布输出。另外,总是你的 Postgres 版本。并请澄清模糊的解释。 -
你的问题还不清楚。我猜你可能需要一个可更新的视图。请阅读这篇文章:vibhorkumar.wordpress.com/2011/10/28/instead-of-trigger
-
我们是在处理可以总是在表
names中找到的名称,还是如果没有找到,您想插入名称并继续新创建的name_id?如果是这样,我们是否正在处理繁重的并发写入负载?
标签: sql postgresql plpgsql