我在PostgreSQL存儲過程中將記錄的字段定義爲區分大小寫時遇到問題。我定義我的記錄爲:在PotgreSQL存儲過程中使記錄字段區分大小寫
CREATE TYPE json_record AS (
"objectType" text ,
"objectSubtype" text
};
我之所以需要的字段區分大小寫是因爲該記錄是由JSON存儲過程填充,我有過JSON內容沒有控制權
我的存儲程序是:
CREATE OR REPLACE FUNCTION record(id uuid, json_in json) RETURNS void AS $$
DECLARE
raw_record json_record;
BEGIN
SELECT json_populate_record(NULL::json_record, json_in) INTO raw_record;
INSERT INTO my_resource (uuid, type, subtype)
SELECT (id, raw_record.objectType, raw_record.objectSubtype);
END;
$$ LANGUAGE plpgsql VOLATILE;
當我執行我收到錯誤的過程:
ERROR: record "raw_record" has no field "objecttype"
我瞭解錯誤的原因:「json_record」是用區分大小寫的字段定義的,但PostgreSQL的執行引擎將raw_record.objectType和raw_record.objectSubtype轉換爲raw_record.objecttype和raw_record.objectsubtype。問題是如何避免這種情況,並強制記錄的字段被視爲區分大小寫。我能想到的唯一解決方案是使用動態SQL,逐個構建查詢並將字段包裝在quote_ident()中,但我想知道是否有更簡單的解決方案來強制記錄的區分大小寫?
@a_horse_with_no_nameThank你了。我沒有意識到我可以用這種方式加雙引號。你的建議解決了我的問題 – MrkK 2015-03-30 20:04:29