source: trunk/install/piwigo_structure-pgsql.sql @ 9074

Last change on this file since 9074 was 8802, checked in by plg, 13 years ago

bug 937 fixed: makes sure a user won't see the thumbnail of a photo that has a
higher privacy level than user privacy level.

For an acceptable solution at performance level, I have implemented a cache:
for a given user, each album has a representative_picture_id. This cache also
avoids to perform numerous "order by rand()" SQL queries which is the case
when $confallow_random_representative = true;

File size: 18.7 KB
Line 
1-----------------------------------------------------------------------------
2-- piwigo_caddie
3-----------------------------------------------------------------------------
4
5DROP TABLE IF EXISTS piwigo_caddie;
6CREATE TABLE "piwigo_caddie"
7(
8  "user_id" INTEGER default 0 NOT NULL,
9  "element_id" INTEGER default 0 NOT NULL,
10  PRIMARY KEY ("user_id","element_id")
11);
12
13COMMENT ON TABLE "piwigo_caddie" IS '';
14
15
16SET search_path TO public;
17-----------------------------------------------------------------------------
18-- piwigo_categories
19-----------------------------------------------------------------------------
20
21DROP TYPE IF EXISTS CATEGORIES_STATUS;
22CREATE TYPE CATEGORIES_STATUS AS ENUM('public', 'private');
23
24DROP TABLE IF EXISTS "piwigo_categories" CASCADE;
25CREATE TABLE "piwigo_categories"
26(
27  "id" serial  NOT NULL,
28  "name" VARCHAR(255) default '' NOT NULL,
29  "id_uppercat" INTEGER,
30  "comment" TEXT,
31  "dir" VARCHAR(255),
32  "rank" INTEGER,
33  "status" CATEGORIES_STATUS default 'public'::CATEGORIES_STATUS,
34  "site_id" INTEGER default 1,
35  "visible" BOOLEAN default true,
36  "representative_picture_id" INTEGER,
37  "uppercats" TEXT,
38  "commentable" BOOLEAN default true,
39  "global_rank" VARCHAR(255),
40  "image_order" VARCHAR(128),
41  "permalink" VARCHAR(64),
42  PRIMARY KEY ("id"),
43  CONSTRAINT "categories_i3" UNIQUE ("permalink")
44);
45
46COMMENT ON TABLE "piwigo_categories" IS '';
47
48
49SET search_path TO public;
50CREATE INDEX "categories_i2" ON "piwigo_categories" ("id_uppercat");
51
52-----------------------------------------------------------------------------
53-- piwigo_config
54-----------------------------------------------------------------------------
55
56DROP TABLE IF EXISTS "piwigo_config" CASCADE;
57CREATE TABLE "piwigo_config"
58(
59  "param" VARCHAR(40) default '' NOT NULL,
60  "value" TEXT,
61  "comment" VARCHAR(255),
62  PRIMARY KEY ("param")
63);
64
65COMMENT ON TABLE "piwigo_config" IS '';
66
67
68SET search_path TO public;
69-----------------------------------------------------------------------------
70-- piwigo_favorites
71-----------------------------------------------------------------------------
72
73DROP TABLE IF EXISTS "piwigo_favorites" CASCADE;
74CREATE TABLE "piwigo_favorites"
75(
76  "user_id" INTEGER default 0 NOT NULL,
77  "image_id" INTEGER default 0 NOT NULL,
78  PRIMARY KEY ("user_id","image_id")
79);
80
81COMMENT ON TABLE "piwigo_favorites" IS '';
82
83
84SET search_path TO public;
85-----------------------------------------------------------------------------
86-- piwigo_group_access
87-----------------------------------------------------------------------------
88
89DROP TABLE IF EXISTS "piwigo_group_access" CASCADE;
90CREATE TABLE "piwigo_group_access"
91(
92  "group_id" INTEGER default 0 NOT NULL,
93  "cat_id" INTEGER default 0 NOT NULL,
94  PRIMARY KEY ("group_id","cat_id")
95);
96
97COMMENT ON TABLE "piwigo_group_access" IS '';
98
99
100SET search_path TO public;
101-----------------------------------------------------------------------------
102-- piwigo_groups
103-----------------------------------------------------------------------------
104
105DROP TABLE IF EXISTS "piwigo_groups" CASCADE;
106CREATE TABLE "piwigo_groups"
107(
108  "id" serial  NOT NULL,
109  "name" VARCHAR(255) default '' NOT NULL,
110  "is_default" BOOLEAN default false,
111  PRIMARY KEY ("id"),
112  CONSTRAINT "groups_ui1" UNIQUE ("name")
113);
114
115COMMENT ON TABLE "piwigo_groups" IS '';
116
117
118SET search_path TO public;
119-----------------------------------------------------------------------------
120-- piwigo_history
121-----------------------------------------------------------------------------
122
123DROP TYPE IF EXISTS HISTORY_SECTION;
124CREATE TYPE HISTORY_SECTION AS ENUM('categories','tags','search','list','favorites','most_visited','best_rated','recent_pics','recent_cats');
125DROP TYPE IF EXISTS HISTORY_IMAGE_TYPE;
126CREATE TYPE HISTORY_IMAGE_TYPE AS ENUM('picture','high','other');
127
128DROP TABLE IF EXISTS "piwigo_history" CASCADE;
129CREATE TABLE "piwigo_history"
130(
131  "id" serial  NOT NULL,
132  "date" DATE NOT NULL,
133  "time" TIME NOT NULL,
134  "user_id" INTEGER default 0 NOT NULL,
135  "ip" VARCHAR(15) default '' NOT NULL,
136  "section" HISTORY_SECTION default NULL,
137  "category_id" INTEGER,
138  "tag_ids" VARCHAR(50),
139  "image_id" INTEGER,
140  "summarized" BOOLEAN default false,
141  "image_type" HISTORY_IMAGE_TYPE default NULL,
142  PRIMARY KEY ("id")
143);
144
145COMMENT ON TABLE "piwigo_history" IS '';
146
147
148SET search_path TO public;
149CREATE INDEX "history_i1" ON "piwigo_history" ("summarized");
150
151-----------------------------------------------------------------------------
152-- piwigo_history_summary
153-----------------------------------------------------------------------------
154
155DROP TABLE IF EXISTS "piwigo_history_summary" CASCADE;
156CREATE TABLE "piwigo_history_summary"
157(
158  "year" INTEGER default 0 NOT NULL,
159  "month" INTEGER,
160  "day" INTEGER,
161  "hour" INTEGER,
162  "nb_pages" INTEGER,
163  "id" serial  NOT NULL,
164  PRIMARY KEY ("id"),
165  CONSTRAINT "history_summary_ymdh" UNIQUE ("year","month","day","hour")
166);
167
168COMMENT ON TABLE "piwigo_history_summary" IS '';
169
170
171SET search_path TO public;
172-----------------------------------------------------------------------------
173-- piwigo_image_category
174-----------------------------------------------------------------------------
175
176DROP TABLE IF EXISTS "piwigo_image_category" CASCADE;
177CREATE TABLE "piwigo_image_category"
178(
179  "image_id" INTEGER default 0 NOT NULL,
180  "category_id" INTEGER default 0 NOT NULL,
181  "rank" INTEGER,
182  PRIMARY KEY ("image_id","category_id")
183);
184
185COMMENT ON TABLE "piwigo_image_category" IS '';
186
187
188SET search_path TO public;
189CREATE INDEX "image_category_i1" ON "piwigo_image_category" ("category_id");
190
191-----------------------------------------------------------------------------
192-- piwigo_image_tag
193-----------------------------------------------------------------------------
194
195DROP TABLE IF EXISTS "piwigo_image_tag" CASCADE;
196CREATE TABLE "piwigo_image_tag"
197(
198  "image_id" INTEGER default 0 NOT NULL,
199  "tag_id" INTEGER default 0 NOT NULL,
200  PRIMARY KEY ("image_id","tag_id")
201);
202
203COMMENT ON TABLE "piwigo_image_tag" IS '';
204
205
206SET search_path TO public;
207CREATE INDEX "image_tag_i1" ON "piwigo_image_tag" ("tag_id");
208
209-----------------------------------------------------------------------------
210-- piwigo_images
211-----------------------------------------------------------------------------
212
213DROP TABLE IF EXISTS "piwigo_images" CASCADE;
214CREATE TABLE "piwigo_images"
215(
216  "id" serial  NOT NULL,
217  "file" VARCHAR(255) default '' NOT NULL,
218  "date_available" TIMESTAMP NOT NULL,
219  "date_creation" TIMESTAMP,
220  "tn_ext" VARCHAR(4) default '',
221  "name" VARCHAR(255),
222  "comment" TEXT,
223  "author" VARCHAR(255),
224  "hit" INTEGER default 0 NOT NULL,
225  "filesize" INTEGER,
226  "width" INTEGER,
227  "height" INTEGER,
228  "representative_ext" VARCHAR(4),
229  "date_metadata_update" DATE,
230  "average_rate" FLOAT,
231  "has_high" BOOLEAN default false,
232  "path" VARCHAR(255) default '' NOT NULL,
233  "storage_category_id" INTEGER,
234  "high_filesize" INTEGER,
235  "level" INTEGER default 0 NOT NULL,
236  "md5sum" CHAR(32),
237  "added_by" INTEGER default 0 NOT NULL,
238  PRIMARY KEY ("id")
239);
240
241COMMENT ON TABLE "piwigo_images" IS '';
242
243
244SET search_path TO public;
245CREATE INDEX "images_i2" ON "piwigo_images" ("date_available");
246
247CREATE INDEX "images_i3" ON "piwigo_images" ("average_rate");
248
249CREATE INDEX "images_i4" ON "piwigo_images" ("hit");
250
251CREATE INDEX "images_i5" ON "piwigo_images" ("date_creation");
252
253CREATE INDEX "images_i1" ON "piwigo_images" ("storage_category_id");
254
255-----------------------------------------------------------------------------
256-- Table structure for table `piwigo_languages`
257-----------------------------------------------------------------------------
258
259DROP TABLE IF EXISTS "piwigo_languages";
260CREATE TABLE "piwigo_languages" (
261  "id" varchar(64) NOT NULL default '',
262  "version" varchar(64) NOT NULL default '0',
263  "name" varchar(64) default NULL,
264  PRIMARY KEY  ("id")
265);
266
267COMMENT ON TABLE "piwigo_languages" IS '';
268
269-----------------------------------------------------------------------------
270-- piwigo_old_permalinks
271-----------------------------------------------------------------------------
272
273DROP TABLE IF EXISTS "piwigo_old_permalinks" CASCADE;
274CREATE TABLE "piwigo_old_permalinks"
275(
276  "cat_id" INTEGER default 0 NOT NULL,
277  "permalink" VARCHAR(64) default '' NOT NULL,
278  "date_deleted" TIMESTAMP NOT NULL,
279  "last_hit" TIMESTAMP,
280  "hit" INTEGER default 0 NOT NULL,
281  PRIMARY KEY ("permalink")
282);
283
284COMMENT ON TABLE "piwigo_old_permalinks" IS '';
285
286
287SET search_path TO public;
288-----------------------------------------------------------------------------
289-- piwigo_plugins
290-----------------------------------------------------------------------------
291
292DROP TYPE IF EXISTS PLUGINS_STATE;
293CREATE TYPE PLUGINS_STATE AS ENUM('active', 'inactive');
294
295DROP TABLE IF EXISTS "piwigo_plugins" CASCADE;
296CREATE TABLE "piwigo_plugins"
297(
298  "id" VARCHAR(64) default '' NOT NULL,
299  "state" PLUGINS_STATE default 'inactive'::PLUGINS_STATE,
300  "version" VARCHAR(64) default '0' NOT NULL,
301  PRIMARY KEY ("id")
302);
303
304COMMENT ON TABLE "piwigo_plugins" IS '';
305
306
307SET search_path TO public;
308-----------------------------------------------------------------------------
309-- piwigo_rate
310-----------------------------------------------------------------------------
311
312DROP TABLE IF EXISTS "piwigo_rate" CASCADE;
313CREATE TABLE "piwigo_rate"
314(
315  "user_id" INTEGER default 0 NOT NULL,
316  "element_id" INTEGER default 0 NOT NULL,
317  "anonymous_id" VARCHAR(45) default '' NOT NULL,
318  "rate" INTEGER default 0 NOT NULL,
319  "date" DATE  NOT NULL,
320  PRIMARY KEY ("user_id","element_id","anonymous_id")
321);
322
323COMMENT ON TABLE "piwigo_rate" IS '';
324
325
326SET search_path TO public;
327-----------------------------------------------------------------------------
328-- piwigo_search
329-----------------------------------------------------------------------------
330
331DROP TABLE IF EXISTS "piwigo_search" CASCADE;
332CREATE TABLE "piwigo_search"
333(
334  "id" serial  NOT NULL,
335  "last_seen" DATE,
336  "rules" TEXT,
337  PRIMARY KEY ("id")
338);
339
340COMMENT ON TABLE "piwigo_search" IS '';
341
342
343SET search_path TO public;
344-----------------------------------------------------------------------------
345-- piwigo_sessions
346-----------------------------------------------------------------------------
347
348DROP TABLE IF EXISTS "piwigo_sessions" CASCADE;
349CREATE TABLE "piwigo_sessions"
350(
351  "id" VARCHAR(255) default '' NOT NULL,
352  "data" TEXT  NOT NULL,
353  "expiration" TIMESTAMP NOT NULL,
354  PRIMARY KEY ("id")
355);
356
357COMMENT ON TABLE "piwigo_sessions" IS '';
358
359
360SET search_path TO public;
361-----------------------------------------------------------------------------
362-- piwigo_sites
363-----------------------------------------------------------------------------
364
365DROP TABLE IF EXISTS "piwigo_sites" CASCADE;
366CREATE TABLE "piwigo_sites"
367(
368  "id" serial  NOT NULL,
369  "galleries_url" VARCHAR(255) default '' NOT NULL,
370  PRIMARY KEY ("id"),
371  CONSTRAINT "sites_ui1" UNIQUE ("galleries_url")
372);
373
374COMMENT ON TABLE "piwigo_sites" IS '';
375
376
377SET search_path TO public;
378-----------------------------------------------------------------------------
379-- piwigo_stuffs
380-----------------------------------------------------------------------------
381
382DROP TABLE IF EXISTS "piwigo_stuffs" CASCADE;
383CREATE TABLE "piwigo_stuffs"
384(
385  "id" INTEGER  NOT NULL,
386  "pos" INTEGER  NOT NULL,
387  "name" TEXT  NOT NULL,
388  "descr" VARCHAR(255),
389  "type" VARCHAR(255)  NOT NULL,
390  "datas" TEXT,
391  "users" VARCHAR(255),
392  "groups" VARCHAR(255),
393  "show_title" CHAR  NOT NULL,
394  "on_home" CHAR  NOT NULL,
395  "on_cats" CHAR  NOT NULL,
396  "on_picture" CHAR  NOT NULL,
397  "id_line" VARCHAR(1),
398  "width" INTEGER,
399  PRIMARY KEY ("id")
400);
401
402COMMENT ON TABLE "piwigo_stuffs" IS '';
403
404
405SET search_path TO public;
406CREATE INDEX "on_home" ON "piwigo_stuffs" ("on_home");
407
408CREATE INDEX "on_cats" ON "piwigo_stuffs" ("on_cats");
409
410CREATE INDEX "on_picture" ON "piwigo_stuffs" ("on_picture");
411
412-----------------------------------------------------------------------------
413-- piwigo_tags
414-----------------------------------------------------------------------------
415
416DROP TABLE IF EXISTS "piwigo_tags" CASCADE;
417CREATE TABLE "piwigo_tags"
418(
419  "id" serial  NOT NULL,
420  "name" VARCHAR(255) default '' NOT NULL,
421  "url_name" VARCHAR(255) default '' NOT NULL,
422  PRIMARY KEY ("id")
423);
424
425COMMENT ON TABLE "piwigo_tags" IS '';
426
427
428SET search_path TO public;
429CREATE INDEX "tags_i1" ON "piwigo_tags" ("url_name");
430
431-----------------------------------------------------------------------------
432-- piwigo_themes
433-----------------------------------------------------------------------------
434
435DROP TABLE IF EXISTS "piwigo_themes" CASCADE;
436CREATE TABLE "piwigo_themes"
437(
438  "id" varchar(64) default '' NOT NULL,
439  "version" varchar(64) NOT NULL default '0',
440  "name" varchar(64) default NULL,
441  PRIMARY KEY  ("id")
442);
443
444COMMENT ON TABLE "piwigo_themes" IS '';
445
446-----------------------------------------------------------------------------
447-- piwigo_upgrade
448-----------------------------------------------------------------------------
449
450DROP TABLE IF EXISTS "piwigo_upgrade" CASCADE;
451CREATE TABLE "piwigo_upgrade"
452(
453  "id" VARCHAR(20) default '' NOT NULL,
454  "applied" TIMESTAMP NOT NULL,
455  "description" VARCHAR(255),
456  PRIMARY KEY ("id")
457);
458
459COMMENT ON TABLE "piwigo_upgrade" IS '';
460
461
462SET search_path TO public;
463-----------------------------------------------------------------------------
464-- piwigo_user_access
465-----------------------------------------------------------------------------
466
467DROP TABLE IF EXISTS "piwigo_user_access" CASCADE;
468CREATE TABLE "piwigo_user_access"
469(
470  "user_id" INTEGER default 0 NOT NULL,
471  "cat_id" INTEGER default 0 NOT NULL,
472  PRIMARY KEY ("user_id","cat_id")
473);
474
475COMMENT ON TABLE "piwigo_user_access" IS '';
476
477
478SET search_path TO public;
479-----------------------------------------------------------------------------
480-- piwigo_user_cache
481-----------------------------------------------------------------------------
482
483DROP TYPE IF EXISTS USER_CACHE_IMAGE_ACCESS_TYPE;
484CREATE TYPE USER_CACHE_IMAGE_ACCESS_TYPE AS ENUM('NOT IN','IN');
485
486DROP TABLE IF EXISTS "piwigo_user_cache" CASCADE;
487CREATE TABLE "piwigo_user_cache"
488(
489  "user_id" INTEGER default 0 NOT NULL,
490  "need_update" BOOLEAN default true,
491  "cache_update_time" INTEGER default 0 NOT NULL,
492  "forbidden_categories" TEXT,
493  "nb_total_images" INTEGER,
494  "image_access_type" USER_CACHE_IMAGE_ACCESS_TYPE default 'NOT IN'::USER_CACHE_IMAGE_ACCESS_TYPE,
495  "image_access_list" TEXT,
496  PRIMARY KEY ("user_id")
497);
498
499COMMENT ON TABLE "piwigo_user_cache" IS '';
500
501
502SET search_path TO public;
503-----------------------------------------------------------------------------
504-- piwigo_user_cache_categories
505-----------------------------------------------------------------------------
506
507DROP TABLE IF EXISTS "piwigo_user_cache_categories" CASCADE;
508CREATE TABLE "piwigo_user_cache_categories"
509(
510  "user_id" INTEGER default 0 NOT NULL,
511  "cat_id" INTEGER default 0 NOT NULL,
512  "date_last" TIMESTAMP,
513  "max_date_last" TIMESTAMP,
514  "nb_images" INTEGER default 0 NOT NULL,
515  "count_images" INTEGER default 0,
516  "count_categories" INTEGER default 0,
517  "user_representative_picture_id" INTEGER,
518  PRIMARY KEY ("user_id","cat_id")
519);
520
521COMMENT ON TABLE "piwigo_user_cache_categories" IS '';
522
523
524SET search_path TO public;
525-----------------------------------------------------------------------------
526-- piwigo_user_feed
527-----------------------------------------------------------------------------
528
529DROP TABLE IF EXISTS "piwigo_user_feed" CASCADE;
530CREATE TABLE "piwigo_user_feed"
531(
532  "id" VARCHAR(50) default '' NOT NULL,
533  "user_id" INTEGER default 0 NOT NULL,
534  "last_check" TIMESTAMP,
535  PRIMARY KEY ("id")
536);
537
538COMMENT ON TABLE "piwigo_user_feed" IS '';
539
540
541SET search_path TO public;
542-----------------------------------------------------------------------------
543-- piwigo_user_group
544-----------------------------------------------------------------------------
545
546DROP TABLE IF EXISTS "piwigo_user_group" CASCADE;
547CREATE TABLE "piwigo_user_group"
548(
549  "user_id" INTEGER default 0 NOT NULL,
550  "group_id" INTEGER default 0 NOT NULL,
551  PRIMARY KEY ("user_id","group_id")
552);
553
554COMMENT ON TABLE "piwigo_user_group" IS '';
555
556
557SET search_path TO public;
558-----------------------------------------------------------------------------
559-- piwigo_user_infos
560-----------------------------------------------------------------------------
561
562DROP TYPE IF EXISTS USER_INFOS_STATUS;
563CREATE TYPE USER_INFOS_STATUS AS ENUM('webmaster','admin','normal','generic','guest');
564
565DROP TABLE IF EXISTS "piwigo_user_infos" CASCADE;
566CREATE TABLE "piwigo_user_infos"
567(
568  "user_id" INTEGER default 0 NOT NULL,
569  "nb_image_line" INTEGER default 5 NOT NULL,
570  "nb_line_page" INTEGER default 3 NOT NULL,
571  "status" USER_INFOS_STATUS default 'guest'::USER_INFOS_STATUS,
572  "language" VARCHAR(50) default 'en_UK' NOT NULL,
573  "maxwidth" INTEGER,
574  "maxheight" INTEGER,
575  "expand" BOOLEAN default false,
576  "show_nb_comments" BOOLEAN default false,
577  "show_nb_hits" BOOLEAN default false,
578  "recent_period" INTEGER default 7 NOT NULL,
579  "theme" VARCHAR(255) default 'Sylvia' NOT NULL,
580  "registration_date" TIMESTAMP NOT NULL,
581  "enabled_high" BOOLEAN default true,
582  "level" INTEGER default 0 NOT NULL,
583  PRIMARY KEY ("user_id"),
584  CONSTRAINT "user_infos_ui1" UNIQUE ("user_id")
585);
586
587COMMENT ON TABLE "piwigo_user_infos" IS '';
588
589
590SET search_path TO public;
591-----------------------------------------------------------------------------
592-- piwigo_user_mail_notification
593-----------------------------------------------------------------------------
594
595DROP TABLE IF EXISTS "piwigo_user_mail_notification" CASCADE;
596CREATE TABLE "piwigo_user_mail_notification"
597(
598  "user_id" INTEGER default 0 NOT NULL,
599  "check_key" VARCHAR(16) default '' NOT NULL,
600  "enabled" BOOLEAN default false,
601  "last_send" TIMESTAMP,
602  PRIMARY KEY ("user_id"),
603  CONSTRAINT "user_mail_notification_ui1" UNIQUE ("check_key")
604);
605
606COMMENT ON TABLE "piwigo_user_mail_notification" IS '';
607
608
609SET search_path TO public;
610-----------------------------------------------------------------------------
611-- piwigo_users
612-----------------------------------------------------------------------------
613
614DROP TABLE IF EXISTS "piwigo_users" CASCADE;
615CREATE TABLE "piwigo_users"
616(
617  "id" serial  NOT NULL,
618  "username" VARCHAR(100) default '' NOT NULL,
619  "password" VARCHAR(32),
620  "mail_address" VARCHAR(255),
621  PRIMARY KEY ("id"),
622  CONSTRAINT "users_ui1" UNIQUE ("username")
623);
624
625COMMENT ON TABLE "piwigo_users" IS '';
626
627
628SET search_path TO public;
629
630-----------------------------------------------------------------------------
631-- piwigo_comments
632-----------------------------------------------------------------------------
633
634DROP TABLE IF EXISTS "piwigo_comments" CASCADE;
635CREATE TABLE "piwigo_comments"
636(
637  "id" serial  NOT NULL,
638  "image_id" INTEGER default 0 NOT NULL,
639  "date" TIMESTAMP  NOT NULL,
640  "author" VARCHAR(255),
641  "content" TEXT,
642  "validated" BOOLEAN default false,
643  "validation_date" TIMESTAMP,
644  "author_id" INTEGER REFERENCES "piwigo_users" (id),
645  PRIMARY KEY ("id")
646);
647
648COMMENT ON TABLE "piwigo_comments" IS '';
649
650
651SET search_path TO public;
652CREATE INDEX "comments_i2" ON "piwigo_comments" ("validation_date");
653
654CREATE INDEX "comments_i1" ON "piwigo_comments" ("image_id");
Note: See TracBrowser for help on using the repository browser.