PostgreSQL - Format() 命名参数?

Leg*_*123 1 sql database postgresql

我有以下函数,它将表名作为参数并返回表:

CREATE FUNCTION func(tab_name varchar) RETURNS TABLE (
    col text,
    col2 text
) AS $$
BEGIN
    RETURN QUERY 
        EXECUTE format('SELECT * FROM %I', tab_name);
END;
$$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

假设相反,我想返回表 100 次:

CREATE FUNCTION func(tab_name varchar) RETURNS TABLE (
    col text,
    col2 text
) AS $$
BEGIN
    RETURN QUERY 
        EXECUTE format('
           SELECT * FROM %I
           UNION ALL
           SELECT * FROM %I,
           UNION ALL
           SELECT * FROM %I
           ......
        ', tab_name, tab_name, tab_name,.....);
END;
$$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

有什么方法可以使用命名参数,而不是将 tab_name 放置 100 次?

kli*_*lin 6

您可以指示参数的位置并多次使用参数,例如

select format('%2$s - %1$s - %2$s', 'first', 'second');

         format          
-------------------------
 second - first - second
(1 row) 
Run Code Online (Sandbox Code Playgroud)

在文档中阅读更多内容。