将数组转换为 Postgres 中的行

Convert array to rows in Postgres

如果我在 SQL 语句 ('A','B','C') 中有这样的内容,我如何将它转换成像这样的多行列

col
---
 A
 B
 C

我无法更改字符串的创建方式(因为它是从外部程序注入到 SQL 查询中的)。例如,我不能将其设为 ['A','B','C'](用方括号代替)。我可以在它周围包裹任何东西,比如 [('A','B','C')] 或其他任何东西。

有什么帮助吗?

更新 1

我有 PostgreSQL 8.4.20

内置regexp_split_to_table function will do this for you. Since you plan to inject it directly without escaping, use $$ (dollar quoting) from .

select * from regexp_split_to_table(
    regexp_replace($$('A','B','C')$$, '^\(''|''\)+', '', 'g'),
    ''','''
);

您可以从 VALUES 创建一个 ARRAY 然后取消嵌套它:

SELECT 
    unnest(ARRAY[col_a, col_b, col_c]) 
FROM 
    (VALUES('A','B','C')) AS x(col_a, col_b, col_c)

结果:

| unnest |
|--------|
|      A |
|      B |
|      C |

编辑:您还可以像这样使用美元引号 ($$) 调整 ,这样您就可以将字符串连接到 SQL 语句中:

  SELECT * FROM regexp_split_to_table(
    regexp_replace(
      $$('A','B','C','D','foo')$$,
      '^\(''|''\)+', '', 'g'),
      ''','''
    );