为什么 query_to_xml return 在 Postgres 中的易变查询会出错?
Why does query_to_xml return an error for a volatile query in Postgres?
我想了解为什么这样的东西在 PostgreSQL 中不起作用:
SELECT query_to_xml('CREATE TABLE my_table (my_column INTEGER)', FALSE, TRUE, '')
给出ERROR: CREATE TABLE is not allowed in a non-volatile function
。很公平 - 但是当我检查 query_to_xml
的签名时,它 是 标记为易变的:
CREATE OR REPLACE FUNCTION pg_catalog.query_to_xml(
query text,
nulls boolean,
tableforest boolean,
targetns text)
RETURNS xml
LANGUAGE 'internal'
COST 100
VOLATILE STRICT PARALLEL UNSAFE
AS [...]
后续问题:如果不允许这样做,是否有其他方法可以 运行 没有 PL/PgSQL 的动态易失性查询?
来自manual:
The following functions map the contents of relational tables to XML
values.
这意味着您不能将此函数用于 CREATE TABLE 语句,只能使用来自 table 的 SELECT 数据并将其转换为 XML。
然而,错误信息可能会更好,我同意。
我想了解为什么这样的东西在 PostgreSQL 中不起作用:
SELECT query_to_xml('CREATE TABLE my_table (my_column INTEGER)', FALSE, TRUE, '')
给出ERROR: CREATE TABLE is not allowed in a non-volatile function
。很公平 - 但是当我检查 query_to_xml
的签名时,它 是 标记为易变的:
CREATE OR REPLACE FUNCTION pg_catalog.query_to_xml(
query text,
nulls boolean,
tableforest boolean,
targetns text)
RETURNS xml
LANGUAGE 'internal'
COST 100
VOLATILE STRICT PARALLEL UNSAFE
AS [...]
后续问题:如果不允许这样做,是否有其他方法可以 运行 没有 PL/PgSQL 的动态易失性查询?
来自manual:
The following functions map the contents of relational tables to XML values.
这意味着您不能将此函数用于 CREATE TABLE 语句,只能使用来自 table 的 SELECT 数据并将其转换为 XML。
然而,错误信息可能会更好,我同意。