与函数中的变量连接会产生错误

Concatenation with variable in function gives an error

所以我正在尝试 运行 这个功能。

CREATE OR REPLACE FUNCTION TableIteration() 
  RETURNS TABLE(table_schema text, table_name text)
  LANGUAGE plpgsql
AS
$$
DECLARE 
    tgt_schema varchar;
    list text[] := ARRAY[
    "text1",
    "text2",
    "text3",
    "text4",
    "text5",
    "text6",
    "text7",
    "text8",
    "text9"
];
BEGIN
    FOREACH tgt_schema IN ARRAY list
        LOOP
        RETURN QUERY EXECUTE
        'SELECT t.table_schema :: text, t.table_name::text from information_schema.tables t
        WHERE t.table_schema :: text='||tgt_schema; 
        END LOOP;
    END
$$

但不知何故,连接给了我预期的结果。

每次启动函数时都会出现错误:

'ERROR: column "text1" does not exist'

为什么 postgres 将我的变量解释为列?

对声明的数组元素使用单引号,对函数 format() 使用适当的文字占位符 %L:

    ...
    RETURN QUERY EXECUTE format(
    'SELECT 
        t.table_schema :: text, 
        t.table_name::text 
    FROM information_schema.tables t
    WHERE t.table_schema :: text = %L', tgt_schema); 
    ...