如何在字符串数组上运行PostgreSQL查询?

时间:2018-12-11 14:38:24

标签: postgresql

我正在编写一个脚本,该脚本将从我的模式中获取所有表并对其执行一些操作。将要使用的表具有相同的前缀和不同的后缀。现在,我要做的是在脚本的开头声明一个数组,该数组将包含我需要的所有表的所有正则表达式,例如:

base_tables varchar[2] := ARRAY['table_name_format_2%',
                            'another_format_3%'];

使用此数组,我想遍历我的架构中的所有表,并仅获取那些与数组中的名称模式匹配的表。 我试图这样做:

FOR table_item IN
    SELECT table_name 
    FROM information_schema.tables 
    WHERE table_name LIKE IN base_tables
    LOOP 
        ---- Some code goes here -----
    END LOOP; 

我得到的错误是:

  

错误:“ IN”处或附近的语法错误

将每个表名与数组中的名称进行比较的正确方法是什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

demo:db<>fiddle

要匹配数组元素,您必须使用:

-- general case
WHERE element = ANY(ARRAY['elem1', 'elem2'])

-- your case
WHERE table_name = ANY(base_tables)

如果您想实现LIKE的eehrm ...类似操作,则需要另一种方法:

SELECT table_name 
FROM information_schema.tables t
JOIN (SELECT unnest(base_tables) as name) bt
ON t.table_name LIKE bt.name

tables与未嵌套的base_tables数组连接(unnest将数组扩展为每个元素一行)。您可以加入LIKE运算符。

demo:db<>fiddle