Postgresql 表函数的循环
我是Posgresql的新手 我有一个表格功能: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
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)
;