diff --git a/roles/mailserver_database/templates/tables.sql.j2 b/roles/mailserver_database/templates/tables.sql.j2 index 800377d..4ddc3f7 100644 --- a/roles/mailserver_database/templates/tables.sql.j2 +++ b/roles/mailserver_database/templates/tables.sql.j2 @@ -24,14 +24,15 @@ INSERT INTO virtual_users (domain_id, email, password, quota) VALUES ( CREATE TABLE IF NOT EXISTS virtual_aliases ( id integer primary key generated by default as identity, domain_id integer NOT NULL, - source varchar(254) NOT NULL UNIQUE, + source varchar(254) NOT NULL, destination varchar(254) NOT NULL, FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ); +CREATE UNIQUE INDEX IF NOT EXISTS virtual_aliases_s_d_key ON virtual_aliases (source, destination); {% for alias in mailserver_database.virtual_aliases %} INSERT INTO virtual_aliases (domain_id, source, destination) VALUES ( (SELECT id FROM virtual_domains WHERE name = '{{ virtual_domain }}'), '{{ alias.source }}@{{ virtual_domain }}', '{{ alias.destination }}@{{ virtual_domain }}' -) ON CONFLICT (source) DO UPDATE SET destination = EXCLUDED.destination; +) ON CONFLICT (source, destination) DO NOTHING; {% endfor %}