暂无图片
在postgresql中用枚举来代替字典,如何做到类似添加字典值的功能给自定义的枚举加枚举值?
我来答
分享
暂无图片 匿名用户
在postgresql中用枚举来代替字典,如何做到类似添加字典值的功能给自定义的枚举加枚举值?

在pg中用枚举来代替字典,如何做到类似添加字典值的功能给自定义的枚举加枚举值?

我来答
添加附件
收藏
分享
问题补充
7条回答
默认
最新
游湖

路过

暂无图片 评论
暂无图片 有用 1
shunwahⓂ️

在PostgreSQL 13中有一个自定义枚举类型,定义为:

CREATE TYPE public.dbscale AS ENUM
    ('A', 'B', 'C', 'D', 'Z');

尝试使用下面sub-select中的dbscale枚举时,我得到一个
error: 42703 column “dbscale”\ does not exist.

CREATE OR REPLACE FUNCTION public.xfertodecibellog(
    jobid integer,
    instid integer)
    RETURNS void
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
AS $BODY$
BEGIN
    INSERT INTO decibellog(jobid, 
                           instrumentid,
                           readingdate,
                           readingtime,
                           decibelreading,
                           dbweighting)
    SELECT @jobid,
           @instid,
           CAST(dbdate AS date),
           CAST(dbtime AS time),
           CAST(dbvalue AS double precision),
           CASE dbunit 
                WHEN 'dB(B)' THEN (dbscale).B
                WHEN 'dB(C)' THEN (dbscale).C
                WHEN 'dB(D)' THEN (dbscale).D
                WHEN 'dB(Z)' THEN (dbscale).Z
                ELSE (dbscale).A
           END
    FROM stagingdecibellog;
END;
$BODY$;
暂无图片 评论
暂无图片 有用 0
鸿惊九天
2022-12-06
Z
zwx

mark

暂无图片 评论
暂无图片 有用 1
zwx
答主
2022-12-05
风行

路过

暂无图片 评论
暂无图片 有用 0
鸿惊九天

排队学习

暂无图片 评论
暂无图片 有用 0
游湖

mark

暂无图片 评论
暂无图片 有用 1
彭冲

使用这个语句

alter type XXX add value yyy...

再赠送一个问题,该语句属于DDL,应用层如果要防注入可以使用函数封装

create type currency as enum ('USD','EUR','GBP');

CREATE OR REPLACE FUNCTION public.f_enum_add_val(enmu_val character varying)
 RETURNS void
 LANGUAGE plpgsql
AS $function$
begin
    execute format('alter type currency add value %L ',enmu_val);
end;
$function$;
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏