gpt4 book ai didi

postgresql - Pentaho 数据集成输入/输出位类型错误

转载 作者:行者123 更新时间:2023-11-29 13:26:18 26 4
gpt4 key购买 nike

我在工作中的许多项目中都使用 Pentaho Data Integration。我们的数据库主要使用 Postgres。我们的一张旧表有两列设置为类型 bit(1) 以存储 0 表示假,1 表示真。

我的任务是将生产表与我们开发环境中的副本同步。我正在使用表输入读取数据并立即尝试执行插入/更新。但是,由于 PDI 转换为 bool 值,它失败了。我更新了查询以将值转换为整数以保留 0 和 1,但是当我再次运行它时,我的转换失败了,因为整数不能是位值。

几天来我一直在尝试不同的方法,例如使用 javascript 步骤转换为位,但我无法成功读取位类型并使用插入/更新步骤来存储数据。我也不认为插入/更新步骤具有更新用于定义列数据类型的 SQL 的功能。

数据库连接使用:

  • 连接类型:PostgreSQL
  • 访问: native (JDBC)
  • 支持 bool 数据类型:true
  • 引用数据库中的所有内容:true

注意:更改表以更改数据类型在此时不是可选的。目前有太多应用程序依赖于此表,因此以这种方式更改它可能会导致不良影响

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

您可以使用“as assignment”选项在目标数据库中创建转换对象(例如从字符变化到位)。 AS ASSIGNMENT 允许在插入期间自动应用此转换。 http://www.postgresql.org/docs/9.3/static/sql-createcast.html

这里有一些概念验证:

CREATE FUNCTION cast_char_to_bit (arg CHARACTER VARYING) 
RETURNS BIT(1) AS
$$
SELECT
CASE WHEN arg = '1' THEN B'1'
WHEN arg = '0' THEN B'0'
ELSE NULL
END
$$
LANGUAGE SQL;

CREATE CAST (CHARACTER VARYING AS BIT(1))
WITH FUNCTION cast_char_to_bit(CHARACTER VARYING)
AS ASSIGNMENT;

现在您应该能够将单字符字符串插入/更新到 bit(1) 列中。但是,您需要将输入列转换为字符变化/文本,以便在表输入步骤之后将其转换为字符串,并在插入/更新步骤中转换为字符变化。

也许,您可以使用现有的转换函数创建转换对象,这些转换函数已经在 postgres 中定义(请参阅 pg_cast、pg_type 和 pg_proc 表,通过 oid 连接),但不幸的是我没能做到这一点。

编辑 1:抱歉之前的解决方案。添加从 bool 值到位的转换看起来更合理:您甚至不需要在表输入步骤中转换数据。

CREATE FUNCTION cast_bool_to_bit (arg boolean) 
RETURNS BIT(1) AS
$$
SELECT
CASE WHEN arg THEN B'1'
WHEN NOT arg THEN B'0'
ELSE NULL
END
$$
LANGUAGE SQL;

CREATE CAST (BOOLEAN AS BIT(1))
WITH FUNCTION cast_bool_to_bit(boolean)
AS ASSIGNMENT;

关于postgresql - Pentaho 数据集成输入/输出位类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33241488/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com