Postgresql 确定传递给Pg函数的列名

Postgresql 确定传递给Pg函数的列名,postgresql,plpgsql,Postgresql,Plpgsql,我有这样一个PL/pgsql函数 CREATE OR REPLACE FUNCTION foo(colname TEXT, col INT) RETURNS REAL AS $$ BEGIN IF (colname = 'a') THEN RETURN (col * 1.5); ELSIF (colname = 'b') THEN RETURN (col * 2.5); ELSIF (

我有这样一个PL/pgsql函数

CREATE OR REPLACE FUNCTION foo(colname TEXT, col INT)
    RETURNS REAL AS $$
    BEGIN
        IF (colname = 'a') THEN
            RETURN (col * 1.5);
        ELSIF (colname = 'b') THEN
            RETURN (col * 2.5);
        ELSIF (colname = 'c') THEN
            RETURN (col * 3.5);

        .. and so on ..

        ELSE
            RAISE EXCEPTION 'Invalid column!';
        END IF;
        RETURN NULL;
    END;
    $$
    LANGUAGE plpgsql;
该函数允许我执行以下操作

SELECT foo('a', a) FROM table WHERE
如果我能帮上忙的话,我想让它变得更好,而且不必传递列名。换句话说,我希望能够做到

SELECT foo(a) FROM table WHERE

并根据传递给函数的col计算函数中的列名。有可能吗?

没有。传递给函数的只是表达式结果的值。表达式恰好是单个列名,这没有什么区别。如果您这样编写查询会怎么样

SELECT foo(a+2) FROM table WHERE ...
还是这个

SELECT foo(2+2) FROM table WHERE ...

在这些情况下,函数应该推断出列名是什么?

否。传递给函数的只是表达式结果的值。表达式恰好是单个列名,这没有什么区别。如果您这样编写查询会怎么样

SELECT foo(a+2) FROM table WHERE ...
还是这个

SELECT foo(2+2) FROM table WHERE ...
在这些情况下,函数应该推断出列名是什么