这个问题涉及使用 jsonb 参数中的键更新动态列名称,我的代码基于https://dba.stackexchange.com/users/3684/erwin-brandstetter提供的答案
我正在尝试编写一个通用函数,将数据从 jsonb 记录插入到具有多种数据类型的表中。如何将每个值动态转换为相应列的数据类型?
我正在使用 PostgreSQL 版本 15.2
对该函数的典型调用是:
json_data = '{
"text_field": "Some text",
"numeric_field": 17,
"datetime_field": "2023-04-24 11:06:50.36758-04",
"boolean_field": true
}'
SELECT * FROM insert_jsonb('schema_name', 'table_name', json_data);
我的功能:
CREATE OR REPLACE FUNCTION insert_from_jsonb(
sch_name text,
tbl_name text,
js jsonb,
out new_id uuid;
) AS
$func$
DECLARE
_sql text;
BEGIN
SELECT INTO _sql
'INSERT INTO ' || sch_name || '.' || tbl_name || ' ('
|| string_agg(format('%I', key), ', ') || ') VALUES ('
|| string_agg(format('%L', value), ', ') || ')' -- < how can I cast each value?
|| ' RETURNING uuid'
FROM jsonb_each_text(js);
IF _sql IS NOT NULL THEN
-- RAISE NOTICE '%', _sql; -- uncomment for debugging
EXECUTE _sql INTO new_id; -- comment out for debugging
END IF;
END
$func$ LANGUAGE plpgsql ;