2006-04-30 17:36:16 +00:00
|
|
|
-- SQL to create the initial tables for the MediaWiki database.
|
|
|
|
|
-- This is read and executed by the install script; you should
|
|
|
|
|
-- not have to run it by itself unless doing a manual install.
|
|
|
|
|
-- This is the PostgreSQL version.
|
2006-06-29 01:44:12 +00:00
|
|
|
-- For information about each table, please see the notes in maintenance/tables.sql
|
2006-04-30 17:36:16 +00:00
|
|
|
-- Please make sure all dollar-quoting uses $mw$ at the start of the line
|
2008-03-02 16:42:24 +00:00
|
|
|
-- TODO: Change CHAR/SMALLINT to BOOL (still used in a non-bool fashion in PHP code)
|
2006-04-30 17:36:16 +00:00
|
|
|
|
2006-07-05 03:49:36 +00:00
|
|
|
BEGIN;
|
2006-04-30 17:36:16 +00:00
|
|
|
SET client_min_messages = 'ERROR';
|
|
|
|
|
|
|
|
|
|
CREATE SEQUENCE user_user_id_seq MINVALUE 0 START WITH 0;
|
2006-07-23 02:04:40 +00:00
|
|
|
CREATE TABLE mwuser ( -- replace reserved word 'user'
|
2006-06-29 01:44:12 +00:00
|
|
|
user_id INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('user_user_id_seq'),
|
|
|
|
|
user_name TEXT NOT NULL UNIQUE,
|
2006-04-30 17:36:16 +00:00
|
|
|
user_real_name TEXT,
|
|
|
|
|
user_password TEXT,
|
|
|
|
|
user_newpassword TEXT,
|
2006-10-23 09:35:30 +00:00
|
|
|
user_newpass_time TIMESTAMPTZ,
|
2007-09-24 20:10:00 +00:00
|
|
|
user_token TEXT,
|
2006-04-30 17:36:16 +00:00
|
|
|
user_email TEXT,
|
2007-09-24 20:10:00 +00:00
|
|
|
user_email_token TEXT,
|
2006-04-30 17:36:16 +00:00
|
|
|
user_email_token_expires TIMESTAMPTZ,
|
|
|
|
|
user_email_authenticated TIMESTAMPTZ,
|
|
|
|
|
user_touched TIMESTAMPTZ,
|
2006-12-14 13:22:52 +00:00
|
|
|
user_registration TIMESTAMPTZ,
|
Password Expiration
Add functionality to expire users' passwords:
* Adds column to the user table to keep a password expiration
* Adds $wgPasswordExpirationDays, which will force users to reset
their passwords after a set number of days. By default, this set
to false, so passwords never expire.
* Adds a default grace period of 7 days, where if the user's password
is expired, they can still login, but are encouraged to reset their
password.
* Adds hook 'LoginPasswordResetMessage' to update reset message, in
case an extension wants to vary the message on a particular reset
event.
* Adds hook 'ResetPasswordExpiration' to allow extensions to change
the expiration date when the user resets their password. E.g., if
an extension wants to vary the expiration based on the user's group.
If the user is in the grace period, they get a password reset form
added to the login successful page. If an extension prevents showing
the login successful page (like CentralAuth), it should be updated to
show a password change form during the grace period. After the grace
period, the user will not be able to login without changing their
password.
Also prevents a successful reset if the user is "changing" their
password to their existing password.
No passwords will expire by default. Sites will have to call
User->expirePassword() from their own maintenance script to trigger a
password reset for a user.
Bug: 54997
Change-Id: I92a9fc63b409b182b1d7b48781d73fc7216f8061
2013-10-09 18:09:28 +00:00
|
|
|
user_editcount INTEGER,
|
|
|
|
|
user_password_expires TIMESTAMPTZ NULL
|
2006-04-30 17:36:16 +00:00
|
|
|
);
|
2018-04-09 15:57:27 +00:00
|
|
|
ALTER SEQUENCE user_user_id_seq OWNED BY mwuser.user_id;
|
2006-07-23 02:04:40 +00:00
|
|
|
CREATE INDEX user_email_token_idx ON mwuser (user_email_token);
|
2006-06-29 01:44:12 +00:00
|
|
|
|
|
|
|
|
-- Create a dummy user to satisfy fk contraints especially with revisions
|
2006-07-23 02:04:40 +00:00
|
|
|
INSERT INTO mwuser
|
2006-07-22 17:30:39 +00:00
|
|
|
VALUES (DEFAULT,'Anonymous','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,now(),now());
|
2006-04-30 17:36:16 +00:00
|
|
|
|
2011-06-25 02:52:30 +00:00
|
|
|
|
2006-04-30 17:36:16 +00:00
|
|
|
CREATE SEQUENCE page_page_id_seq;
|
|
|
|
|
CREATE TABLE page (
|
2006-06-29 01:44:12 +00:00
|
|
|
page_id INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('page_page_id_seq'),
|
|
|
|
|
page_namespace SMALLINT NOT NULL,
|
|
|
|
|
page_title TEXT NOT NULL,
|
2006-04-30 17:36:16 +00:00
|
|
|
page_restrictions TEXT,
|
2008-02-10 16:50:38 +00:00
|
|
|
page_is_redirect SMALLINT NOT NULL DEFAULT 0,
|
|
|
|
|
page_is_new SMALLINT NOT NULL DEFAULT 0,
|
2006-07-05 04:15:57 +00:00
|
|
|
page_random NUMERIC(15,14) NOT NULL DEFAULT RANDOM(),
|
2006-04-30 17:36:16 +00:00
|
|
|
page_touched TIMESTAMPTZ,
|
2013-12-13 00:54:51 +00:00
|
|
|
page_links_updated TIMESTAMPTZ NULL,
|
2006-06-29 01:44:12 +00:00
|
|
|
page_latest INTEGER NOT NULL, -- FK?
|
2012-10-10 14:09:37 +00:00
|
|
|
page_len INTEGER NOT NULL,
|
2014-05-25 14:38:50 +00:00
|
|
|
page_content_model TEXT,
|
|
|
|
|
page_lang TEXT DEFAULT NULL
|
2006-04-30 17:36:16 +00:00
|
|
|
);
|
2018-04-09 15:57:27 +00:00
|
|
|
ALTER SEQUENCE page_page_id_seq OWNED BY page.page_id;
|
2020-11-23 05:53:46 +00:00
|
|
|
CREATE UNIQUE INDEX name_title ON page (page_namespace, page_title);
|
2011-01-19 16:14:37 +00:00
|
|
|
CREATE INDEX page_main_title ON page (page_title text_pattern_ops) WHERE page_namespace = 0;
|
|
|
|
|
CREATE INDEX page_talk_title ON page (page_title text_pattern_ops) WHERE page_namespace = 1;
|
|
|
|
|
CREATE INDEX page_user_title ON page (page_title text_pattern_ops) WHERE page_namespace = 2;
|
|
|
|
|
CREATE INDEX page_utalk_title ON page (page_title text_pattern_ops) WHERE page_namespace = 3;
|
|
|
|
|
CREATE INDEX page_project_title ON page (page_title text_pattern_ops) WHERE page_namespace = 4;
|
|
|
|
|
CREATE INDEX page_mediawiki_title ON page (page_title text_pattern_ops) WHERE page_namespace = 8;
|
2020-11-23 05:53:46 +00:00
|
|
|
CREATE INDEX page_random ON page (page_random);
|
|
|
|
|
CREATE INDEX page_len ON page (page_len);
|
|
|
|
|
CREATE INDEX page_redirect_namespace_len ON page (page_is_redirect, page_namespace, page_len);
|
2006-04-30 17:36:16 +00:00
|
|
|
|
2006-07-16 17:54:06 +00:00
|
|
|
CREATE FUNCTION page_deleted() RETURNS TRIGGER LANGUAGE plpgsql AS
|
|
|
|
|
$mw$
|
|
|
|
|
BEGIN
|
|
|
|
|
DELETE FROM recentchanges WHERE rc_namespace = OLD.page_namespace AND rc_title = OLD.page_title;
|
|
|
|
|
RETURN NULL;
|
|
|
|
|
END;
|
|
|
|
|
$mw$;
|
|
|
|
|
|
|
|
|
|
CREATE TRIGGER page_deleted AFTER DELETE ON page
|
2006-07-22 17:30:39 +00:00
|
|
|
FOR EACH ROW EXECUTE PROCEDURE page_deleted();
|
2006-07-16 17:54:06 +00:00
|
|
|
|
2009-10-28 17:08:06 +00:00
|
|
|
CREATE SEQUENCE revision_rev_id_seq;
|
2006-04-30 17:36:16 +00:00
|
|
|
CREATE TABLE revision (
|
2012-10-10 14:09:37 +00:00
|
|
|
rev_id INTEGER NOT NULL UNIQUE DEFAULT nextval('revision_rev_id_seq'),
|
|
|
|
|
rev_page INTEGER NULL REFERENCES page (page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
|
2019-11-21 20:47:13 +00:00
|
|
|
rev_comment_id INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
rev_actor INTEGER NOT NULL DEFAULT 0,
|
2012-10-10 14:09:37 +00:00
|
|
|
rev_timestamp TIMESTAMPTZ NOT NULL,
|
|
|
|
|
rev_minor_edit SMALLINT NOT NULL DEFAULT 0,
|
|
|
|
|
rev_deleted SMALLINT NOT NULL DEFAULT 0,
|
|
|
|
|
rev_len INTEGER NULL,
|
|
|
|
|
rev_parent_id INTEGER NULL,
|
2019-11-21 20:47:13 +00:00
|
|
|
rev_sha1 TEXT NOT NULL DEFAULT ''
|
2006-04-30 17:36:16 +00:00
|
|
|
);
|
2018-04-09 15:57:27 +00:00
|
|
|
ALTER SEQUENCE revision_rev_id_seq OWNED BY revision.rev_id;
|
2006-06-29 01:44:12 +00:00
|
|
|
CREATE UNIQUE INDEX revision_unique ON revision (rev_page, rev_id);
|
|
|
|
|
CREATE INDEX rev_timestamp_idx ON revision (rev_timestamp);
|
2020-06-02 12:23:39 +00:00
|
|
|
CREATE INDEX rev_actor_timestamp ON revision (rev_actor,rev_timestamp,rev_id);
|
2019-11-21 20:47:13 +00:00
|
|
|
CREATE INDEX rev_page_actor_timestamp ON revision (rev_page,rev_actor,rev_timestamp);
|
2006-04-30 17:36:16 +00:00
|
|
|
|
2007-03-17 19:12:05 +00:00
|
|
|
|
2012-10-28 02:23:50 +00:00
|
|
|
CREATE SEQUENCE archive_ar_id_seq;
|
2007-03-10 19:06:40 +00:00
|
|
|
CREATE TABLE archive (
|
2012-10-28 02:23:50 +00:00
|
|
|
ar_id INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('archive_ar_id_seq'),
|
2012-10-10 14:09:37 +00:00
|
|
|
ar_namespace SMALLINT NOT NULL,
|
|
|
|
|
ar_title TEXT NOT NULL,
|
|
|
|
|
ar_page_id INTEGER NULL,
|
|
|
|
|
ar_parent_id INTEGER NULL,
|
|
|
|
|
ar_sha1 TEXT NOT NULL DEFAULT '',
|
2019-01-04 18:55:11 +00:00
|
|
|
ar_comment_id INTEGER NOT NULL,
|
2019-07-23 17:40:52 +00:00
|
|
|
ar_actor INTEGER NOT NULL,
|
2012-10-10 14:09:37 +00:00
|
|
|
ar_timestamp TIMESTAMPTZ NOT NULL,
|
|
|
|
|
ar_minor_edit SMALLINT NOT NULL DEFAULT 0,
|
2018-01-04 19:35:13 +00:00
|
|
|
ar_rev_id INTEGER NOT NULL,
|
2012-10-10 14:09:37 +00:00
|
|
|
ar_deleted SMALLINT NOT NULL DEFAULT 0,
|
2019-11-21 20:47:13 +00:00
|
|
|
ar_len INTEGER NULL
|
2006-04-30 17:36:16 +00:00
|
|
|
);
|
2018-04-09 15:57:27 +00:00
|
|
|
ALTER SEQUENCE archive_ar_id_seq OWNED BY archive.ar_id;
|
2007-03-13 23:02:43 +00:00
|
|
|
CREATE INDEX archive_name_title_timestamp ON archive (ar_namespace,ar_title,ar_timestamp);
|
2017-09-12 17:12:29 +00:00
|
|
|
CREATE INDEX archive_actor ON archive (ar_actor);
|
2018-04-27 17:11:01 +00:00
|
|
|
CREATE UNIQUE INDEX ar_revid_uniq ON archive (ar_rev_id);
|
2006-07-17 01:17:07 +00:00
|
|
|
|
2006-04-30 17:36:16 +00:00
|
|
|
|
2009-10-28 17:08:06 +00:00
|
|
|
CREATE SEQUENCE ipblocks_ipb_id_seq;
|
2006-04-30 17:36:16 +00:00
|
|
|
CREATE TABLE ipblocks (
|
2009-10-28 17:08:06 +00:00
|
|
|
ipb_id INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('ipblocks_ipb_id_seq'),
|
2006-11-06 02:31:59 +00:00
|
|
|
ipb_address TEXT NULL,
|
2010-03-22 18:13:06 +00:00
|
|
|
ipb_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED,
|
2019-07-23 17:40:52 +00:00
|
|
|
ipb_by_actor INTEGER NOT NULL,
|
2019-01-04 18:55:11 +00:00
|
|
|
ipb_reason_id INTEGER NOT NULL,
|
2006-11-01 14:18:33 +00:00
|
|
|
ipb_timestamp TIMESTAMPTZ NOT NULL,
|
2008-02-10 16:50:38 +00:00
|
|
|
ipb_auto SMALLINT NOT NULL DEFAULT 0,
|
|
|
|
|
ipb_anon_only SMALLINT NOT NULL DEFAULT 0,
|
|
|
|
|
ipb_create_account SMALLINT NOT NULL DEFAULT 1,
|
|
|
|
|
ipb_enable_autoblock SMALLINT NOT NULL DEFAULT 1,
|
2006-11-01 14:18:33 +00:00
|
|
|
ipb_expiry TIMESTAMPTZ NOT NULL,
|
|
|
|
|
ipb_range_start TEXT,
|
2007-03-14 00:50:56 +00:00
|
|
|
ipb_range_end TEXT,
|
2008-01-28 01:35:31 +00:00
|
|
|
ipb_deleted SMALLINT NOT NULL DEFAULT 0,
|
2008-10-11 12:08:10 +00:00
|
|
|
ipb_block_email SMALLINT NOT NULL DEFAULT 0,
|
2012-03-28 02:44:32 +00:00
|
|
|
ipb_allow_usertalk SMALLINT NOT NULL DEFAULT 0,
|
2018-06-18 14:26:20 +00:00
|
|
|
ipb_parent_block_id INTEGER NULL REFERENCES ipblocks(ipb_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED,
|
|
|
|
|
ipb_sitewide SMALLINT NOT NULL DEFAULT 1
|
2006-04-30 17:36:16 +00:00
|
|
|
);
|
2018-04-09 15:57:27 +00:00
|
|
|
ALTER SEQUENCE ipblocks_ipb_id_seq OWNED BY ipblocks.ipb_id;
|
2020-05-04 20:16:03 +00:00
|
|
|
CREATE UNIQUE INDEX ipb_address_unique ON ipblocks (ipb_address,ipb_user,ipb_auto);
|
2006-06-29 01:44:12 +00:00
|
|
|
CREATE INDEX ipb_user ON ipblocks (ipb_user);
|
2021-01-09 14:01:51 +00:00
|
|
|
CREATE INDEX ipb_timestamp ON ipblocks (ipb_timestamp);
|
|
|
|
|
CREATE INDEX ipb_expiry ON ipblocks (ipb_expiry);
|
2006-06-29 01:44:12 +00:00
|
|
|
CREATE INDEX ipb_range ON ipblocks (ipb_range_start,ipb_range_end);
|
2012-03-28 02:44:32 +00:00
|
|
|
CREATE INDEX ipb_parent_block_id ON ipblocks (ipb_parent_block_id);
|
2006-04-30 17:36:16 +00:00
|
|
|
|
|
|
|
|
CREATE TABLE image (
|
2006-06-29 01:44:12 +00:00
|
|
|
img_name TEXT NOT NULL PRIMARY KEY,
|
2006-07-16 15:40:25 +00:00
|
|
|
img_size INTEGER NOT NULL,
|
|
|
|
|
img_width INTEGER NOT NULL,
|
|
|
|
|
img_height INTEGER NOT NULL,
|
2007-09-23 20:47:17 +00:00
|
|
|
img_metadata BYTEA NOT NULL DEFAULT '',
|
2006-04-30 17:36:16 +00:00
|
|
|
img_bits SMALLINT,
|
|
|
|
|
img_media_type TEXT,
|
2006-06-29 01:44:12 +00:00
|
|
|
img_major_mime TEXT DEFAULT 'unknown',
|
|
|
|
|
img_minor_mime TEXT DEFAULT 'unknown',
|
2019-01-04 18:55:11 +00:00
|
|
|
img_description_id INTEGER NOT NULL,
|
2019-07-23 17:40:52 +00:00
|
|
|
img_actor INTEGER NOT NULL,
|
2007-07-27 12:23:58 +00:00
|
|
|
img_timestamp TIMESTAMPTZ,
|
|
|
|
|
img_sha1 TEXT NOT NULL DEFAULT ''
|
2006-04-30 17:36:16 +00:00
|
|
|
);
|
2006-06-29 01:44:12 +00:00
|
|
|
CREATE INDEX img_size_idx ON image (img_size);
|
|
|
|
|
CREATE INDEX img_timestamp_idx ON image (img_timestamp);
|
2007-07-27 12:23:58 +00:00
|
|
|
CREATE INDEX img_sha1 ON image (img_sha1);
|
2006-04-30 17:36:16 +00:00
|
|
|
|
2009-10-28 17:08:06 +00:00
|
|
|
CREATE SEQUENCE recentchanges_rc_id_seq;
|
2006-04-30 17:36:16 +00:00
|
|
|
CREATE TABLE recentchanges (
|
2009-10-28 17:08:06 +00:00
|
|
|
rc_id INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('recentchanges_rc_id_seq'),
|
2006-06-29 01:44:12 +00:00
|
|
|
rc_timestamp TIMESTAMPTZ NOT NULL,
|
2019-07-23 17:40:52 +00:00
|
|
|
rc_actor INTEGER NOT NULL,
|
2006-06-29 01:44:12 +00:00
|
|
|
rc_namespace SMALLINT NOT NULL,
|
|
|
|
|
rc_title TEXT NOT NULL,
|
2019-01-04 18:55:11 +00:00
|
|
|
rc_comment_id INTEGER NOT NULL,
|
2008-02-10 16:50:38 +00:00
|
|
|
rc_minor SMALLINT NOT NULL DEFAULT 0,
|
|
|
|
|
rc_bot SMALLINT NOT NULL DEFAULT 0,
|
|
|
|
|
rc_new SMALLINT NOT NULL DEFAULT 0,
|
2014-12-08 20:27:11 +00:00
|
|
|
rc_cur_id INTEGER NULL,
|
2006-06-29 01:44:12 +00:00
|
|
|
rc_this_oldid INTEGER NOT NULL,
|
|
|
|
|
rc_last_oldid INTEGER NOT NULL,
|
2008-02-10 16:50:38 +00:00
|
|
|
rc_type SMALLINT NOT NULL DEFAULT 0,
|
2013-10-25 20:10:42 +00:00
|
|
|
rc_source TEXT NOT NULL,
|
2008-02-10 16:50:38 +00:00
|
|
|
rc_patrolled SMALLINT NOT NULL DEFAULT 0,
|
2006-12-09 11:36:35 +00:00
|
|
|
rc_ip CIDR,
|
2006-12-14 15:34:56 +00:00
|
|
|
rc_old_len INTEGER,
|
2007-03-09 21:51:11 +00:00
|
|
|
rc_new_len INTEGER,
|
2007-09-24 20:10:00 +00:00
|
|
|
rc_deleted SMALLINT NOT NULL DEFAULT 0,
|
2007-03-17 19:12:05 +00:00
|
|
|
rc_logid INTEGER NOT NULL DEFAULT 0,
|
2007-03-14 00:06:36 +00:00
|
|
|
rc_log_type TEXT,
|
2007-03-09 21:51:11 +00:00
|
|
|
rc_log_action TEXT,
|
2007-03-14 00:50:56 +00:00
|
|
|
rc_params TEXT
|
2006-04-30 17:36:16 +00:00
|
|
|
);
|
2018-04-09 15:57:27 +00:00
|
|
|
ALTER SEQUENCE recentchanges_rc_id_seq OWNED BY recentchanges.rc_id;
|
2006-06-29 01:44:12 +00:00
|
|
|
CREATE INDEX rc_timestamp ON recentchanges (rc_timestamp);
|
2018-03-22 19:46:49 +00:00
|
|
|
CREATE INDEX rc_namespace_title_timestamp ON recentchanges (rc_namespace, rc_title, rc_timestamp);
|
2006-06-29 01:44:12 +00:00
|
|
|
CREATE INDEX rc_cur_id ON recentchanges (rc_cur_id);
|
|
|
|
|
CREATE INDEX new_name_timestamp ON recentchanges (rc_new, rc_namespace, rc_timestamp);
|
|
|
|
|
CREATE INDEX rc_ip ON recentchanges (rc_ip);
|
2021-01-16 22:15:54 +00:00
|
|
|
CREATE INDEX rc_ns_actor ON recentchanges (rc_namespace, rc_actor);
|
|
|
|
|
CREATE INDEX rc_actor ON recentchanges (rc_actor, rc_timestamp);
|
2016-07-14 16:01:04 +00:00
|
|
|
CREATE INDEX rc_name_type_patrolled_timestamp ON recentchanges (rc_namespace, rc_type, rc_patrolled, rc_timestamp);
|
2018-08-02 19:12:07 +00:00
|
|
|
CREATE INDEX rc_this_oldid ON recentchanges (rc_this_oldid);
|
2006-04-30 17:36:16 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE objectcache (
|
2007-09-24 20:10:00 +00:00
|
|
|
keyname TEXT UNIQUE,
|
2006-07-05 03:49:36 +00:00
|
|
|
value BYTEA NOT NULL DEFAULT '',
|
2006-06-29 01:44:12 +00:00
|
|
|
exptime TIMESTAMPTZ NOT NULL
|
2006-04-30 17:36:16 +00:00
|
|
|
);
|
2006-06-29 01:44:12 +00:00
|
|
|
CREATE INDEX objectcacache_exptime ON objectcache (exptime);
|
2006-04-30 17:36:16 +00:00
|
|
|
|
2006-07-05 03:49:36 +00:00
|
|
|
-- Tsearch2 2 stuff. Will fail if we don't have proper access to the tsearch2 tables
|
2008-02-19 01:06:06 +00:00
|
|
|
-- Make sure you also change patch-tsearch2funcs.sql if the funcs below change.
|
2006-07-05 03:49:36 +00:00
|
|
|
ALTER TABLE page ADD titlevector tsvector;
|
|
|
|
|
CREATE FUNCTION ts2_page_title() RETURNS TRIGGER LANGUAGE plpgsql AS
|
|
|
|
|
$mw$
|
|
|
|
|
BEGIN
|
|
|
|
|
IF TG_OP = 'INSERT' THEN
|
2011-02-03 04:06:11 +00:00
|
|
|
NEW.titlevector = to_tsvector(REPLACE(NEW.page_title,'/',' '));
|
2006-07-05 03:49:36 +00:00
|
|
|
ELSIF NEW.page_title != OLD.page_title THEN
|
2011-02-03 04:06:11 +00:00
|
|
|
NEW.titlevector := to_tsvector(REPLACE(NEW.page_title,'/',' '));
|
2006-07-05 03:49:36 +00:00
|
|
|
END IF;
|
|
|
|
|
RETURN NEW;
|
|
|
|
|
END;
|
|
|
|
|
$mw$;
|
|
|
|
|
|
|
|
|
|
CREATE TRIGGER ts2_page_title BEFORE INSERT OR UPDATE ON page
|
2006-07-22 17:30:39 +00:00
|
|
|
FOR EACH ROW EXECUTE PROCEDURE ts2_page_title();
|
2006-05-25 00:44:55 +00:00
|
|
|
|
2006-04-30 17:36:16 +00:00
|
|
|
|
2020-12-23 03:59:12 +00:00
|
|
|
ALTER TABLE text ADD textvector tsvector;
|
2006-07-05 03:49:36 +00:00
|
|
|
CREATE FUNCTION ts2_page_text() RETURNS TRIGGER LANGUAGE plpgsql AS
|
|
|
|
|
$mw$
|
|
|
|
|
BEGIN
|
|
|
|
|
IF TG_OP = 'INSERT' THEN
|
2011-02-03 04:06:11 +00:00
|
|
|
NEW.textvector = to_tsvector(NEW.old_text);
|
2006-07-05 03:49:36 +00:00
|
|
|
ELSIF NEW.old_text != OLD.old_text THEN
|
2011-02-03 04:06:11 +00:00
|
|
|
NEW.textvector := to_tsvector(NEW.old_text);
|
2006-07-05 03:49:36 +00:00
|
|
|
END IF;
|
|
|
|
|
RETURN NEW;
|
|
|
|
|
END;
|
|
|
|
|
$mw$;
|
|
|
|
|
|
2020-12-23 03:59:12 +00:00
|
|
|
CREATE TRIGGER ts2_page_text BEFORE INSERT OR UPDATE ON text
|
2006-07-22 17:30:39 +00:00
|
|
|
FOR EACH ROW EXECUTE PROCEDURE ts2_page_text();
|
2006-06-29 01:44:12 +00:00
|
|
|
|
2008-02-10 15:38:48 +00:00
|
|
|
CREATE INDEX ts2_page_title ON page USING gin(titlevector);
|
2020-12-23 03:59:12 +00:00
|
|
|
CREATE INDEX ts2_page_text ON text USING gin(textvector);
|