我必须用Flyway迁移Postgres数据库。其中一个表包含一个文本列,其中包含由Hibernate编写的XML数据。由于在Flyway中手头只有一个java.sql.Connection,所以只能使用普通的jdbc。
下面您将看到一个尝试读取数据的代码片段:
String query = "SELECT calc_proc_id, calc_key, parameters AS parameters FROM calculation WHERE parameters_json IS NULL";
int counter = 0;
try (Statement stmt = connection.createStatement())
{
try (ResultSet rs = stmt.executeQuery(query))
{
ResultSetMetaData resultSetMetaData = rs.getMetaData();
int columnType = resultSetMetaData.getColumnType(3);
String columnTypeName = resultSetMetaData.getColumnTypeName(3);
String columnName = resultSetMetaData.getColumnName(3);
logger.info("%s has %d (%s)", columnName, columnType, columnTypeName);
while (rs.next())
{
UUID calcProcId = rs.getObject("calc_proc_id", UUID.class);
String calcKey = rs.getString("calc_key");
long oid = rs.getLong("parameters");
try (LargeObject large = lom.open(oid, LargeObjectManager.READ))当达到这个开放状态时,我得到了以下异常:
org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:337) ~[postgresql-42.2.9.jar:42.2.9]
at org.postgresql.jdbc.PgConnection.executeTransactionCommand(PgConnection.java:829) ~[postgresql-42.2.9.jar:42.2.9]
at org.postgresql.jdbc.PgConnection.rollback(PgConnection.java:872) ~[postgresql-42.2.9.jar:42.2.9]
at org.flywaydb.core.internal.jdbc.TransactionTemplate.execute(TransactionTemplate.java:90) ~[flyway-core-6.0.8.jar:?]
at org.flywaydb.core.internal.command.DbMigrate.applyMigrations(DbMigrate.java:279) ~[flyway-core-6.0.8.jar:?]
at org.flywaydb.core.internal.command.DbMigrate.migrateGroup(DbMigrate.java:244) ~[flyway-core-6.0.8.jar:?]
at org.flywaydb.core.internal.command.DbMigrate.access$100(DbMigrate.java:54) ~[flyway-core-6.0.8.jar:?]
at org.flywaydb.core.internal.command.DbMigrate$2.call(DbMigrate.java:162) ~[flyway-core-6.0.8.jar:?]
at org.flywaydb.core.internal.command.DbMigrate$2.call(DbMigrate.java:159) ~[flyway-core-6.0.8.jar:?]
at org.flywaydb.core.internal.database.postgresql.PostgreSQLAdvisoryLockTemplate.execute(PostgreSQLAdvisoryLockTemplate.java:71) ~[flyway-core-6.0.8.jar:?]
...
Caused by: java.io.IOException: Unexpected packet type: 0
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2390) ~[postgresql-42.2.9.jar:42.2.9]
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:310) ~[postgresql-42.2.9.jar:42.2.9]
... 147 more有没有人以前见过这种情况并知道如何解决它?
发布于 2021-09-13 13:51:02
我以前没有见过这个错误,但据我所知,您应该能够通过简单地调用getClob("parameters")来读取TEXT列
https://stackoverflow.com/questions/69119403
复制相似问题