给出以下场景: 我有一张桌子,其中基本上有两个相关的栏目:
hstore键对应于table_name中引用的表的列。 我想基于这两列自动生成一个INSERT语句,它将每个键的数据插入到该引用表的列中。当然,密钥可能会有所不同,因为基本上任何表的数据都可以出现在hstore列中。
所有这些都发生在更大的功能中。键/列以阵列形式提供。
示例:
table_name = test_table
data = "id"=>"1", "trans"=>"4", "comment"=>"asdf"
结果声明:
INSERT INTO test_table (id, trans, comment) VALUES (1,4,'asdf');
目标是拥有一个动态将数据插入到右表中的函数,无论table_name和data中指定了什么。
答案 0 :(得分:1)
这样的事情可行:
CREATE OR REPLACE FUNCTION test.ins(table_name character varying, data jsonb)
RETURNS character varying AS
$BODY$
DECLARE
_keys character varying;
_vals character varying;
_comma character varying;
x RECORD;
BEGIN
_keys = '';
_vals = '';
_comma = '';
FOR x IN (SELECT * FROM jsonb_each(data))
LOOP
_keys = _keys || _comma || x.key;
_vals = _vals || _comma || x.value;
_comma = ', ';
END LOOP;
RETURN 'INSERT INTO ' || table_name || ' (' || _keys || ') VALUES (' || _vals || ')';
END
$BODY$
LANGUAGE plpgsql IMMUTABLE
COST 100;