如何通过JDBC修改PostgreSQL枚举类型?
向PostgreSQL枚举类型添加值的问题与解决方案
问题场景
我尝试通过预编译语句批量向PostgreSQL枚举类型my_enum_type添加值(省略循环逻辑),代码如下:
PreparedStatement stmt = conn.prepareStatement("ALTER TYPE my_enum_type ADD VALUE ?;"); stmt.setString(1, "value"); stmt.addBatch(); stmt.executeBatch()
报错信息
运行后触发语法错误:
Batch entry 0 ALTER TYPE my_enum_type ADD VALUE 'value' was aborted: ERROR: syntax error at or near "$1"
尝试过的无效方案
我曾怀疑是类型转换问题,先后修改查询语句:
- 尝试带类型转换的写法:
仍报相同错误;ALTER TYPE my_enum_type ADD VALUE ?::my_enum_type - 改用
cast语法:
因ALTER TYPE my_enum_type ADD VALUE cast(? as my_enum_type)cast触发语法错误。
目前只能通过字符串拼接执行语句作为临时解决办法,希望找到更优方案。
补充说明
之前看到过针对枚举数据更新操作的类型转换方案,但这类方案仅适用于数据更新,不适用于ALTER TYPE修改枚举定义的场景,我试过这些方案但无效。
最终解决方案
根据Laurenz Albe的建议,修改后的可行代码如下:
try (Statement stmt = conn.createStatement()) { PGConnection pgconn = conn.unwrap(PGConnection.class); for (String i : missingValues) { stmt.addBatch("ALTER TYPE my_enum_type ADD VALUE '" + pgconn.escapeLiteral(i) + "'"); } stmt.executeBatch(); }
内容的提问来源于stack exchange,提问作者stelios
相关产品推荐
相关产品推荐

