alecpl
2010-07-26 3a4c9f424bff7fc937334ac230217ffe5b2e246c
commit | author | age
798ad5 1 -- RoundCube Webmail initial database structure
A 2
977a29 3 --
T 4 -- Sequence "user_ids"
5 -- Name: user_ids; Type: SEQUENCE; Schema: public; Owner: postgres
6 --
7
8 CREATE SEQUENCE user_ids
9     INCREMENT BY 1
10     NO MAXVALUE
11     NO MINVALUE
12     CACHE 1;
13
f5dc2a 14 --
1cded8 15 -- Table "users"
f5dc2a 16 -- Name: users; Type: TABLE; Schema: public; Owner: postgres
S 17 --
18
19 CREATE TABLE users (
15a9d1 20     user_id integer DEFAULT nextval('user_ids'::text) PRIMARY KEY,
22d6b5 21     username varchar(128) DEFAULT '' NOT NULL,
A 22     mail_host varchar(128) DEFAULT '' NOT NULL,
23     alias varchar(128) DEFAULT '' NOT NULL,
f5dc2a 24     created timestamp with time zone DEFAULT now() NOT NULL,
e2402e 25     last_login timestamp with time zone DEFAULT NULL,
22d6b5 26     "language" varchar(5),
f5dc2a 27     preferences text DEFAULT ''::text NOT NULL
S 28 );
29
6cb778 30 CREATE INDEX users_username_id_idx ON users (username);
A 31 CREATE INDEX users_alias_id_idx ON users (alias);
f5dc2a 32
b59474 33   
f5dc2a 34 --
1cded8 35 -- Table "session"
T 36 -- Name: session; Type: TABLE; Schema: public; Owner: postgres
37 --
38
39 CREATE TABLE "session" (
22d6b5 40     sess_id varchar(40) DEFAULT '' PRIMARY KEY,
1cded8 41     created timestamp with time zone DEFAULT now() NOT NULL,
T 42     changed timestamp with time zone DEFAULT now() NOT NULL,
22d6b5 43     ip varchar(41) NOT NULL,
1cded8 44     vars text NOT NULL
T 45 );
46
3e48d2 47 CREATE INDEX session_changed_idx ON session (changed);
1cded8 48
b59474 49
T 50 --
51 -- Sequence "identity_ids"
52 -- Name: identity_ids; Type: SEQUENCE; Schema: public; Owner: postgres
53 --
54
55 CREATE SEQUENCE identity_ids
56     START WITH 1
57     INCREMENT BY 1
58     NO MAXVALUE
59     NO MINVALUE
60     CACHE 1;
1cded8 61
T 62 --
63 -- Table "identities"
64 -- Name: identities; Type: TABLE; Schema: public; Owner: postgres
65 --
66
67 CREATE TABLE identities (
15a9d1 68     identity_id integer DEFAULT nextval('identity_ids'::text) PRIMARY KEY,
22d6b5 69     user_id integer NOT NULL
A 70     REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
a35062 71     changed timestamp with time zone DEFAULT now() NOT NULL,
a493ea 72     del smallint DEFAULT 0 NOT NULL,
A 73     standard smallint DEFAULT 0 NOT NULL,
22d6b5 74     name varchar(128) NOT NULL,
A 75     organization varchar(128),
76     email varchar(128) NOT NULL,
77     "reply-to" varchar(128),
78     bcc varchar(128),
a0109c 79     signature text,
S 80     html_signature integer DEFAULT 0 NOT NULL
1cded8 81 );
T 82
94fe9c 83 CREATE INDEX identities_user_id_idx ON identities (user_id, del);
b59474 84
T 85
86 --
87 -- Sequence "contact_ids"
88 -- Name: contact_ids; Type: SEQUENCE; Schema: public; Owner: postgres
89 --
90
91 CREATE SEQUENCE contact_ids
92     START WITH 1
93     INCREMENT BY 1
94     NO MAXVALUE
95     NO MINVALUE
96     CACHE 1;
1cded8 97
T 98 --
99 -- Table "contacts"
100 -- Name: contacts; Type: TABLE; Schema: public; Owner: postgres
101 --
102
103 CREATE TABLE contacts (
15a9d1 104     contact_id integer DEFAULT nextval('contact_ids'::text) PRIMARY KEY,
22d6b5 105     user_id integer NOT NULL
A 106     REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
1cded8 107     changed timestamp with time zone DEFAULT now() NOT NULL,
a493ea 108     del smallint DEFAULT 0 NOT NULL,
22d6b5 109     name varchar(128) DEFAULT '' NOT NULL,
A 110     email varchar(128) DEFAULT '' NOT NULL,
111     firstname varchar(128) DEFAULT '' NOT NULL,
112     surname varchar(128) DEFAULT '' NOT NULL,
1cded8 113     vcard text
T 114 );
115
23b765 116 CREATE INDEX contacts_user_id_idx ON contacts (user_id, email);
22d6b5 117
A 118 --
119 -- Sequence "contactgroups_ids"
120 -- Name: contactgroups_ids; Type: SEQUENCE; Schema: public; Owner: postgres
121 --
122
123 CREATE SEQUENCE contactgroups_ids
124     INCREMENT BY 1
125     NO MAXVALUE
126     NO MINVALUE
127     CACHE 1;
128
129 --
130 -- Table "contactgroups"
131 -- Name: contactgroups; Type: TABLE; Schema: public; Owner: postgres
132 --
133
134 CREATE TABLE contactgroups (
135     contactgroup_id integer DEFAULT nextval('contactgroups_ids'::text) PRIMARY KEY,
136     user_id integer NOT NULL
137         REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE,
138     changed timestamp with time zone DEFAULT now() NOT NULL,
139     del smallint NOT NULL DEFAULT 0,
140     name varchar(128) NOT NULL DEFAULT ''
141 );
142
143 CREATE INDEX contactgroups_user_id_idx ON contactgroups (user_id, del);
144
145 --
146 -- Table "contactgroupmembers"
147 -- Name: contactgroupmembers; Type: TABLE; Schema: public; Owner: postgres
148 --
149                         
150 CREATE TABLE contactgroupmembers (
151     contactgroup_id integer NOT NULL
152         REFERENCES contactgroups(contactgroup_id) ON DELETE CASCADE ON UPDATE CASCADE,
153     contact_id integer NOT NULL
154         REFERENCES contacts(contact_id) ON DELETE CASCADE ON UPDATE CASCADE,
155     created timestamp with time zone DEFAULT now() NOT NULL,
156     PRIMARY KEY (contactgroup_id, contact_id)
157 );
1cded8 158
T 159 --
b59474 160 -- Sequence "cache_ids"
T 161 -- Name: cache_ids; Type: SEQUENCE; Schema: public; Owner: postgres
162 --
163
164 CREATE SEQUENCE cache_ids
165     INCREMENT BY 1
166     NO MAXVALUE
167     NO MINVALUE
168     CACHE 1;
169
170 --
1cded8 171 -- Table "cache"
T 172 -- Name: cache; Type: TABLE; Schema: public; Owner: postgres
173 --
174
175 CREATE TABLE "cache" (
15a9d1 176     cache_id integer DEFAULT nextval('cache_ids'::text) PRIMARY KEY,
22d6b5 177     user_id integer NOT NULL
A 178     REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
179     cache_key varchar(128) DEFAULT '' NOT NULL,
1cded8 180     created timestamp with time zone DEFAULT now() NOT NULL,
T 181     data text NOT NULL
182 );
183
edc63c 184 CREATE INDEX cache_user_id_idx ON "cache" (user_id, cache_key);
e4d9f0 185 CREATE INDEX cache_created_idx ON "cache" (created);
1cded8 186
T 187 --
b59474 188 -- Sequence "message_ids"
T 189 -- Name: message_ids; Type: SEQUENCE; Schema: public; Owner: postgres
190 --
191
192 CREATE SEQUENCE message_ids
193     INCREMENT BY 1
194     NO MAXVALUE
195     NO MINVALUE
196     CACHE 1;
197
198 --
1cded8 199 -- Table "messages"
T 200 -- Name: messages; Type: TABLE; Schema: public; Owner: postgres
201 --
202
c98f3b 203 CREATE TABLE messages (
15a9d1 204     message_id integer DEFAULT nextval('message_ids'::text) PRIMARY KEY,
22d6b5 205     user_id integer NOT NULL
A 206     REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
a493ea 207     del smallint DEFAULT 0 NOT NULL,
22d6b5 208     cache_key varchar(128) DEFAULT '' NOT NULL,
b59474 209     created timestamp with time zone DEFAULT now() NOT NULL,
1cded8 210     idx integer DEFAULT 0 NOT NULL,
T 211     uid integer DEFAULT 0 NOT NULL,
22d6b5 212     subject varchar(128) DEFAULT '' NOT NULL,
A 213     "from" varchar(128) DEFAULT '' NOT NULL,
214     "to" varchar(128) DEFAULT '' NOT NULL,
215     cc varchar(128) DEFAULT '' NOT NULL,
1cded8 216     date timestamp with time zone NOT NULL,
T 217     size integer DEFAULT 0 NOT NULL,
218     headers text NOT NULL,
f7bfec 219     structure text
1cded8 220 );
T 221
c98f3b 222 ALTER TABLE messages ADD UNIQUE (user_id, cache_key, uid);
3d601d 223 CREATE INDEX messages_index_idx ON messages (user_id, cache_key, idx);
c98f3b 224 CREATE INDEX messages_created_idx ON messages (created);