数据仓库服务 GAUSSDB(DWS)-业务报错:UNION types %s and %s cannot be matched:处理方法

时间:2024-11-02 18:44:28

处理方法

故障构造场景

  1. 使用客户端连接DWS数据库。
  2. 执行以下SQL语句。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    CREATE TABLE t1(a int, b timestamp);
    CREATE TABLE
    CREATE TABLE t2(a int, b text);
    CREATE TABLE
    INSERT INTO t1 select 1, current_date;
    INSERT 0 1
    INSERT INTO t2 select 1, current_date;
    INSERT 0 1
    SELECT * FROM t1 UNION SELECT * FROM t2;
    ERROR:  UNION types timestamp without time zone and text cannot be matched
    LINE 1: SELECT * FROM t1 UNION SELECT * FROM t2;
                                          ^
    

解决办法

  1. 示例中,t1表和t2表在b列上类型不同,导致在UNION操作时出现类型不匹配的报错,应保证UNION各分支相同位置的输出列类型匹配。

    t2表b列是text类型,插入的数据是current_date,在插入时发生了隐式类型转换,所以插入不报错;但是在查询时,不会自动进行隐式转换,因此会报错。

    解决以上问题,需保证UNION各分支的输出列类型匹配,不满足要求时可以对输出列强制类型转化。

    1
    2
    3
    4
    5
    6
    SELECT a,b::text FROM t1 UNION SELECT a,b FROM t2;
     a |          b          
    ---+---------------------
     1 | 2023-02-16
     1 | 2023-02-16 00:00:00
    (2 rows)
    

support.huaweicloud.com/trouble-dws/dws_09_0012.html