【问题标题】:Spring Data JPA / Flyway Escaping Double QuotesSpring Data JPA / Flyway 转义双引号
【发布时间】: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" 周围的双引号被另外一组引号转义了。

我该如何解决这个问题?

【问题讨论】:

    标签: sql jpa spring-data-jpa h2 flyway


    【解决方案1】:
    1. ALTER ROLE 不是有效的h2 Command。 (这也是错误消息听起来的样子。)我认为您的意思是GRANT ROLE!(?)

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

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

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

    所以"$user"应该没问题

    另见:

    【讨论】:

    • 啊,我现在明白了。 “ALTER ROLE”是 postgresql 特有的。我正在使用 H2 进行测试。我必须找到一种不同的方法来测试它。
    • 谢谢接受! :-) ... from flyway, spring-boot-specific ;(;(;(
    猜你喜欢
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 2013-06-17
    • 2021-07-14
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多