我想使用在 Java 中运行的迁移器升级我的 PostgreSQL 数据库架构,并且我正在使用 JOOQ 为我的项目生成 Java 文件。目前,要升级我的数据库模式,我必须删除旧索引并将其替换为显式 SQL 查询,包括 varchar_pattern_ops aka
String sqlQuery = String.format("CREATE INDEX %s ON %s (%s varchar_pattern_ops);", indexName, tableName, columnName);
PreparedStatement createIndexStatement = conn.prepareStatement(sqlQuery);
createIndexStatement.execute();
有没有办法避免这种方法并使用 JOOQ 开箱即用的类?
jOOQ 永远不会支持其 DSL API 中开箱即用的所有数千个供应商特定存储子句,但使用 plain SQL templates 作为解决方法总是相对容易,因此您当然不必回退到使用 JDBC:
ctx.execute("create index {0} on {1} ({2} varchar_pattern_ops)",
name(indexName),
name(tableName),
name(columnName)
);
甚至:
ctx.createIndex(indexName)
.on(table(name(tableName)), field("{0} varchar_pattern_ops", name(fieldName)))
.execute();
记住在运行 SQL 时切勿连接字符串,以避免 SQL 注入和语法错误。出于这个原因,我的示例在普通 SQL 模板中使用了带引号的标识符。