环境:
源端:ORACLE 11G
目标端:kingbase v9
问题:
默认kingbase 不识别 oracle的raw类型,导致物化视图日志等用到raw 类型的,会报错。
解决办法,
1是直接修改物化视图日志的raw类型为 bytea
2是通过 kdb_raw 插件
create extension kdb_raw
但后续同步时,还是会报错
解决办法:
我们在kingbase 中 使用 kdb_raw 插件来处理 raw类型后,目标端同步报错处理。
create extension kdb_raw
-----安装kdb_raw之后,没有操作符ERROR: 操作符不存在raw = bytea
CREATE OR REPLACE FUNCTION public.raw_eq_bytea(
p_raw raw,
p_bytea bytea
)
RETURNS boolean
AS $$
SELECT p_raw::bytea = p_bytea;
$$
LANGUAGE SQL
IMMUTABLE
STRICT;
CREATE OPERATOR public.= (
FUNCTION = public.raw_eq_bytea,
LEFTARG = raw,
RIGHTARG = bytea
);
CREATE OR REPLACE FUNCTION public.bytea_eq_raw(
p_bytea bytea,
p_raw raw
)
RETURNS boolean
AS $$
SELECT p_bytea = p_raw::bytea;
$$
LANGUAGE SQL
IMMUTABLE
STRICT;
CREATE OPERATOR public.= (
FUNCTION = public.bytea_eq_raw,
LEFTARG = bytea,
RIGHTARG = raw
);
SELECT
decode('010203', 'hex')::raw =
decode('010203', 'hex')::bytea;
---------------------返回t
在kingbase 中,创建上面的操作符号后,问题可以解决
|