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