pgadmin 4 中 Postgresql 数据库中字段 'email' 的数据类型应该是什么?
What should be the data type of field 'email' in Postgresql database in pgadmin 4?
你可以看到我在搜索 varchar 时得到 'No results found'。
我需要知道在 postgresql 数据库中 'email' 我应该 select 的数据类型。
过去我使用text或varchar或character varying
除了使用 VARCHAR(如@Maria 所建议的),您可能会从中获得一些见解 link:
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,或者 link 将来可能会改变(无耻地取自 link 之一):
CREATE EXTENSION citext;
CREATE DOMAIN domain_email AS citext
CHECK(
VALUE ~ '^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$'
);
-- for valid samples
SELECT 'some_email@gmail.com'::domain_email;
SELECT 'accountant@dbrnd.org'::domain_email;
-- for an invalid sample
SELECT 'dba@aol.info'::domain_email;
正如 Neil 所指出的,是的,这就像使用自定义类型一样。
CREATE DOMAIN
creates a new domain. A domain is essentially a data type with optional constraints (restrictions on the allowed set of values).
source
对于那些不熟悉用于检查值的奇怪字符的人来说,它是 regex pattern。
以及与 table 一起使用的示例:
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)
感谢Neil的建议。
你可以看到我在搜索 varchar 时得到 'No results found'。
过去我使用text或varchar或character varying
除了使用 VARCHAR(如@Maria 所建议的),您可能会从中获得一些见解 link: 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,或者 link 将来可能会改变(无耻地取自 link 之一):
CREATE EXTENSION citext;
CREATE DOMAIN domain_email AS citext
CHECK(
VALUE ~ '^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$'
);
-- for valid samples
SELECT 'some_email@gmail.com'::domain_email;
SELECT 'accountant@dbrnd.org'::domain_email;
-- for an invalid sample
SELECT 'dba@aol.info'::domain_email;
正如 Neil 所指出的,是的,这就像使用自定义类型一样。
CREATE DOMAIN
creates a new domain. A domain is essentially a data type with optional constraints (restrictions on the allowed set of values). source
对于那些不熟悉用于检查值的奇怪字符的人来说,它是 regex pattern。
以及与 table 一起使用的示例:
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)
感谢Neil的建议。