Как примечание, начиная с 9.2, вы можете делать вещи такими, какие вы есть. В предыдущих версиях вы должны получить сообщение об ошибке.
Тот факт, что вы не получили ошибку, говорит о том, что вы используете i_param
в конфликте с именем столбца. По этой причине я рекомендую использовать префикс входных переменных (в своей работе я использую "in_").
Например, если вы:
CREATE TABLE foo (
foo text,
bar text
);
Тогда следующее не выдаст ошибку:
CREATE FUNCTION search_foo(bar text) RETURNS SETOF foo LANGUAGE SQL AS $$
SELECT * FROM foo WHERE foo ilike bar || '%';
$$;
Однако на самом деле это будет сравнение столбца foo с столбцом столбца. Следующие ошибки приведут к ошибкам:
CREATE FUNCTION search_foo(in_bar text) returns setof foo language sql as $$
SELECT * from foo where foo ilike in_bar ||'%';
$$;
Я настоятельно рекомендую избегать переменных с такими же именами, что и аргументы. Это приводит к проблемам во многих местах.