我正在尝试将数据从MySQL数据库复制到等效的PostgreSQL数据库,使用JDBC通过Java进行加载/插入。每当我尝试复制枚举列时,我都会收到此错误:
org.postgresql.util.PSQLException:错误:列“mycol”的类型为mytable_mycol_enum,但表达式的字符类型不同
提示:您需要重写或转换表达式 位置:194
Java代码(简化和匿名):
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection mysqlConn = DriverManager.getConnection(
"jdbc:mysql://localhost/mysqldb", "user", "pass");
Class.forName("org.postgresql.Driver").newInstance();
Connection pgConn = DriverManager.getConnection(
"jdbc:postgresql://othercomp/pgdb", "user", "pass");
Statement selStatement = mysqlConn.createStatement();
ResultSet selSet = selStatement.executeQuery("SELECT * FROM mytable");
Statement insStatement = pgConn.createStatement(
ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
Resultset insSet = insStatement.executeQuery("SELECT * FROM mytable WHERE 0=1");
insSet.moveToInsertRow();
while(selSet.next())
{
ResultSetMetaData metaData = selSet.getMetaData();
for (int i = 1; i <= metaData.getColumnCount(); i++)
{
String colName = metaData.getColumnName(i);
Object obj = selSet.getObject(colName);
insertSet.updateObject(colName, obj);
}
insertSet.insertRow();
}
这适用于没有枚举列的表,但是
在MySQL中,我有mycol
enum('A','B','C')
在PostgreSQL中,我mycol
类型mytable_mycol_enum
CREATE TYPE mytable_mycol_enum AS ENUM ('A','B','C')
如何设置枚举值?
答案 0 :(得分:6)
你必须转换值,以便postgresql理解它:
插入mytable(mycol)值('A':: mytable_mycol_enum)
您可能必须使用命名的insert语句,而不是示例中的通用语句。另外,首先在psql中尝试查看它是否有效。
HTH