有人有正确的示例如何在 liquibase xml 文件中的 sql 注入中使用 env 变量吗?
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
<changeSet id="customer-change-287" author="vkvsuser">
<comment>Grant permissions to secret user</comment>
<sql>
GRANT SELECT ON TABLE email_audit TO ${app_db_user};
</sql>
<rollback>
<sql>
REVOKE SELECT ON TABLE email_audit FROM ${app_db_user};
</sql>
</rollback>
</changeSet>
</databaseChangeLog>
如果我那样用我明白了
liquibase.exception.DatabaseException: Error executing SQL GRANT SELECT ON TABLE email_audit TO ${app_db_user}: ERROR: syntax error at or near "$"
你做得对。这是有关 Liquibase 属性替换的文档:https://docs.liquibase.com/concepts/changelogs/property-substitution.html
如果找不到匹配的属性,Liquibase 将保留原始
${property}
文本。您可以检查以确保大小写匹配,例如有一个名为 APP_DB_USER
的环境变量,但将其引用为 app_db_user
。您可能需要仔细检查您的操作系统环境实际存储的内容。
最后,它可能与Liquibase 4.21.1中的这个问题有关:https://github.com/liquibase/liquibase/issues/4129
这只发生在 4.21.1 版吗?如果您使用旧版本的 Liquibase,如 4.19,它是否有效?
我们使用 Liquibase 和旧的 maven 插件(3.1.x)。当我们更新插件版本时,问题就解决了。
没有其他选择可以解决这个问题
必须使用3.10.3+版本