我想實現這個問題的接受的答案:PostgreSQL的字符串爲int的翻譯在存儲過程
How to model a (Java) Enum in a Database (with SQL92)
這是我的當前實現:
性別枚舉:
public enum Gender {
MALE,
FEMALE
}
性別表:
create table gender (
gender_id bigserial not null,
name text not null,
primary key(gender_id)
);
用戶表:
create table system_user (
user_id bigserial not null,
username text not null,
gender_id bigint references gender(gender_id),
primary key(user_id)
);
create trigger update_gender_enum_table before insert or update on system_user
for each row execute procedure update_gender_enum_table();
觸發:
create or replace function update_gender_enum_table() returns trigger as $update_gender_enum_table$
begin
if not exists(select name from gender g where g.name = new.gender_id::text limit 1)
then
insert into gender (name) values (new.gender_id);
end if;
new.gender_id = (select gender_id from gender g where g.name = new.gender_id::text limit 1);
return new;
end;
$update_gender_enum_table$ language plpgsql;
目前插入語句失敗,因爲第二個參數是文本,而不是整數
insert into system_user (username, gender_id) values ('my_username', 'MALE');
ERROR: invalid input syntax for integer: "MALE"
有什麼辦法將字符串作爲值傳遞給整數字段?或者我以一種錯誤的方式接近這一點。