Postgresql 从另一个函数的结果创建PLPGSQL函数

Postgresql 从另一个函数的结果创建PLPGSQL函数,postgresql,triggers,plpgsql,postgresql-9.3,Postgresql,Triggers,Plpgsql,Postgresql 9.3,有人知道如何将PLPGSQL函数体设置为另一个函数结果的文本吗?例如,这就是我所尝试的: CREATE FUNCTION "Foo"() RETURNS TEXT AS $$ BEGIN RETURN 'BEGIN END;'; END; $$ LANGUAGE PLPGSQL; CREATE FUNCTION "Bar"() RETURNS TRIGGER AS "Foo"() LANGUAGE PLPGSQL; 我希望创建的“Bar”等同于以下内容: CR

有人知道如何将PLPGSQL函数体设置为另一个函数结果的文本吗?例如,这就是我所尝试的:

CREATE FUNCTION "Foo"() RETURNS TEXT AS $$
    BEGIN
        RETURN 'BEGIN END;';
    END;
$$ LANGUAGE PLPGSQL;

CREATE FUNCTION "Bar"() RETURNS TRIGGER AS "Foo"() LANGUAGE PLPGSQL;
我希望创建的“Bar”等同于以下内容:

CREATE FUNCTION "Bar"() RETURNS TRIGGER AS $$
    BEGIN END;
$$ LANGUAGE PLPGSQL;

有人知道如何完成这样的事情吗(例如,根据另一个函数的结果定义一个函数体)?谢谢,

谢谢克雷格·林格的建议。这是我为生成函数而编写的代码:

CREATE FUNCTION "Foo"() RETURNS VOID AS $$
    BEGIN
        EXECUTE
            'CREATE FUNCTION ' || QUOTE_IDENT('Bar') || '() RETURNS TRIGGER AS $a$' || chr(10) ||
            'BEGIN' || chr(10) ||
            'END;' || chr(10) ||
            '$a$ LANGUAGE PLPGSQL;';
    END;
$$ LANGUAGE PLPGSQL;

这是可以做到的,但这是一场丑陋的安全噩梦。你能解释一下你为什么要这样做吗?提供上下文可能会导致解决问题的另一种方法。如果确实要这样做,请使用
EXECUTE
运行
CREATE函数的文本,该子句是使用
format(…)
生成的。但是为什么不让一个函数调用另一个呢?还要注意,触发器函数也可以有自己的参数,如果你想实现的话。f、 前<代码>创建触发器。。。执行程序“Bar”('param 1 val',42)我之所以尝试这样做,是因为我希望对多个视图执行相同的逻辑,其中函数之间唯一的变化是视图名称(和关联的表)。我知道我可以使用EXECUTE并传入表名,但这比我在没有EXECUTE语句的情况下简单地创建同一个函数18次性能要差。我最终选择了@CraigRinger解决方案,如果有人想这么做,我会在回答中详细解释。