首页 > 解决方案 > Postgres - 在较低的 UNION 选择语句中插入 NUMERIC[] 值“0”

问题描述

在 POSTGRES - 我正在尝试从 2 个表创建一个视图。当在 UNION 选择语句的下部将“0”的值编码为数据类型 NUMERIC[24,20] 的 EAST_LONGITUDE_NMBR 列的值以插入时,将生成错误消息。

视图 EXTENTS 的列 EAST_LONGITUDE_NMBR 来自表和列 CELL_EXTENT.EAST_LONGITUDE_NMBR,数据类型为 NUMERIC[24,20]

以下是代码。

    CREATE VIEW EXTENTS
    (
       ID,
       EXTENT_TYPE,
       NAME,
       EAST_LONGITUDE_NMBR
    )

    AS
       SELECT 
          "CELL_EXTENT"."CELL_ID_NMBR",
          'CELL',
          UPPER ("CELL_EXTENT"."CELL_NAME"), 
          "CELL_EXTENT"."EAST_LONGITUDE_NMBR"
       FROM "EARTH"."CELL_EXTENT"

   UNION
       (SELECT 
           "AREA_INTEREST"."AREA_ID_NMBR",
           'GEOPOLITICAL',
           UPPER ("AREA_INTEREST"."AREA_NAME"),
           0
       FROM "EARTH"."AREA_INTEREST");

在较低的 UNION 选择中插入的值 '0' 在创建视图 EXTENTS 时会导致以下错误。

错误:UNION 类型 numeric[] 和 integer 无法匹配

我尝试了以下方法并收到显示的错误:

    0                 ERROR:  UNION types numeric[] and integer cannot be matched
    0.0               ERROR:  UNION types numeric[] and numeric cannot be matched
    0.0::NUMERIC[]    ERROR:  cannot cast type numeric to numeric[]
    0::NUMERIC[]      ERROR:  cannot cast type integer to numeric[]

我查看了许多讨论 Postgres 数据类型的网站,特别是 NUMERIC、NUMERIC[]、INTEGER、DECIMAL

PSQL 中 DECIMAL 和 NUMERIC 数据类型的区别

https://github.com/npgsql/npgsql/issues/655

https://www.cybertec-postgresql.com/en/mapping-oracle-datatypes-to-postgresql/

http://www.postgresqltutorial.com/postgresql-cast/

http://www.postgresqltutorial.com/postgresql-to_number/

我可以继续,但你明白了。有很多关于数据类型的例子,但在 Postgres 代码中,对于 UNION 语句中的数据类型 NUMERIC[] 列,没有将“0”作为实际值的示例。

我觉得这是一个简单的修复,在这里或那里敲击几个键来设置正确的值,但它让我望而却步。我正在使用 pgAdmin4。

你能帮我吗?谢谢,玛格丽特

标签: postgresqltypesnumeric

解决方案


看起来很简单:使用数组而不是 0。

根据您的喜好,您可以使用

ARRAY[]::numeric[]   -- empty array

或者

ARRAY[0]::numeric[]  -- array with a single 0

推荐阅读