在PL / PGSQL中将字符串转换为表达式

时间:2014-04-04 08:36:36

标签: postgresql plpgsql

我正在尝试将列表列表(从信息架构中检索)转换为PostgreSQL可识别的表达式。见下图:

columns:= {'column1','column2','column3'};

我应该可以将上面的代码更改为:

columns2:= {column1,column2,column3};

我需要这样做才能让我解开水平表,如下所示:

CREATE TABLE tbl1 AS SELECT id, unnest(columns) AS key, unnest(columns2) AS value
FROM tbl_orig;

现在,因为元素是字符串,所以我最终得到的是列名而不是值本身的值。

 id| key |value |
  1|col1 | col1 |

而不是

  id | key    |    value    |
   1 |  col1  | val_of_col1 |

我需要这个,因为我正在尝试使用动态检索列来实现下面的代码:

 CREATE OR REPLACE VIEW vw_zcta_unpivot_ary
 AS 
 SELECT zip
 , unnest(
  array['hu10', 'aland', 'pop10'
 , 'awater', 'intptlat', 'intptlong', 'aland_sqmi', 'awater_sqmi'] 
) AS key
, unnest(
array[hu10::text, aland::text, pop10::text
  , awater::text, intptlat::text, intptlong::text
  , aland_sqmi::text, awater_sqmi::text] 
) AS val
FROM zcta5;

1 个答案:

答案 0 :(得分:0)

我完成了根据Loop through columns of RECORD找到的代码创建动态列的需求。

我用以下方式使用它:

CREATE TABLE tbl2 AS SELECT study,unnest(columns) AS key, unnest_table('tbl_orig') AS value FROM tbl_orig;