簡體   English   中英

postgresql 遷移

[英]postgresql migration

嗨,我在我的實體中有這個它是枚舉所以在我的數據庫中它保存為序數 1 或 0

@Column(name = "status")
private ClientStatusEnum status;

這是我的遷移

 CREATE TABLE public.clients
(
id bigserial NOT NULL,
created_at        timestamp    NOT NULL,
removed           bool         NOT NULL DEFAULT false,
removed_at        timestamp    NULL,
updated_at        timestamp    NULL,
authorities       varchar(255) NULL,
last_active_at    timestamp    NULL,
logged_in_at      timestamp    NULL,
"password"        varchar(255) NULL,
username          varchar(255) NULL,
image_url         varchar(255) NULL,
"name"            varchar(255) NULL,
phone_number      varchar(255) NULL,
status int4 NULL, /////////////////////////////this is status //////////
surname           varchar(255) NULL,
profile_image_url varchar(255) NULL,
CONSTRAINT clients_pkey PRIMARY KEY (id)

);

現在我把這個改成了這個

@Enumerated(EnumType.STRING)
@Type(type = "pgsql_enum")
@Column(name = "status")
private ClientStatusEnum status;

將其保存為字符串

所以我需要像上面那樣編寫 migraion 以將 tht in status 更改為這種新的狀態類型,但我有狀態為 0 或 1 的客戶我需要在遷移文件中寫入 sql,使其狀態為:0 1 更改 REGISTERED 或 ACTIVE ,新來者已經獲得了這種新方式狀態

這是我的枚舉

@Getter
@AllArgsConstructor
public enum ClientStatusEnum {
REGISTERED,
ACTIVE,
INTEGRATED

}

請幫我

您是否嘗試編寫一個帶有附加臨時列的遷移,其中將寫入枚舉值?

遷移命令示例:

alter table public.clients
    add column status_tmp varchar(25);

update public.clients
set status_tmp = 'REGISTERED'
where status = 0;


update public.clients
set status_tmp = 'ACTIVE'
where status = 1;

alter table public.clients
    drop column status;

alter table public.clients
    rename column status_tmp to status;

在枚舉字段上面的實體class中,只需要@Enumerated注解即可。 @Column 注釋是不必要的,因為 class 中的字段與數據庫中的名稱匹配。

@Enumerated(EnumType.STRING)
private ClientStatusEnum status;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM