为什么 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。

然而,错误信息可能会更好,我同意。