在Postgres过程中将JSON字符串转换为枚举时出现问题

时间:2018-01-12 04:05:16

标签: postgresql

我将JSON值作为枚举存储到我的表中时遇到问题。我的功能如下:

CREATE TYPE public.alertcategory AS ENUM
    ('All', 'Network', 'System');

CREATE OR REPLACE FUNCTION  updateEventTable(inputdata json)
RETURNS void AS $$
DECLARE
    alcategory text;  
BEGIN
    alcategory := inputdata ->'alertCategory';
    INSERT INTO "MyTable" ("ALERT_CATEGORY") 
                        values (alcategory ::alertcategory);      
END;
$$
LANGUAGE PLPGSQL;

下面是我在参数字段中使用JSON字符串的存储过程调用

SELECT * from updateEventTable('{"alertCategory": "System"}');

我想存储价值"系统"以枚举进入我的表格。 类型为ALERT_CATEGORY的表MyTable中的alertcategory字段。

执行存储过程后出错:

  

错误:枚举alertcategory的输入值无效:"字符串"

请告诉我这里可以使用哪些JSON帮助函数。

1 个答案:

答案 0 :(得分:1)

您必须使用->运算符替换->>运算符,该运算符为您提供TEXT而不是JSON字符串:

CREATE OR REPLACE FUNCTION  updateEventTable(inputdata json)
RETURNS void AS $$
DECLARE
    alcategory text;  
BEGIN
    alcategory := inputdata ->>'alertCategory';
    INSERT INTO "MyTable" ("ALERT_CATEGORY") 
                        values (alcategory ::alertcategory);      
END;
$$
LANGUAGE PLPGSQL;

应该有效。注意:

inputdata ->'alertCategory'

时返回"System"
inputdata ->>'alertCategory'

返回System(不带双引号)。