varchar类型的SymmetricDS长度不能超过N

时间:2018-08-13 06:34:30

标签: java database h2 symmetricds

所以我正尝试使用symmetricDS将Java h2数据库复制到postgres。我正在使用zip文件简单配置。这是发生了什么。我遵循了入门指南,下载了对称文件,然后尝试演示,然后尝试使用自己的配置并在触发器中添加了一些表。但是:

  • 如果我在varchar中复制不包含h2字段的表,则效果很好。
  • 如果我有一个包含varchar字段的表,则在创建表时会崩溃。

JdbcSqlTemplate - ERROR: length for type varchar cannot exceed 10485760 Position: 161. Failed to execute: CREATE TABLE "asset"( "db_id" BIGINT NOT NULL DEFAULT nextval('"asset_db_id_seq"'), "id" BIGINT NOT NULL, "account_id" BIGINT NOT NULL, "name" VARCHAR(2147483647) NOT NULL, "description" VARCHAR(2147483647), "quantity" BIGINT NOT NULL, "decimals" SMALLINT NOT NULL, "initial_quantity" BIGINT NOT NULL, "height" INTEGER NOT NULL, "latest" BOOLEAN DEFAULT 'TRUE' NOT NULL, PRIMARY KEY ("db_id") )

确实出现了一个明显的错误,说varchar不应超过255,但这就是源数据库的方式,是否有任何办法将任何varchar强制为TEXT类型?还是有其他解决方法?还是symmetricds中的错误尚未解决?

谢谢。

1 个答案:

答案 0 :(得分:1)

我设法通过手动在目标数据库上创建表来解决此问题。这是我在运行bin/sym之前所做的事情。

  • 通过dbexport使用bin/dbexport --engine corp-000 --compatible=postgres --no-data table_a table_b > samples/create_asset_and_trade.sql生成我要创建的表的查询
  • 修改生成的查询文件samples/create_asset_and_trade.sql中的缺陷。就我而言,这就是varchar的长度。
  • 解决此问题后,运行生成的查询以使用dbimport填充目标数据库。 bin/dbimport --engine store-001 samples/create_asset_and_trade.sql
  • 现在可以正常运行bin/sym,它将检测到表已创建,并跳过表创建步骤。

这不是理想的方法,但目前应该可以使用。