在Potgresql中

时间:2017-08-30 01:00:00

标签: postgresql jsonb unpivot hstore

如何在不使用UNION的情况下在Postgresql中取消删除?我有超过100列,我正在寻找一种巧妙的方法。

给出表:

id    c1      c2      c3
1      X       Y       Z
2      A       B       C
3      Y       C       Z

所需的表格:

id   col
1     X
1     Y
1     Z
2     A
2     B
2     C
3     Y
3     C
3     Z

1 个答案:

答案 0 :(得分:3)

使用jsonb functions:

select id, value as col
from my_table,
jsonb_each_text(to_jsonb(my_table))
where key <> 'id';

 id | value 
----+-------
  1 | X
  1 | Y
  1 | Z
  2 | A
  2 | B
  2 | C
  3 | Y
  3 | C
  3 | Z
(9 rows)

SQLFiddle.

在Postgres 9.3和9.4中使用to_json()json_each_text()

在版本9.1或9.2中安装hstore

create extension if not exists hstore;

select id, value
from (
    select id, (each(hstore(my_table))).key, (each(hstore(my_table))).value
    from my_table
    ) s
where key <> 'id';