Muchas de estas respuestas están cerca al camino correcto. Estos son los puntos de mi envío.
- Quieres usar un dominio, NO el sistema de reglas.
- Usted NO desea validar estas direcciones de correo electrónico con una expresión regular. (Actualización de marzo de 2017:ya no es cierto)
Muestro dos métodos de cómo hacer esto correctamente en DBA.StackExchange.com . Tanto para verificar el registro MX como para usar la especificación HTML5. Aquí está el corto y dulce.
CREATE EXTENSION citext;
CREATE DOMAIN email AS citext
CHECK ( value ~ '^[a-zA-Z0-9.!#$%&''*+/=?^_`{|}~-]example@sqldat.com[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$' );
SELECT 'example@sqldat.com'::email;
SELECT CAST('example@sqldat.com' AS email);
Para obtener más información, altamente sugiero que lea la respuesta completa
. En la respuesta, también muestro cómo crear un DOMAIN sobre Email::Valid y explique por qué ya no uso ese método.