]> git.sur5r.net Git - bacula/bacula/blob - gui/bweb/script/bweb-postgresql.sql
bweb: Add sqlite support
[bacula/bacula] / gui / bweb / script / bweb-postgresql.sql
1 -- Require > 7.4, else use createlang command
2 CREATE PROCEDURAL LANGUAGE plpgsql;
3
4 -- --------------------------------------------------
5 -- Upgrade from 5.0
6 -- --------------------------------------------------
7
8 BEGIN;
9
10 -- PG 8.4 drops implicit cast from double to bigint
11 CREATE FUNCTION SEC_TO_TIME(double precision)
12 RETURNS interval AS $$
13     select date_trunc('second', $1 * interval '1 second');
14 $$ LANGUAGE SQL;
15
16 COMMIT;
17
18 CREATE UNIQUE INDEX location_idx ON Location (Location);
19
20 -- --------------------------------------------------
21 -- Upgrade from 2.2
22 -- --------------------------------------------------
23
24 -- New tables for bresto (same as brestore)
25
26 CREATE TABLE brestore_knownjobid
27 (
28      JobId integer NOT NULL,
29      CONSTRAINT brestore_knownjobid_pkey PRIMARY KEY (JobId)
30 );
31
32 CREATE TABLE brestore_pathhierarchy
33 (
34      PathId integer NOT NULL,
35      PPathId integer NOT NULL,
36      CONSTRAINT brestore_pathhierarchy_pkey PRIMARY KEY (PathId)
37 );
38
39 CREATE INDEX brestore_pathhierarchy_ppathid 
40                           ON brestore_pathhierarchy (PPathId);
41
42 CREATE TABLE brestore_pathvisibility
43 (
44       PathId integer NOT NULL,
45       JobId integer NOT NULL,
46       Size int8 DEFAULT 0,
47       Files int4 DEFAULT 0,
48       CONSTRAINT brestore_pathvisibility_pkey PRIMARY KEY (JobId, PathId)
49 );
50
51 CREATE INDEX brestore_pathvisibility_jobid
52                           ON brestore_pathvisibility (JobId);
53
54
55 -- New job log view
56
57 CREATE FUNCTION concat (text, text) RETURNS text AS '
58 DECLARE
59 result text;
60 BEGIN
61 IF $1 is not null THEN
62 result := $1 || $2;
63 END IF;
64
65 RETURN result;
66 END;
67 ' LANGUAGE plpgsql;
68
69 CREATE AGGREGATE group_concat(
70 sfunc = concat,
71 basetype = text,
72 stype = text,
73 initcond = ''
74 );
75
76 BEGIN;
77 CREATE TABLE bweb_user
78 (
79         userid       serial not null,
80         username     text not null,
81         use_acl      boolean default false,
82         enabled      boolean default true,
83         comment      text default '',
84         passwd       text default '',
85         tpl          text default '',
86         primary key (userid)
87 );
88 CREATE UNIQUE INDEX bweb_user_idx on bweb_user (username);
89
90 CREATE TABLE bweb_role
91 (
92         roleid       serial not null,
93         rolename     text not null,
94         comment      text default '',
95         primary key (roleid)
96 );
97 CREATE UNIQUE INDEX bweb_role_idx on bweb_role (rolename);
98
99 INSERT INTO bweb_role (rolename) VALUES ('r_user_mgnt');
100 INSERT INTO bweb_role (rolename) VALUES ('r_group_mgnt');
101 INSERT INTO bweb_role (rolename) VALUES ('r_configure');
102
103 INSERT INTO bweb_role (rolename) VALUES ('r_autochanger_mgnt');
104 INSERT INTO bweb_role (rolename) VALUES ('r_location_mgnt');
105 INSERT INTO bweb_role (rolename) VALUES ('r_storage_mgnt');
106 INSERT INTO bweb_role (rolename) VALUES ('r_delete_job');
107 INSERT INTO bweb_role (rolename) VALUES ('r_prune');
108 INSERT INTO bweb_role (rolename) VALUES ('r_purge');
109
110 INSERT INTO bweb_role (rolename) VALUES ('r_view_job');
111 INSERT INTO bweb_role (rolename) VALUES ('r_view_log');
112 INSERT INTO bweb_role (rolename) VALUES ('r_view_media');
113 INSERT INTO bweb_role (rolename) VALUES ('r_view_stat');
114 INSERT INTO bweb_role (rolename) VALUES ('r_view_group');
115 INSERT INTO bweb_role (rolename) VALUES ('r_view_running_job');
116
117 INSERT INTO bweb_role (rolename) VALUES ('r_run_job');
118 INSERT INTO bweb_role (rolename) VALUES ('r_cancel_job');
119 INSERT INTO bweb_role (rolename) VALUES ('r_client_status');
120
121 CREATE TABLE  bweb_role_member
122 (
123         roleid       integer not null,
124         userid       integer not null,
125         primary key (roleid, userid)
126 );
127
128 CREATE TABLE  bweb_client_group_acl
129 (
130         client_group_id       integer not null,
131         userid                integer not null,
132         primary key (client_group_id, userid)
133 );
134 COMMIT;
135 -- --------------------------------------------------
136 -- Upgrade from 2.0
137 -- --------------------------------------------------
138
139 BEGIN;
140 -- Manage Client groups in bweb
141 -- Works with postgresql and mysql5 
142
143 CREATE TABLE client_group
144 (
145     client_group_id             serial    not null,
146     client_group_name           text      not null,
147     comment                     text      default '',
148     primary key (client_group_id)
149 );
150
151 CREATE UNIQUE INDEX client_group_idx on client_group (client_group_name);
152
153 CREATE TABLE client_group_member
154 (
155     client_group_id                 integer       not null,
156     clientid          integer     not null,
157     primary key (client_group_id, clientid)
158 );
159
160 CREATE INDEX client_group_member_idx on client_group_member (client_group_id);
161
162 COMMIT;
163
164 -- --------------------------------------------------
165 -- End of upgrade from 2.0
166 -- --------------------------------------------------
167
168 --   -- creer un nouveau group
169 --   
170 --   INSERT INTO client_group (client_group_name) VALUES ('SIGMA');
171 --   
172 --   -- affecter une machine a un group
173 --   
174 --   INSERT INTO client_group_member (client_group_id, clientid) 
175 --          (SELECT client_group_id, 
176 --                 (SELECT Clientid FROM Client WHERE Name = 'slps0003-fd')
177 --             FROM client_group 
178 --            WHERE client_group_name IN ('SIGMA', 'EXPLOITATION', 'MUTUALISE'));
179 --        
180 --   
181 --   -- modifier l'affectation d'une machine
182 --   
183 --   DELETE FROM client_group_member 
184 --         WHERE clientid = (SELECT ClientId FROM Client WHERE Name = 'slps0003-fd')
185 --   
186 --   -- supprimer un groupe
187 --   
188 --   DELETE FROM client_group_member 
189 --         WHERE client_group_id = (SELECT client_group_id FROM client_group WHERE client_group_name = 'EXPLOIT')
190 --   
191 --   
192 --   -- afficher tous les clients du group SIGMA
193 --   
194 --   SELECT Name FROM Client JOIN client_group_member using (clientid) 
195 --                           JOIN client_group using (client_group_id)
196 --    WHERE client_group_name = 'SIGMA';
197 --   
198 --   -- afficher tous les groups
199 --   
200 --   SELECT client_group_name FROM client_group ORDER BY client_group_name;
201 --   
202 --   -- afficher tous les job du group SIGMA hier
203 --   
204 --   SELECT JobId, Job.Name, Client.Name, JobStatus, JobErrors
205 --     FROM Job JOIN Client              USING(ClientId) 
206 --              JOIN client_group_member USING (ClientId)
207 --              JOIN client_group        USING (client_group_id)
208 --     WHERE client_group_name = 'SIGMA'
209 --       AND Job.StartTime > '2007-03-20'; 
210 --   
211 --   -- donne des stats
212 --   
213 --   SELECT count(1) AS nb, sum(JobFiles) AS files,
214 --          sum(JobBytes) AS size, sum(JobErrors) AS joberrors,
215 --          JobStatus AS jobstatus, client_group_name
216 --     FROM Job JOIN Client              USING(ClientId) 
217 --              JOIN client_group_member USING (ClientId)
218 --              JOIN client_group        USING (client_group_id)
219 --     WHERE Job.StartTime > '2007-03-20'
220 --     GROUP BY JobStatus, client_group_name
221 --   
222 --   
223
224 BEGIN;
225
226 CREATE FUNCTION SEC_TO_TIME(timestamp with time zone)
227 RETURNS timestamp with time zone AS $$
228     select date_trunc('second', $1);
229 $$ LANGUAGE SQL;
230
231 CREATE FUNCTION SEC_TO_TIME(bigint)
232 RETURNS interval AS $$
233     select date_trunc('second', $1 * interval '1 second');
234 $$ LANGUAGE SQL;
235
236 CREATE FUNCTION UNIX_TIMESTAMP(timestamp with time zone)
237 RETURNS double precision AS $$
238     select date_part('epoch', $1);
239 $$ LANGUAGE SQL;
240
241 CREATE FUNCTION SEC_TO_INT(interval)
242 RETURNS double precision AS $$
243     select extract(epoch from $1);
244 $$ LANGUAGE SQL;
245
246 CREATE OR REPLACE FUNCTION base64_decode_lstat(int4, varchar) RETURNS int8 
247 IMMUTABLE STRICT AS $$
248 DECLARE
249 val int8;
250 len int8;
251 b64 varchar(64);
252 size varchar(64);
253 i int;
254 BEGIN
255 size := split_part($2, ' ', $1);
256 b64 := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
257 val := 0;
258 len=length(size);
259 FOR i IN 1..len LOOP
260 val := val + (strpos(b64, substr(size, i, 1))-1) * (64^(len-i));
261 END LOOP;
262 RETURN val;
263 END;
264 $$ language 'plpgsql';
265
266 COMMIT;
267
268