createProcedure 中的 Liquibase 标记错误
Liquibase markup error in createProcedure
我正在使用 Liquibase 创建函数,但在 SQL 中尝试使用 <
运算符时出现错误。
SQL:
<createProcedure>
CREATE OR REPLACE FUNCTION function(dateFrom timestamp, dateTo timestamp )
RETURNS TABLE
LANGUAGE plpgsql
AS $$
BEGIN
SELECT * FROM
ORDER BY date DESC
WHERE date >= AND date <
RETURN QUERY;
END;
$$;
</createProcedure>
错误:
The content of elements must consist of well-formed character data or markup.
在WHERE date >= AND date <
XML 不允许在标签的值内使用 <
或 >
,除非您将该标签的内容包装到 CDATA
部分:
<createProcedure>
<![CDATA[
CREATE OR REPLACE FUNCTION function(dateFrom timestamp, dateTo timestamp )
RETURNS TABLE
LANGUAGE plpgsql
AS $$
BEGIN
SELECT * FROM
ORDER BY date DESC
WHERE date >= AND date <
RETURN QUERY;
END;
$$;
]]>
</createProcedure>
与 Liquibase 问题无关:包装简单 SQL 查询的函数最好定义为 SQL 函数以避免 PL/pgSQL 开销:
<createProcedure>
<![CDATA[
CREATE OR REPLACE FUNCTION function(dateFrom timestamp, dateTo timestamp )
RETURNS TABLE (...)
LANGUAGE sql
AS $$
SELECT *
FROM ...
WHERE date >=
AND date <
ORDER BY date DESC
$$;
]]>
</createProcedure>
我正在使用 Liquibase 创建函数,但在 SQL 中尝试使用 <
运算符时出现错误。
SQL:
<createProcedure>
CREATE OR REPLACE FUNCTION function(dateFrom timestamp, dateTo timestamp )
RETURNS TABLE
LANGUAGE plpgsql
AS $$
BEGIN
SELECT * FROM
ORDER BY date DESC
WHERE date >= AND date <
RETURN QUERY;
END;
$$;
</createProcedure>
错误:
The content of elements must consist of well-formed character data or markup.
在WHERE date >= AND date <
XML 不允许在标签的值内使用 <
或 >
,除非您将该标签的内容包装到 CDATA
部分:
<createProcedure>
<![CDATA[
CREATE OR REPLACE FUNCTION function(dateFrom timestamp, dateTo timestamp )
RETURNS TABLE
LANGUAGE plpgsql
AS $$
BEGIN
SELECT * FROM
ORDER BY date DESC
WHERE date >= AND date <
RETURN QUERY;
END;
$$;
]]>
</createProcedure>
与 Liquibase 问题无关:包装简单 SQL 查询的函数最好定义为 SQL 函数以避免 PL/pgSQL 开销:
<createProcedure>
<![CDATA[
CREATE OR REPLACE FUNCTION function(dateFrom timestamp, dateTo timestamp )
RETURNS TABLE (...)
LANGUAGE sql
AS $$
SELECT *
FROM ...
WHERE date >=
AND date <
ORDER BY date DESC
$$;
]]>
</createProcedure>