Я хочу передать имя таблицы в качестве параметра в функции Postgres. Я пробовал этот код:
CREATE OR REPLACE FUNCTION some_f(param character varying) RETURNS integer
AS $$
BEGIN
IF EXISTS (select * from quote_ident($1) where quote_ident($1).id=1) THEN
return 1;
END IF;
return 0;
END;
$$ LANGUAGE plpgsql;
select some_f('table_name');
И я получил это:
ERROR: syntax error at or near "."
LINE 4: ...elect * from quote_ident($1) where quote_ident($1).id=1)...
^
********** Error **********
ERROR: syntax error at or near "."
И вот ошибка, которую я получил при изменении этого select * from quote_ident($1) tab where tab.id=1:
ERROR: column tab.id does not exist
LINE 1: ...T EXISTS (select * from quote_ident($1) tab where tab.id...
Возможно, работает quote_ident($1), потому что без where quote_ident($1).id=1 я получаю 1, что означает, что что-то выбрано. Почему первая quote_ident($1) работает, а вторая - не в одно и то же время? И как это можно решить?