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

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

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

路过

暂无图片 评论
暂无图片 有用 1
打赏 0
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
打赏 0
鸿惊九天
2022-12-06
Z
zwx

mark

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

路过

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

排队学习

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

mark

暂无图片 评论
暂无图片 有用 1
打赏 0
彭冲

使用这个语句

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
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
实现postgresql主从自动切换使用keepalived 和 repmgr 哪个更好
回答 1
已采纳
keepalived基本不需要业务层面做任何事情,就可以实现高可用,主备容灾。而且容灾的宕机时间也比较短。但因为VRRP、主备切换都没有什么复杂的逻辑,所以无法应对某些特殊场景,比如主备通信链路出问题
pg_dump 如何能获得建库语句
回答 1
使用pgdump命令导出PostgreSQL数据库时,默认情况下只包含数据库中数据的备份信息,不包含创建数据库的语句。如果您想要获取建库语句,可以结合pgdumpall和grep命令来实现。以下是一个
postgresql如何实现双活?
回答 1
利用bucardo搭建PostgreSQL数据库双活
postgreSQL 有图形的权限管理工具吗?
回答 3
pgadmin
oracle_fdw无法编译
回答 4
参考下安装需求:较低的版本应该是不支持,上面提示的报错依赖的头文件是postgresqldevel里的,你试试用高一点版本的PG吧。
postgreSQL jsonb字段如果不参与字段内查询的话,数据库效率会不会有影响?
回答 1
没影响
Postgresql 怎么把分区表转换为普通表?
回答 1
提供个思路,可以将分区表的某个分区剥离出来,分出来的表就是普通表,具体用法可以参考官方文档:DETACHPARTITIONhttps://www.postgresql.org/docs/14/ddlp
10版本下用basebackup备份的全量,如何验证备份文件是否有效呢?
回答 1
pg10,通过pgwaldump可帮助你快速验证WAL文件的格式和数据,例如pgwaldump/path/to/wal/file,如果WAL文件损坏,pgwaldump会抛出错误提示。代表备份文件损坏
postgreSQL 12.12版本哪里查到表的上次ddl时间?
回答 2
PG12版本可能没什么比较好的方法。PG13版本后,可以开启trackcommittimestamp,然后通过查询数据字典中数据修改时间去判断或者openGauss/MogDB,他们对pgtables
数据湖是用postgreSQL 来实现的?
回答 1
咋想的?那你那个不是数据湖,是数据水库。