Search Postgresql Archives

Arrays, casting and "constrained" data types

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I stumbled across the following:

Consider the following (simplified) table:

  create table test
  (
    val     numeric(20,0),
    ref_val numeric(20,0)
  );
 
and the following very simple recursive CTE:

    with recursive tree as (
      select val, array[val] as path
      from test
      union all
      select child.val, parent.path||child.val 
      from test child
        join tree parent on parent.val = child.ref_val
    )
    select *
    from tree;

The above fails with: recursive query "tree" column 2 has type numeric(20,0)[] in non-recursive term but type numeric[] overall

However, when casting the array in the non-recursive part, it still doesn't work:

    with recursive tree as (
      select val, array[val]::numeric[] as path
      from test
      union all
      select child.val, parent.path||child.val 
      from test child
        join tree parent on parent.val = child.ref_val
    )
    select *
    from tree;

same error as before. Neither does array[val::numeric] work. 

However, appending the column to an empty array works: 

    with recursive tree as (
      select val, array[]::numeric[] || val as path
      from test
      union all
      select child.val, parent.path||child.val 
      from test child
        join tree parent on parent.val = child.ref_val
    )
    select *
    from tree;


My question is: why isn't "array[val]::numeric[]" enough to create a numeric[] array in the non-recursive part? 

I have seen the same problem with "varchar(x)" 

Thomas








[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux