我有一个简单的使命是将巨大的MD5值插入到表(分区表)中,并创建了一个触发器和一个触发器函数来代替INSERT
操作。在函数中,我检查了NEW.md5
的前两个字符,以确定应该插入哪个表。
DECLARE
tb text;
BEGIN
IF TG_OP = 'INSERT' THEN
tb = 'samples_' || left(NEW.md5, 2);
EXECUTE(format('INSERT INTO %s VALUES (%s);', tb, NEW.*)); <- WRONG
END IF;
RETURN NULL;
END;
问题是如何将NEW.*
连接到SQL语句中?
1条答案
按热度按时间zvms9eto1#
最好使用
EXECUTE
的USING
子句:EXECUTE
不需要括号。您也知道,除非在必要的地方引用,否则标识符将折叠为小写:格式说明符
%I
,而不是format()
的%s
-这也可以防御SQL注入尝试。更多详情: