1-- 2-- Table structure for table categories 3-- 4 5DROP TABLE "categories" CASCADE\g 6DROP SEQUENCE "categories_id_seq" CASCADE ; 7 8CREATE SEQUENCE "categories_id_seq" ; 9 10CREATE TABLE "categories" ( 11 "id" integer DEFAULT nextval('"categories_id_seq"') NOT NULL, 12 "category" varchar(64) default NULL, 13 primary key ("id"), 14 unique ("category") 15) ; 16 17-- 18-- Table structure for table depends 19-- 20 21DROP TABLE "depends" CASCADE\g 22CREATE TABLE "depends" ( 23 "port" int NOT NULL, 24 "dependency" int NOT NULL, 25 "type" character varying(10) NOT NULL, 26 primary key ("port", "dependency", "type") 27) ; 28CREATE INDEX "depends_port_idx" ON "depends" USING btree ("port"); 29CREATE INDEX "depends_dependency_idx" ON "depends" USING btree ("dependency"); 30 31-- 32-- Table structure for table events 33-- 34 35DROP TABLE "events" CASCADE\g 36DROP SEQUENCE "events_id_seq" CASCADE ; 37 38CREATE SEQUENCE "events_id_seq" ; 39 40CREATE TABLE "events" ( 41 "id" integer DEFAULT nextval('"events_id_seq"') NOT NULL, 42 "port" int NOT NULL, 43 "phase" varchar(16), 44 "type" varchar(32), 45 "name" varchar(128), 46 "msg" text, 47 "machine" int NOT NULL, 48 primary key ("id") 49) ; 50CREATE INDEX "events_port_idx" ON "events" USING btree ("port"); 51 52-- 53-- Table structure for table locks 54-- 55 56DROP TABLE "locks" CASCADE\g 57DROP SEQUENCE "locks_id_seq" CASCADE ; 58 59CREATE SEQUENCE "locks_id_seq" ; 60 61CREATE TABLE "locks" ( 62 "id" integer DEFAULT nextval('"locks_id_seq"') NOT NULL, 63 "port" int NOT NULL, 64 "machine" int NOT NULL, 65 primary key ("id"), 66 unique ("port") 67) ; 68 69-- 70-- Table structure for table logs 71-- 72 73DROP TABLE "logs" CASCADE\g 74DROP SEQUENCE "logs_id_seq" CASCADE ; 75 76CREATE SEQUENCE "logs_id_seq" ; 77 78CREATE TABLE "logs" ( 79 "id" integer DEFAULT nextval('"logs_id_seq"') NOT NULL, 80 "port" int NOT NULL, 81 "data" text, 82 primary key ("id"), 83 "unique" KEY (port) 84) ; 85 86-- 87-- Table structure for table machines 88-- 89 90DROP TABLE "machines" CASCADE\g 91DROP SEQUENCE "machines_id_seq" CASCADE ; 92 93CREATE SEQUENCE "machines_id_seq" ; 94 95CREATE TABLE "machines" ( 96 "id" integer DEFAULT nextval('"machines_id_seq"') NOT NULL, 97 "arch" varchar(12) NOT NULL, 98 "name" varchar(128) NOT NULL, 99 "maintainer" varchar(128) NOT NULL, 100 "osversion" varchar(16) NOT NULL, 101 "run" int NOT NULL, 102 primary key ("id"), 103 "unique" KEY (name) 104) ; 105 106-- 107-- Table structure for table port_categories 108-- 109 110DROP TABLE "port_categories" CASCADE\g 111CREATE TABLE "port_categories" ( 112 "port" int NOT NULL, 113 "category" int NOT NULL 114) ; 115CREATE INDEX "port_categories_port_idx" ON "port_categories" USING btree ("port"); 116CREATE INDEX "port_categories_category_idx" ON "port_categories" USING btree ("category"); 117 118-- 119-- Table structure for table port_license_perms 120-- 121 122DROP TABLE "port_license_perms" CASCADE\g 123CREATE TABLE "port_license_perms" ( 124 "port" int NOT NULL, 125 "perm" varchar(50) NOT NULL 126) ; 127CREATE INDEX "port_lic_perm_port_idx" ON "port_license_perms" USING btree ("port"); 128 129-- 130-- Table structure for table ports 131-- 132 133DROP TABLE "ports" CASCADE\g 134DROP SEQUENCE "ports_id_seq" CASCADE ; 135 136CREATE SEQUENCE "ports_id_seq" ; 137 138CREATE TABLE "ports" ( 139 "id" integer DEFAULT nextval('"ports_id_seq"') NOT NULL, 140 "run" int NOT NULL, 141 "name" varchar(128) NOT NULL, 142 "pkgname" varchar(128) NOT NULL, 143 "version" varchar(32) NOT NULL, 144 "description" text, 145 "license" varchar(64) default NULL, 146 "restricted" boolean NOT NULL default false, 147 "www" text, 148 "status" varchar(32) NOT NULL default 'untested', 149 "updated" timestamp NOT NULL default CURRENT_TIMESTAMP , 150 "flavor" character varying(128), 151 "default_flavor" boolean NOT NULL default false, 152 "cpe" varchar(200) default NULL, 153 primary key ("id") 154) ; 155 CREATE OR REPLACE FUNCTION update_ports() RETURNS trigger AS ' 156BEGIN 157 NEW.updated := CURRENT_TIMESTAMP; 158 RETURN NEW; 159END; 160' LANGUAGE 'plpgsql'; 161 162-- before INSERT is handled by 'default CURRENT_TIMESTAMP' 163CREATE TRIGGER add_current_date_to_ports BEFORE UPDATE ON "ports" FOR EACH ROW EXECUTE PROCEDURE 164update_ports(); 165/*!50001 DROP VIEW IF EXISTS ready_ports*/; 166CREATE INDEX "ports_run_idx" ON "ports" USING btree ("run"); 167CREATE INDEX "ports_name_idx" ON "ports" USING btree ("name"); 168 169-- 170-- Temporary table structure for view ready_ports 171-- 172 173DROP TABLE "ready_ports" CASCADE\g 174/*!50001 CREATE TABLE "ready_ports" ( 175 "id" int, 176 "run" int, 177 "name" varchar(128), 178 "pkgname" varchar(128), 179 "version" varchar(32), 180 "description" text, 181 "license" varchar(64), 182 "www" text, 183 "status" varchar(32), 184 "updated" timestamp, 185 "priority" bigint 186) */; 187 188-- 189-- Table structure for table runs 190-- 191 192DROP TABLE "runs" CASCADE\g 193DROP SEQUENCE "runs_id_seq" CASCADE ; 194 195CREATE SEQUENCE "runs_id_seq" ; 196 197CREATE TABLE "runs" ( 198 "id" integer DEFAULT nextval('"runs_id_seq"') NOT NULL, 199 "osversion" varchar(16) NOT NULL, 200 "arch" varchar(11) NOT NULL, 201 "status" varchar(40) NOT NULL default 'inactive', 202 "created" timestamp NOT NULL default CURRENT_TIMESTAMP, 203 primary key ("id") 204); 205 206CREATE INDEX idx_runs_arch_osversion_status 207ON runs (arch, osversion, status); 208 209-- 210-- Table structure for table distfiles 211-- 212 213DROP TABLE "distfiles" CASCADE\g 214DROP SEQUENCE "distfiles_id_seq" CASCADE ; 215 216CREATE SEQUENCE "distfiles_id_seq" ; 217 218CREATE TABLE "distfiles" 219( 220 "id" integer DEFAULT nextval('"distfiles_id_seq"') NOT NULL, 221 "port" int NOT NULL, 222 "filename" varchar(2048), 223 primary key ("id") 224); 225CREATE INDEX "distfiles_port_idx" ON "distfiles" USING btree ("port"); 226 227-- 228-- Table structure for table restricted_distfiles 229-- 230 231DROP TABLE "restricted_distfiles" CASCADE\g 232DROP SEQUENCE "restricted_distfiles_id_seq" CASCADE ; 233 234CREATE SEQUENCE "restricted_distfiles_id_seq" ; 235 236CREATE TABLE "restricted_distfiles" 237( 238 "id" integer DEFAULT nextval('"restricted_distfiles_id_seq"') NOT NULL, 239 "port" int NOT NULL, 240 "filename" varchar(2048), 241 primary key ("id") 242); 243CREATE INDEX "restricted_distfiles_port_idx" ON "restricted_distfiles" USING btree ("port"); 244 245-- 246-- Table structure for table master_sites 247-- 248 249DROP TABLE "master_sites" CASCADE\g 250DROP SEQUENCE "master_sites_id_seq" CASCADE; 251 252CREATE SEQUENCE "master_sites_id_seq"; 253 254CREATE TABLE "master_sites" 255( 256 "id" integer DEFAULT nextval('"master_sites_id_seq"') NOT NULL, 257 "port" int NOT NULL, 258 "url" text, 259 primary key ("id") 260); 261CREATE INDEX "master_sites_port_idx" ON "master_sites" USING btree ("port"); 262 263-- 264-- Table structure for table moved 265-- 266 267DROP TABLE "moved" CASCADE\g 268DROP SEQUENCE "moved_id_seq" CASCADE; 269 270CREATE SEQUENCE "moved_id_seq"; 271 272CREATE TABLE "moved" 273( 274 "id" integer DEFAULT nextval('"moved_id_seq"') NOT NULL, 275 "run" int NOT NULL, 276 "port" varchar(128) NOT NULL, 277 "moved_to" varchar(128) NULL, 278 "date" timestamp NULL, 279 "why" text NULL, 280 primary key ("id") 281); 282CREATE INDEX "moved_port_idx" ON "moved" USING btree ("port"); 283CREATE INDEX "moved_run_idx" ON "moved" USING btree ("run"); 284 285create VIEW ready_ports AS 286 SELECT ports.id AS id, 287 ports.run AS run, 288 ports.name AS name, 289 ports.pkgname AS pkgname, 290 ports.version AS version, 291 ports.description AS description, 292 ports.license AS license, 293 ports.www AS www, 294 ports.status AS status, 295 ports.updated AS updated, 296 (SELECT count(0) AS COUNT 297 FROM depends 298 WHERE depends.dependency = ports.id) AS priority 299 FROM ports 300 LEFT JOIN locks on locks.port = ports.id 301 LEFT JOIN depends on depends.port = ports.id 302 WHERE ports.status = 'untested' and locks.id is null and 303 (depends.port is null or 304 not exists 305 (SELECT depends.port AS port 306 FROM depends WHERE ports.id = depends.port and not exists 307 (SELECT ports.id as dep_id 308 FROM ports 309 WHERE ports.id = depends.dependency and (ports.status = 'pass' or ports.status = 'warn')) 310 or 311 depends.dependency = locks.port)) 312ORDER BY priority desc, ports.name asc; 313 314DROP TABLE "critical_ports" CASCADE\g 315DROP SEQUENCE "critical_ports_id_seq" CASCADE ; 316 317CREATE SEQUENCE "critical_ports_id_seq" ; 318 319CREATE TABLE "critical_ports" ( 320 "id" integer DEFAULT nextval('"critical_ports_id_seq"') NOT NULL, 321 "arch" varchar(12) NOT NULL, 322 "pkgname" varchar(128) NOT NULL, 323 primary key ("id") 324); 325 326alter table ports add foreign key (run) references runs(id); 327alter table port_categories add foreign key (category) references categories(id); 328alter table locks add foreign key (port) references ports(id); 329alter table distfiles add foreign key (port) references ports(id); 330alter table restricted_distfiles add foreign key (port) references ports(id); 331alter table master_sites add foreign key (port) references ports(id); 332alter table moved add foreign key (run) references runs(id); 333alter table events add foreign key ("machine") references machines("id"); 334alter table events add foreign key ("port") references ports("id"); 335ALTER TABLE "depends" ADD FOREIGN KEY ("port") REFERENCES "ports"("id"); 336ALTER TABLE "depends" ADD FOREIGN KEY ("dependency") REFERENCES "ports"("id"); 337ALTER TABLE "port_license_perms" ADD FOREIGN KEY ("port") REFERENCES "ports"("id"); 338ALTER TABLE "logs" ADD FOREIGN KEY ("port") REFERENCES "ports"("id"); 339 340create table mirrors 341( 342 id integer default nextval('mirrors_id_seq'::regclass) not null primary key, 343 country varchar(4) not null, 344 url varchar(255) not null 345); 346 347comment on table mirrors is 'Package mirrors'; 348 349alter table mirrors 350 owner to pgsql; 351 352grant delete, insert, references, select, trigger, truncate, update on mirrors to magus; 353