prepared statement - 使用参数指定表名

时间:2017-11-24 09:20:23

标签: postgresql plpgsql dynamic-sql

在Windows 10上使用pgadmin4,postgres 9.6

我尝试使用参数在预准备语句中指定表名,如下面的代码所示。但是,我确实得到如下语法错误。请注意,我可以使用带有where条件等的参数

查询

prepare mySelect(text) as 
    select * 
        from $1
        limit 100;

execute mySelect('some_table');

pgAdmin消息

ERROR:  syntax error at or near "$1"
LINE 3:      from $1
                  ^
SQL state: 42601
Character: 50

1 个答案:

答案 0 :(得分:2)

这是不可能的。 prepare语句是持久执行计划 - 执行计划包含数据源 - 因此表,列名在那里不可变。

当您更改表,列,然后更改查询的语义 - 您将获得不同的执行计划,然后在预准备语句中无法执行此操作。准备好的报表的主要用例是重用执行计划 - 计划一次,执行更多。但是有一些主要的限制 - 只能改变一些参数。