Spring Data JPA / Flyway 转义双引号

Posted

技术标签:

【中文标题】Spring Data JPA / Flyway 转义双引号【英文标题】:Spring Data JPA / Flyway Escaping Double Quotes 【发布时间】:2022-01-23 20:08:47 【问题描述】:

我有一个使用 Spring Data JPA、Flyway 和 H2 的 Spring Boot 项目,它正在尝试处理包含以下 SQL 语句的迁移脚本:

ALTER ROLE current_user SET search_path TO "$user", public, my_schema;

当 Flyway 尝试运行此迁移时,我收到以下错误:

---------------------------------
SQL State  : 42001
Error Code : 42001
Message    : Syntax error in SQL statement "ALTER ROLE[*] CURRENT_USER SET SEARCH_PATH TO ""$user"", PUBLIC, MY_SCHEMA"; expected "TABLE, USER, INDEX, SCHEMA, SEQUENCE, VIEW"; SQL statement:
ALTER ROLE current_user SET search_path TO "$user", public, my_schema [42001-200]

看起来在这个过程中的某个地方,"$user" 周围的双引号被另外一组引号转义了。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

    ALTER ROLE 不是有效的h2 Command。 (这也是错误消息听起来的样子。)我认为您的意思是GRANT ROLE!(?)

    如果需要转义",请参考quoted names:

"anything"
| U&"anything" [ UESCAPE 'anything' ]

引用名称中的字符大小写保持原样。这样的名字可以 包含空格。最大名称长度为 256 个字符。 两个双引号可用于在标识符内创建一个双引号。 H2 中的默认设置标识符区分大小写。

所以"$user"应该没问题

另见:

json data type

【讨论】:

啊,我现在明白了。 “ALTER ROLE”是 postgresql 特有的。我正在使用 H2 进行测试。我必须找到一种不同的方法来测试它。 谢谢接受! :-) ... from flyway, spring-boot-specific ;(;(;(

以上是关于Spring Data JPA / Flyway 转义双引号的主要内容,如果未能解决你的问题,请参考以下文章

具有 JPA 依赖关系的 Flyway Spring Boot Autowired Bean

在 flyway 迁移脚本之前执行 JPA 表创建

Spring Boot Jpa 批处理-CannotCreateTransactionException

在 JPA 中使用 Flyway 创建的序列

创建 jpa 表后的 Flyway 迁移

为啥flyway迁移需要JPA依赖才能运行