我有一个用户定义的Postgres函数,它可以动态执行INSERT
。代码不可读,而且由于字符串转义,很难修改它。有没有办法让它看起来更好?
下面是我的代码,为了简洁起见省略了一些部分:
BEGIN
-- some code
-- escape nightmare for teammates goes here
EXECUTE 'INSERT INTO ' || _table || E'(col1, col2, col3) VALUES (\'' || _col1 ||
E'\', \'' || _col2 || E'\''|| E', \'' || _col3::text ||E'\') ON CONFLICT DO NOTHING RETURNING code' INTO _code;
-- more code
END
字符串
有没有办法简化E'\', \''
之类的东西?
3条答案
按热度按时间lnxxn5zx1#
使用**
format()
**,就像Richard已经指示的那样。这不仅更具可读性,而且还修复了原始版本中明显的SQL注入问题。另外,根本不要连接 values。使用
USING
子句将它们作为值传递:字符串
为了确保这一点,请使用模式限定的表名-不能像上面的代码那样作为单个标识符传递。模式和表名必须单独引用。请参阅:
请务必理解并使用美元报价:
g2ieeal72#
利用格式
字符串
chhkpiq43#
我所做的是添加注解--特别是结果查询的样子。你不能改变代码的工作方式,也不应该经常这样做,当有人知道最终结果会让你更容易理解代码是如何构建它的。