Postgresql 表函数的循环

Postgresql 表函数的循环,postgresql,Postgresql,我是Posgresql的新手 我有一个表格功能: CREATE OR REPLACE FUNCTION stage.get_primary_key_info( schemaName text, tableName text ) RETURNS TABLE(constraint_name text, column_name text) AS $BODY$ SELECT c.constraint_name, c.column_name FROM inform

我是Posgresql的新手

我有一个表格功能:

CREATE OR REPLACE FUNCTION stage.get_primary_key_info(
    schemaName text, 
    tableName text
) RETURNS TABLE(constraint_name text, column_name text) AS 
$BODY$

    SELECT c.constraint_name, c.column_name
      FROM information_schema.key_column_usage AS c
      LEFT JOIN information_schema.table_constraints AS t
             ON t.constraint_name = c.constraint_name
      WHERE t.table_schema = schemaName
        AND t.table_name = tableName
        AND t.constraint_type = 'PRIMARY KEY'
    ;

$BODY$ LANGUAGE sql;
我试着使用这个函数,比如:

FOR c IN (SELECT * FROM stage.get_primary_key_info(target_schema, stmt.tablename))
LOOP
    joinFields = joinFields || FORMAT('t.%s = s.%s AND', c.column_name);
END LOOP;
但我有一个错误:

元组的循环变量必须是记录类型的变量 或元组或标量变量列表


尝试将
c
声明为
记录
格式
字符串中还缺少第二个参数

另外,看一看,您可能能够完全跳过该循环。下面是一个示例(用
y
替换第二个参数):


由于WHERE条件,当左连接变成内部连接时,为什么要使用左连接?
SELECT string_agg(FORMAT('t.%s = s.%s', column_name, 'y'), ' AND ')
  FROM get_primary_key_info(target_schema, stmt.tablename)
;