首先,在postgresql中,如果您确实希望将字段名和表名都大写,则需要创建表,如下所示:
CREATE TABLE "TEST" ("MULTIPROCESS" VARCHAr(20), "HTTP_REFERER" VARCHAr(50));然后查询将像:
SELECt * FROM json_populate_record(NULL::"TEST", '{"wsgi.multiprocess": true,"HTTP_REFERER": "http://localhost:9000/"}'); MULTIPROCESS | HTTP_REFERER --------------+------------------------ | http://localhost:9000/如您所见,由于json和sql表中的字段名称不匹配,因此multiprocess保留为空白。要摆脱这种情况,您可以执行外部脚本或postgresql函数。
例如:
CREATE OR REPLACe FUNCTION replace_json_keys(IN js TEXT) RETURNS json STABLE AS$$BEGIN js := replace(js, '"wsgi.multiprocess"', '"MULTIPROCESS"'); return js::json;END;$$ LANGUAGE 'plpgsql';
然后,您可以执行以下操作:
SELECT * FROM json_populate_record(NULL::"TEST", replace_json_keys('{"wsgi.multiprocess": true,"HTTP_REFERER": "http://localhost:9000/"}')); MULTIPROCESS | HTTP_REFERER --------------+------------------------ true | http://localhost:9000/但是,最好的解决方案不是使用
replace()而是
json_each()将键和值拆分为两个数组,使用“ case
when”进行循环以将json键映射到sql键,然后返回一个新的json。
json_object(keys[],values[])准备插入的对象(带有)。



