重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

标题: kfs同步中,raw使用kdb_raw后,同步失败的处理 [打印本页]

作者: 郑全    时间: 5 天前
标题: kfs同步中,raw使用kdb_raw后,同步失败的处理

环境:
    源端: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 中,创建上面的操作符号后,问题可以解决







欢迎光临 重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2