Проблема в создании и вызове функций и процедур в postgresql

Таблица создана,данными заполнена,необходимо реализовать примитивную функцию подсчета строк в данной таблице.Вот,какая у меня функция получилась

    CREATE OR REPLACE FUNCTION count_str(varchar v ) RETURNS bigint AS $$
            BEGIN
                   select count(*) from v;
            END;
    $$ LANGUAGE plpgsql;

не получается ее вызвать,хотя возможно и создана она неправильно,вот так вызываю:

    SELECT * from count_str("something");

something - имя таблицы.

При вызове пишет "столбец "something" не существует"


Ответы (2 шт):

Автор решения: SmellyNS

Ваша функция возвращает bigint, но вы пытаетесь обратиться к ней, как к таблице.

То есть ваше обращение эквивалентно следующей строке:

select * from 5

Попробуйте что-то похожее:

CREATE OR REPLACE FUNCTION count_str(@v table) RETURNS bigint AS $$
            BEGIN
                declare @ret bigint;
                select @ret = count(*) from @v
                return @ret;
            END;
Select count_str(tablename);
→ Ссылка
Автор решения: Aziz Umarov

Поробуйте

CREATE OR REPLACE FUNCTION count_str(v varchar) RETURNS bigint AS $$
DECLARE
    res_count BIGINT;
BEGIN
    EXECUTE 'select count(*) from ' || v INTO res_count;
    RETURN res_count;
END;
$$ LANGUAGE plpgsql;

вызвать

SELECT * from count_str("something");
→ Ссылка