【发布时间】:2020-05-31 08:55:20
【问题描述】:
【问题讨论】:
-
您不应该只使用 GUI 工具。了解如何使用 SQL 创建表,然后您就可以使用所有记录在案的数据类型(包括 UI 不允许您选择的别名)
标签: postgresql pgadmin
【问题讨论】:
标签: postgresql pgadmin
除了使用 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,否则链接将来可能会更改(无耻地从其中一个链接中获取):
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创建一个新域。域本质上是一种具有可选约束(对允许的值集的限制)的数据类型。 source
对于那些不熟悉用于检查值的奇怪字符的人,它是regex pattern。
还有一个与表格一起使用的示例:
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 的建议。
【讨论】:
过去我使用 text 或 varchar 或 character varying
【讨论】:
varchar 是 Postgres 中的有效数据类型(它是character varying 的别名)dbfiddle.uk/…
character varying。最初我使用它,但后来我更喜欢varchar,特别是如果您需要限制长度(为此使用 varchar(N) 或简单的text
character varying(150)是有效的