如何基于枚举类型在PostgreSql中获取枚举(使用条件语句)

时间:2019-01-29 07:06:00

标签: sql postgresql enums

我在Postgresql中使用枚举。我在数据库中使用了一个名为city的枚举。我的要求是如何使用条件语句获取枚举。 我使用了查询

SELECT 'Bengaluru'::CITY as TEXT 

它可以正常工作,但如果在枚举中找不到该文本,则会引发错误。我应该如何进行/更改sql查询,以便它不会引发错误。

2 个答案:

答案 0 :(得分:1)

您需要检查系统表。 假设一个枚举定义为:

create type city as enum ('Munich', 'Berlin'); 

要了解是否为枚举类型定义了特定的标签,可以使用以下命令:

select exists (select *
                from pg_enum e
                  join pg_type t on t.oid = e.enumtypid
                  join pg_namespace s on s.oid = t.typnamespace
                where s.nspname = 'public' --<< adjust here for the correct schema
                  and t.typname = 'city'
                  and e.enumlabel = 'Bengaluru');

正确的解决方案是不使用枚举,而是使用正确的一对多关系。

create table city
(
  id integer primary key, 
  name varchar(100) not null unique --<< the "unique" mimics the enuma
); 

insert into city (id, name)
values (1, 'Munich'), (2, 'Berlin');

要使用“枚举”,请使用外键:

create table some_table_using_city
(
   ... other columns ...
   city_id integer references city
);

要检查城市名称是否存在,只需使用:

select id
from city
where name = 'Bengaluru';

答案 1 :(得分:0)

SELECT 
    CASE WHEN 'Bengaluru'::CITY !=NULL THEN 'Bengaluru'::CITY ELSE "Not Found" 
    END as TEXT

CASE可以在这里使用。

有关语法的更多详细信息,您可以找到here.