1 -- $Id: psql-1_3_12.sql,v 1.1 2005-11-14 22:20:21 rurban Exp $
5 -- Init the database with:
6 -- $ /usr/sbin/createdb phpwiki
7 -- $ /usr/sbin/createuser -S -R -d phpwiki # (see httpd_user below)
8 -- $ /usr/bin/psql phpwiki < /usr/share/postgresql/contrib/tsearch2.sql
9 -- $ /usr/bin/psql phpwiki < psql-initialize.sql
11 --================================================================
12 -- Prefix for table names.
14 -- You should set this to the same value you specified for
15 -- DATABASE_PREFIX in config.ini
19 --================================================================
20 -- Which postgres user gets access to the tables?
22 -- You should set this to the name of the postgres
23 -- user who will be accessing the tables.
24 -- See DATABASE_DSN in config.ini
26 -- Commonly, connections from php are made under
27 -- the user name of 'nobody', 'apache' or 'www'.
29 \set httpd_user 'phpwiki'
31 --================================================================
33 -- Don't modify below this point unless you know what you are doing.
35 --================================================================
37 \set page_tbl :prefix 'page'
38 \set page_id_seq :prefix 'page_id_seq'
39 \set page_id_idx :prefix 'page_id_idx'
40 \set page_name_idx :prefix 'page_name_idx'
42 \set version_tbl :prefix 'version'
43 \set vers_id_idx :prefix 'vers_id_idx'
44 \set vers_mtime_idx :prefix 'vers_mtime_idx'
46 \set recent_tbl :prefix 'recent'
47 \set recent_id_idx :prefix 'recent_id_idx'
49 \set nonempty_tbl :prefix 'nonempty'
50 \set nonmt_id_idx :prefix 'nonmt_id_idx'
52 \set link_tbl :prefix 'link'
53 \set link_from_idx :prefix 'link_from_idx'
54 \set link_to_idx :prefix 'link_to_idx'
56 \set session_tbl :prefix 'session'
57 \set sess_id_idx :prefix 'sess_id_idx'
58 \set sess_date_idx :prefix 'sess_date_idx'
59 \set sess_ip_idx :prefix 'sess_ip_idx'
61 \set pref_tbl :prefix 'pref'
62 \set pref_id_idx :prefix 'pref_id_idx'
63 --\set user_tbl :prefix 'users'
64 --\set user_id_idx :prefix 'users_id_idx'
65 \set member_tbl :prefix 'member'
66 \set member_id_idx :prefix 'member_id_idx'
67 \set member_group_idx :prefix 'member_group_idx'
69 \set rating_tbl :prefix 'rating'
70 \set rating_id_idx :prefix 'rating_id_idx'
72 \set accesslog_tbl :prefix 'accesslog'
73 \set accesslog_time_idx :prefix 'log_time_idx'
74 \set accesslog_host_idx :prefix 'log_host_idx'
76 --================================================================
77 \echo schema enhancements
80 ALTER COLUMN id TYPE SERIAL PRIMARY KEY
81 ALTER COLUMN pagename TYPE VARCHAR(100)
82 ALTER COLUMN pagename SET NOT NULL
83 ALTER COLUMN pagename ADD CONSTRAINT pagename_key UNIQUE CHECK (pagename <> '');
84 ALTER TABLE :version_tbl ALTER COLUMN id INT4 REFERENCES :page_tbl ON DELETE CASCADE;
85 ALTER TABLE :nonempty_tbl ALTER COLUMN id INT4 NOT NULL REFERENCES :page_tbl ON DELETE CASCADE;
87 ALTER COLUMN linkfrom INT4 NOT NULL REFERENCES :page_tbl ON DELETE CASCADE
88 ALTER COLUMN linkto INT4 NOT NULL REFERENCES :page_tbl ON DELETE CASCADE
89 ADD COLUMN relation INT4 DEFAULT 0;
90 CREATE INDEX :relation_idx ON :link_tbl (relation);
91 ALTER TABLE :rating_tbl
92 ALTER COLUMN raterpage INT8 NOT NULL REFERENCES :page_tbl ON DELETE CASCADE
93 ALTER COLUMN rateepage INT8 NOT NULL REFERENCES :page_tbl ON DELETE CASCADE;
94 ALTER TABLE :member_tbl ALTER COLUMN userid CHAR(48) NOT NULL REFERENCES :pref_tbl ON DELETE CASCADE;
96 --================================================================
98 \echo add tsearch2 fulltextsearch extension
99 -- Use the tsearch2 fulltextsearch extension: (recommended) 7.4, 8.0, 8.1
100 -- At first init it for the database:
102 -- example of ISpell dictionary
103 -- UPDATE pg_ts_dict SET dict_initoption='DictFile="/usr/local/share/ispell/russian.dict",
104 -- AffFile ="/usr/local/share/ispell/russian.aff", StopFile="/usr/local/share/ispell/russian.stop"'
105 -- WHERE dict_name='ispell_template';
106 -- example of synonym dict
107 -- UPDATE pg_ts_dict SET dict_initoption='/usr/local/share/ispell/english.syn' WHERE dict_id=5;
109 GRANT SELECT ON pg_ts_dict, pg_ts_parser, pg_ts_cfg, pg_ts_cfgmap TO :httpd_user;
110 ALTER TABLE :version_tbl ADD COLUMN idxFTI tsvector;
111 UPDATE :version_tbl SET idxFTI=to_tsvector('default', content);
113 CREATE INDEX idxFTI_idx ON :version_tbl USING gist(idxFTI);
115 CREATE TRIGGER tsvectorupdate BEFORE UPDATE OR INSERT ON :version_tbl
116 FOR EACH ROW EXECUTE PROCEDURE tsearch2(idxFTI, content);
118 --================================================================
120 \echo Initializing stored procedures
122 CREATE OR REPLACE FUNCTION delete_versiondata (id integer, version integer)
124 DELETE FROM version WHERE id=$1 AND version=$2;
125 DELETE FROM recent WHERE id=$1;
126 INSERT INTO recent (id, latestversion, latestmajor, latestminor)
127 SELECT id, MAX(version), MAX(CASE WHEN minor_edit=0 THEN version END),
128 MAX(CASE WHEN minor_edit<>0 THEN version END)
129 FROM version WHERE id=$2 GROUP BY id;
130 DELETE FROM nonempty WHERE id=$1;
131 INSERT INTO nonempty (id)
134 WHERE recent.id=version.id
135 AND version=latestversion
140 CREATE OR REPLACE FUNCTION
141 set_versiondata (id integer, version integer, mtime integer, minor_edit integer,
142 content TEXT, versiondata TEXT)
145 DELETE FROM version WHERE id=$1 AND version=$2;
146 INSERT INTO version (id,version,mtime,minor_edit,content,versiondata)
147 VALUES($1, $2, $3, $4, $5, $6);
148 DELETE FROM recent WHERE id=$1;
149 INSERT INTO recent (id, latestversion, latestmajor, latestminor)
150 SELECT id, MAX(version), MAX(CASE WHEN minor_edit=0 THEN version END),
151 MAX(CASE WHEN minor_edit<>0 THEN version END)
152 FROM version WHERE id=$2 GROUP BY id;
153 DELETE FROM nonempty WHERE id=$1;
154 INSERT INTO nonempty (id)
157 WHERE recent.id=version.id
158 AND version=latestversion
163 CREATE OR REPLACE FUNCTION prepare_rename_page (oldid integer, newid integer)
166 DELETE FROM page WHERE id=$2;
167 DELETE FROM version WHERE id=$2;
168 DELETE FROM recent WHERE id=$2;
169 DELETE FROM nonempty WHERE id=$2;
170 -- We have to fix all referring tables to the old id
171 UPDATE link SET linkfrom=$1 WHERE linkfrom=$2;
172 UPDATE link SET linkto=$1 WHERE linkto=$2;