postgresql - 如何更改枚举选项?
问题描述
我在 Postgres 中定义了一个新类型:
CREATE TYPE PROJECT_STATUS AS ENUM ('draft', 'accepting_members', 'ongoing', 'completed');
现在,我想更改accepting_members
要调用的ongoing_accepting
如果我正确理解 Postgres,那ALTER TYPE
应该对我有所帮助。我试过这个:
mypostgresproject=# SELECT version();
version
------------------------------------------------------------------------------------------------------------------
PostgreSQL 12.0 (Debian 12.0-2.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
(1 row)
mypostgresproject=# \dT
List of data types
Schema | Name | Description
--------+----------------+-------------
public | project_status |
(1 row)
mypostgresproject=# SELECT
pg_type.typname,
pg_enum.enumlabel
FROM
pg_type
JOIN
pg_enum ON pg_enum.enumtypid = pg_type.oid;
typname | enumlabel
----------------+-------------------
project_status | draft
project_status | accepting_members
project_status | ongoing
project_status | stopped
(4 rows)
mypostgresproject=# ALTER TYPE project_status RENAME ATTRIBUTE accepting_members TO ongoing_accepting CASCADE;
ERROR: relation "project_status" does not exist
mypostgresproject=#
我应该怎么做?
解决方案
医生说_
RENAME ATTRIBUTE
此表单仅适用于复合类型。它更改类型的单个属性的名称。
重命名值
此表单重命名枚举类型的值。该值在枚举排序中的位置不受影响。如果指定的值不存在或新名称已存在,则会发生错误。
因此,由于您正在处理枚举,因此必须使用rename value
,并且由于该值是字符串,因此必须用引号引起来:
ALTER TYPE project_status RENAME VALUE 'accepting_members' TO 'ongoing_accepting';
推荐阅读
- android - 完成活动不会重置它
- android - 如何在导航抽屉顶部创建工具栏(Android/kotlin)
- webpack - 为什么当我使用 Vue 的运行时版本时,我的 Vue.js 应用程序无法运行?
- ios - UITableview 单元格切断了一些消息(视图)
- java - 如何在 Testng 中查找 Test suite.xml 执行状态
- sql - BigQuery:从数组创建表
- php - php更改日期的顺序
- python - “while”循环过早退出(python 3)
- mysql - MySQL子查询作为别名 - 未知列错误
- c# - AutoMapper 不映射嵌套的复杂类型