【问题标题】:What should be the data type of field 'email' in Postgresql database in pgadmin 4?pgadmin 4 中 Postgresql 数据库中字段“电子邮件”的数据类型应该是什么?
【发布时间】:2020-05-31 08:55:20
【问题描述】:

您可以看到我在搜索 varchar 时收到“未找到结果”。

我需要知道我应该为 postgresql 数据库中的“电子邮件”选择的数据类型。

【问题讨论】:

  • 您不应该只使用 GUI 工具。了解如何使用 SQL 创建表,然后您就可以使用所有记录在案的数据类型(包括 UI 不允许您选择的别名)

标签: postgresql pgadmin


【解决方案1】:

除了使用 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 的建议。

【讨论】:

  • 我真的很喜欢您的回答,但我认为使用您在此处创建的 DOMAIN 来定义列数据类型的 CREATE TABLE 会更完整。
  • 对不起,您的意思是我编辑了我的评论并添加了一个 CREATE TABLE 示例,其中嵌入/集成了我建议的解决方案?如果这就是你的意思,那么我肯定会编辑这个 =) 否则,你能改写你说的话吗?对不起,英语,也许像我们大多数人一样,不是我的第一语言。
  • 是的,我建议进行编辑。我只是完全发现这很有用,但不确定如何在表创建中使用域。最终它就像使用自定义类型一样。在我回复时,我已经创建了我的第一个 DOMAIN。
【解决方案2】:

过去我使用 textvarcharcharacter varying

【讨论】:

  • varchar 不在选项中,但有字符变化。我应该使用不同的字符吗?
  • @SaketSuraj: varchar Postgres 中的有效数据类型(它是character varying 的别名)dbfiddle.uk/…
  • 是的,varchar 是字符变化的别名。当然你可以使用character varying。最初我使用它,但后来我更喜欢varchar,特别是如果您需要限制长度(为此使用 varchar(N) 或简单的text
  • 你可以限制字符的长度变化以及character varying(150)是有效的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
  • 2014-10-24
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
  • 2013-08-04
相关资源
最近更新 更多