我正在使用 SELECT 从数据库生成结果集:
SELECT id countryname FROM dataset
其中 -countryname- 存储为 varchar。
我打算在此过程中将 -countryname- 转换为其等效的枚举类型,而不必首先运行标准声明语句:
CREATE TYPE countries AS ENUM ('US', 'France', 'S. Korea')
原因是,为了做出这样的声明,我需要所有可能的国家的列表。但我不容易获得此列表,必须首先通过查找 -countryname- 变量的不同值来获得。因此,必须添加这一行额外的声明似乎很笨拙且不必要。在我看来,PostgreSQL 有一个用于执行此操作的函数是合适的。
换句话说,我正在寻找类似于C中的countryname.Parse()方法(我猜?),或者pandas中的countryname.astype('category')方法,它负责声明和转换一步到位,例如:
SELECT id CONVERTION_FUNCTION(countryname) FROM dataset
with data(s) as (
select 'US' union all
select 'France' union all
select 'S. Korea'
)
select s::countries from data;
如果您传递的字符串不是枚举的一部分,您将获得:
ERROR: invalid input value for enum countries: ...