CREATE TABLE sample_table ( id SERIAL PRIMARY KEY, email domain_email );
-- The following is invalid, because ".info" has 4 characters
-- the regex pattern only allows 2-3 characters
INSERT INTO sample_table (email) VALUES ('sample_email@gmail.info');
ERROR: value for domain domain_email violates check constraint "domain_email_check"
-- The following query is valid
INSERT INTO sample_table (email) VALUES ('sample_email@gmail.com');
SELECT * FROM sample_table;
id | email
----+------------------------
1 | sample_email@gmail.com
(1 row)
3条答案
按热度按时间nle07wnf1#
过去我使用文本或varchar或字符变化
rbpvctlc2#
除了使用VARCHAR(如@Maria所建议的)之外,您还可以从以下链接中获得一些见解:https://www.dbrnd.com/2018/04/postgresql-how-to-validate-the-email-address-column/并从此https://dba.stackexchange.com/questions/68266/what-is-the-best-way-to-store-an-email-address-in-postgresql
如果你读了其中的一些部分,他们创建了自己的函数或约束,这可能会帮助你更多地理解PSQL。
TL/DR,或者链接将来可能会更改(不知羞耻地从其中一个链接中获取):
正如Neil所指出的,是的,这就像使用自定义类型。
CREATE DOMAIN
创建一个新域。域本质上是一种具有可选约束(对允许的值集的限制)的数据类型。source对于那些不熟悉用来检查值的奇怪字符的人来说,它是一个regex pattern。
和一个与表一起使用的示例:
感谢Neil的建议。
r1zhe5dt3#
我建议你使用
CITEXT
类型,在值比较中忽略大小写。对于电子邮件来说,防止重复很重要,比如username@example.com和UserName@example.com。此类型是
citext
扩展的一部分,可通过以下查询激活: