列查询的数据库触发器

时间:2014-01-03 18:58:59

标签: ruby-on-rails database postgresql database-design triggers

我想在db中做的是MYFUNC()

然后我想以

的形式向db发送查询
select * from foo where col = 'my name'

让数据库处理它:

select * from foo where MYFUNC(col) = MYFUNC('my name')

所以我想让我的db函数隐藏给开发人员。我希望它们根据匹配的算法进行匹配,但是当新手看到它时,他们会说,'哦,我只是将名称与名称相匹配并完成它!'

有没有办法隐藏这个功能,所以开发人员不需要记得每次都使用该功能?

顺便说一下,这是在PostgresSQL 9.2中。

1 个答案:

答案 0 :(得分:1)

您可以将其封装在纯SQL函数中:

CREATE OR REPLACE FUNCTION f_get_foo(text)
  RETURNS SETOF foo AS
$func$
SELECT * FROM foo WHERE myfunc(col) = myfunc($1)
$func$
  LANGUAGE sql;

然后呼叫将是:

SELECT * FROM f_get_foo('my name');

触发器不直接适用于此。
可以在表格或视图上使用rules来弯曲。但我不打算采取这种可疑的做法。