0

Что я хочу сделать в БД есть MyFunc()Database Trigger на колонке запроса

Затем я хочу, чтобы послать запрос вниз к БД в виде

select * from foo where col = 'my name' 

и имеют база данных обрабатывает это как:

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

Поэтому я хочу, чтобы мои функции db были скрыты разработчиком. Я хочу, чтобы они соответствовали алгоритму соответствия, но когда noobs смотрят на него, они скажут: «О, я просто отвечаю за имя и буду с ним!»

Есть ли способ скрыть эту функцию, поэтому разработчику не нужно помнить об использовании функции каждый раз?

Это, кстати, в PostgresSQL 9.2.

+1

Будьте осторожны с последствиями [помещением столбца в черный ящик] (http://use-the-index-luke.com/sql/where-clause/functions/case-insensitive-search). Предполагая, что 'col' индексируется, первым запросом является поиск индекса, а второй - полное сканирование таблицы. –

ответ

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 на столе или посмотреть, чтобы согнуть вещи. Но я не собираюсь помогать с таким сомнительным подходом.

+0

Я думаю, что после дальнейшего обсуждения с моим боссом мы откажемся от этой идеи. Спасибо за ответ, хотя. Если бы я это сделал, функция была бы способ пойти. – joncodo

Смежные вопросы