gpt4 book ai didi

postgresql - Postgres 文本列只允许/转换为小写并且没有特殊字符,例如 : Ñöáè

转载 作者:行者123 更新时间:2023-11-29 14:10:31 24 4
gpt4 key购买 nike

我有一个表格,我希望该 1 列只接受小写字符串并且没有特殊字符,例如 Ñóáöäë 等...

有没有办法将这个约束添加到列中?

CREATE TABLE lawyer (
id SERIAL PRIMARY KEY,
name VARCHAR NOT NULL,
url_name VARCHAR NOT NULL,
gender VARCHAR(1) check (gender in ('m','f')) NOT NULL
);

我要添加约束的列是url_name

最佳答案

将所需的字符放入此 translate() 调用的第二个参数中:

CREATE TABLE lawyer (
id SERIAL PRIMARY KEY,
name VARCHAR NOT NULL,
url_name VARCHAR check(translate(url_name, 'abcdefghijklmnopqrstuvwxyz', '') = '') NOT NULL,
gender VARCHAR(1) check (gender in ('m','f')) NOT NULL
);

insert into lawyer
values (default, 'Adam Smith', 'domain', 'f');

INSERT 0 1

insert into lawyer
values (default, 'Adam Smith', 'dömain', 'f');

ERROR: new row for relation "lawyer" violates check constraint "lawyer_url_name_check"
DETAIL: Failing row contains (3, Adam Smith, dömain, f).

或者,您可以创建一个触发器,它会即时修改值:

create or replace function lawyer_before_insert_or_update()
returns trigger language plpgsql as $$
begin
new.url_name := lower(new.url_name);
if translate(new.url_name, 'abcdefghijklmnopqrstuvwxyz', '') <> '' then
raise exception 'Incorrect url name.';
end if;
return new;
end $$;

create trigger lawyer_before_insert_or_update
before insert or update on lawyer
for each row execute procedure lawyer_before_insert_or_update();

insert into lawyer
values (default, 'Adam Smith', 'DOMAIN', 'f')
returning *;

id | name | url_name | gender
----+------------+----------+--------
4 | Adam Smith | domain | f
(1 row)

INSERT 0 1

insert into lawyer
values (default, 'Adam Smith', 'dömain', 'f');

ERROR: Incorrect url name.

关于postgresql - Postgres 文本列只允许/转换为小写并且没有特殊字符,例如 : Ñöáè,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37847618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com