我正在编写一个脚本,该脚本将从我的模式中获取所有表并对其执行一些操作。将要使用的表具有相同的前缀和不同的后缀。现在,我要做的是在脚本的开头声明一个数组,该数组将包含我需要的所有表的所有正则表达式,例如:
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”处或附近的语法错误
将每个表名与数组中的名称进行比较的正确方法是什么?
谢谢。
答案 0 :(得分:1)
要匹配数组元素,您必须使用:
-- 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
运算符。