我尝试向 postgres 枚举类型添加值,如下所示(删除值的循环):
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
它给出了同样的错误。
和
ALTER TYPE my_enum_type ADD VALUE cast(? as my_enum_type)
它因语法错误而失败
cast
我通过将字符串与枚举值连接并执行来解决这个问题,但必须有更好的方法。
我是 postgres 新手,有没有简单的方法来解决这个问题?
编辑: 回应评论并避免混淆:
语句中的参数只能与
INSERT
、SELECT
、UPDATE
、DELETE
和VALUES
一起使用,但不能与ALTER TYPE
一起使用。
您必须自己构建查询字符串。为了避免 SQL 注入,请使用内置方法正确引用字符串:
org.postgresql.PGConnection pgconn = conn.unwrap(org.postgresql.PGConnection.class);
String query = "ALTER TYPE my_enum_type ADD VALUE " || pgconn.escapeLiteral("value");
conn.createStatement().executeUpdate(query);