Postgres从字符串运行SQL语句

Postgres从字符串运行SQL语句,sql,postgresql,postgresql-9.1,executequery,dynamic-queries,Sql,Postgresql,Postgresql 9.1,Executequery,Dynamic Queries,我想执行一个基于字符串的SQL语句。我通过一个返回字符串的函数创建了SQL语句。有人能解释我如何执行返回的语句吗?我知道不能用普通的SQL实现,所以我想把它放在函数中。唯一的问题是,语句中的列并不总是相同的,因此我不知道要为这些列使用哪些数据类型。我正在使用Postgres9.1.0 例如,假设从函数返回的SQL字符串为: 从abc中选择打开、关闭、丢弃 但是,它也可以是: 从abc中选择“打开” 或 从abc选择打开、关闭 如何执行这些字符串中的任何一个,以便将结果作为一个表返回,其中只包含语

我想执行一个基于字符串的SQL语句。我通过一个返回字符串的函数创建了SQL语句。有人能解释我如何执行返回的语句吗?我知道不能用普通的SQL实现,所以我想把它放在函数中。唯一的问题是,语句中的列并不总是相同的,因此我不知道要为这些列使用哪些数据类型。我正在使用Postgres9.1.0

例如,假设从函数返回的SQL字符串为:

从abc中选择打开、关闭、丢弃

但是,它也可以是: 从abc中选择“打开”

从abc选择打开、关闭

如何执行这些字符串中的任何一个,以便将结果作为一个表返回,其中只包含语句中列出的列

编辑:该函数是用PL/pgSQL编写的。结果将用于报告他们不希望看到没有值的列。因此,我编写的函数返回所有具有值的列的名称,然后将其添加到SQL语句中


谢谢你的帮助

我认为不能直接从函数返回行,因为它的返回类型未知。即使将返回类型指定为
RECORD
,也必须在调用时列出返回的列。根据韦恩·康拉德的想法,你可以这样做:

CREATE FUNCTION my_create(cmd TEXT) RETURNS VOID AS $$
    BEGIN
        EXECUTE 'CREATE TEMPORARY TABLE temp_result AS ' || cmd;
    END;
$$ VOLATILE LANGUAGE plpgsql;
然后使用如下函数:

BEGIN;
SELECT my_create(...);
SELECT * FROM temp_result;
ROLLBACK; -- or COMMIT

当您说“函数”时,您是指PL/pgSQL中的函数,还是指通用编程语言中的函数?如果是后者,我们将需要了解您与博士后互动所使用的语言和任何库。您可以单击“编辑”为您的问题添加更多信息。谢谢如果您解释您的真实用例,它可能会很有用。你为什么需要这样的东西?只是为了在屏幕上显示数据?或者将数据传递到某个地方,导出数据,将其包装到另一个语句中,创建另一个表?您是如何连接到数据库的?或者您想在命令行上执行psql并将查询传递给它吗?如果您有没有可用值的列名称,在表示层中过滤掉这些不是更好吗?大多数报告引擎都具有某种脚本功能。您可以将结果选择到临时表中,然后从临时表中删除列:。这将是缓慢和丑陋的,但我不认为会有任何漂亮的方式来做你的要求。