【发布时间】:2015-10-20 16:06:01
【问题描述】:
我在工作中的许多项目中都使用 Pentaho 数据集成。我们主要使用 Postgres 作为我们的数据库。我们的一张旧表有两列设置为类型 bit(1) 以存储 0 表示 false 和 1 表示 true。
我的任务是在我们的开发环境中将生产表与副本同步。我正在使用表格输入读取数据并立即尝试进行插入/更新。但是,由于 PDI 转换为布尔值,它失败了。我更新了查询以将值转换为整数以保留 0 和 1,但是当我再次运行它时,我的转换失败,因为整数不能是位值。
我已经寻找了几天尝试不同的方法,例如使用 javascript 步骤转换为位,但我无法成功读取位类型并使用插入/更新步骤来存储数据。我也不相信插入/更新步骤具有更新用于定义列数据类型的 SQL 的功能。
数据库连接使用:
- 连接类型:PostgreSQL
- 访问:本机 (JDBC)
- 支持布尔数据类型:true
- 引用数据库中的所有内容:true
注意:此时更改表以更改数据类型不是可选的。目前有太多应用程序依赖于此表,因此以这种方式更改它可能会导致不良影响
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
... is not optional at this point in time. Too many applications currently depend on this table so altering it in this way could cause undesirable affects您是否考虑过用 VIEW 模拟 old 行为? (如果数据仅用于只读,则容易;否则更难) -
我在 PDI 和 MySQL 中遇到过这种情况。相同的用例,在表输入后立即插入/更新。 MySQL 的解决方案是
cast(bit_column_name AS signed)。但是,我只是用 PostgreSQL 9.3 数据库和 PDI 5.4-stable 对其进行了测试,无论如何都不需要强制转换。您能否添加源表和目标表以及您运行的 PDI 版本的部分 DDL?
标签: postgresql pentaho kettle data-integration pdi