diff -r d296a020f440 -r 9823548b2717 pgsql/create_tables-dovecot-1.2.x.pgsql --- a/pgsql/create_tables-dovecot-1.2.x.pgsql Wed Oct 26 23:32:58 2011 +0000 +++ b/pgsql/create_tables-dovecot-1.2.x.pgsql Fri Oct 28 15:51:31 2011 +0000 @@ -10,6 +10,8 @@ CREATE SEQUENCE quotalimit_id; +CREATE SEQUENCE service_set_id; + CREATE SEQUENCE domain_gid START WITH 70000 INCREMENT BY 1 @@ -67,16 +69,48 @@ -- Insert default (non) quota limit INSERT INTO quotalimit(bytes, messages) VALUES (0, 0); +CREATE TABLE service_set ( + ssid bigint NOT NULL DEFAULT nextval('service_set_id'), + smtp boolean NOT NULL DEFAULT TRUE, + pop3 boolean NOT NULL DEFAULT TRUE, + imap boolean NOT NULL DEFAULT TRUE, + sieve boolean NOT NULL DEFAULT TRUE, + CONSTRAINT pkey_service_set PRIMARY KEY (ssid), + CONSTRAINT ukey_service_set UNIQUE (smtp, pop3, imap, sieve) +); +-- Insert all possible service combinations +COPY service_set (smtp, pop3, imap, sieve) FROM stdin; +TRUE TRUE TRUE TRUE +FALSE TRUE TRUE TRUE +TRUE FALSE TRUE TRUE +FALSE FALSE TRUE TRUE +TRUE TRUE FALSE TRUE +FALSE TRUE FALSE TRUE +TRUE FALSE FALSE TRUE +FALSE FALSE FALSE TRUE +TRUE TRUE TRUE FALSE +FALSE TRUE TRUE FALSE +TRUE FALSE TRUE FALSE +FALSE FALSE TRUE FALSE +TRUE TRUE FALSE FALSE +FALSE TRUE FALSE FALSE +TRUE FALSE FALSE FALSE +FALSE FALSE FALSE FALSE +\. + CREATE TABLE domain_data ( gid bigint NOT NULL DEFAULT nextval('domain_gid'), + qid bigint NOT NULL DEFAULT 1, -- default quota limit + ssid bigint NOT NULL DEFAULT 1, -- default service set tid bigint NOT NULL DEFAULT 1, -- default transport - qid bigint NOT NULL DEFAULT 1, -- default quota limit domaindir varchar(40) NOT NULL, --/srv/mail/$RAND/4294967294 CONSTRAINT pkey_domain_data PRIMARY KEY (gid), + CONSTRAINT fkey_domain_data_qid_quotalimit FOREIGN KEY (qid) + REFERENCES quotalimit (qid), + CONSTRAINT fkey_domain_data_ssid_service_set FOREIGN KEY (ssid) + REFERENCES service_set (ssid), CONSTRAINT fkey_domain_data_tid_transport FOREIGN KEY (tid) - REFERENCES transport (tid), - CONSTRAINT fkey_domain_data_qid_quotalimit FOREIGN KEY (qid) - REFERENCES quotalimit (qid) + REFERENCES transport (tid) ); CREATE TABLE domain_name ( @@ -95,22 +129,21 @@ uid bigint NOT NULL DEFAULT nextval('users_uid'), gid bigint NOT NULL, mid bigint NOT NULL DEFAULT 1, + qid bigint NOT NULL DEFAULT 1, + ssid bigint NOT NULL DEFAULT 1, tid bigint NOT NULL DEFAULT 1, - qid bigint NOT NULL DEFAULT 1, - smtp boolean NOT NULL DEFAULT TRUE, - pop3 boolean NOT NULL DEFAULT TRUE, - imap boolean NOT NULL DEFAULT TRUE, - sieve boolean NOT NULL DEFAULT TRUE, CONSTRAINT pkey_users PRIMARY KEY (local_part, gid), CONSTRAINT ukey_users_uid UNIQUE (uid), CONSTRAINT fkey_users_gid_domain_data FOREIGN KEY (gid) REFERENCES domain_data (gid), CONSTRAINT fkey_users_mid_maillocation FOREIGN KEY (mid) REFERENCES maillocation (mid), + CONSTRAINT fkey_users_qid_quotalimit FOREIGN KEY (qid) + REFERENCES quotalimit (qid), + CONSTRAINT fkey_users_ssid_service_set FOREIGN KEY (ssid) + REFERENCES service_set (ssid), CONSTRAINT fkey_users_tid_transport FOREIGN KEY (tid) - REFERENCES transport (tid), - CONSTRAINT fkey_users_qid_quotalimit FOREIGN KEY (qid) - REFERENCES quotalimit (qid) + REFERENCES transport (tid) ); CREATE TABLE userquota ( @@ -144,7 +177,8 @@ SELECT local_part || '@' || domain_name.domainname AS "user", passwd AS "password", smtp, pop3, imap, sieve FROM users - LEFT JOIN domain_name USING (gid); + LEFT JOIN domain_name USING (gid) + LEFT JOIN service_set USING (ssid); CREATE OR REPLACE VIEW dovecot_user AS SELECT local_part || '@' || domain_name.domainname AS userid,