aboutsummaryrefslogtreecommitdiff
path: root/src/main/resources/db/migration
diff options
context:
space:
mode:
authorGravatar Vitaly Takmazov2023-01-27 17:50:14 +0300
committerGravatar Vitaly Takmazov2023-01-27 19:05:25 +0300
commit2db415ce42fb96059b6d7fce4cf4ce078a62680e (patch)
tree06d21a8483e437ad4d62f337b70e7e93dba18cc6 /src/main/resources/db/migration
parentb3a169844b43d64aba4c1f7c583073b5dc54cf49 (diff)
baseline non-production databases to 1.36
Diffstat (limited to 'src/main/resources/db/migration')
-rw-r--r--src/main/resources/db/migration/V1.22__schema.sql1338
-rw-r--r--src/main/resources/db/migration/V1.24__fix_lastmessage.sql1
-rw-r--r--src/main/resources/db/migration/V1.25__update_tokens_size.sql3
-rw-r--r--src/main/resources/db/migration/V1.26__case_insensitive_nick.sql1
-rw-r--r--src/main/resources/db/migration/V1.27__followers_unique.sql4
-rw-r--r--src/main/resources/db/migration/V1.35__case_insensitive_email_jid.sql2
-rw-r--r--src/main/resources/db/migration/V1.36__web_tokens.sql1
7 files changed, 1350 insertions, 0 deletions
diff --git a/src/main/resources/db/migration/V1.22__schema.sql b/src/main/resources/db/migration/V1.22__schema.sql
new file mode 100644
index 00000000..aab050a6
--- /dev/null
+++ b/src/main/resources/db/migration/V1.22__schema.sql
@@ -0,0 +1,1338 @@
+--
+-- PostgreSQL database dump
+--
+
+-- Dumped from database version 15.1 (Debian 15.1-1.pgdg110+1)
+-- Dumped by pg_dump version 15.1 (Debian 15.1-1.pgdg110+1)
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET idle_in_transaction_session_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SELECT pg_catalog.set_config('search_path', 'public', false);
+SET check_function_bodies = false;
+SET xmloption = content;
+SET client_min_messages = warning;
+SET row_security = off;
+
+--
+-- Name: case_insensitive; Type: COLLATION; Schema: public; Owner: juick
+--
+
+CREATE COLLATION public.case_insensitive (provider = icu, deterministic = false, locale = 'und-u-ks-level2');
+
+
+ALTER COLLATION public.case_insensitive OWNER TO juick;
+
+--
+-- Name: pgcrypto; Type: EXTENSION; Schema: -; Owner: -
+--
+
+CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA public;
+
+
+--
+-- Name: EXTENSION pgcrypto; Type: COMMENT; Schema: -; Owner:
+--
+
+COMMENT ON EXTENSION pgcrypto IS 'cryptographic functions';
+
+
+--
+-- Name: auth_protocol; Type: TYPE; Schema: public; Owner: juick
+--
+
+CREATE TYPE public.auth_protocol AS ENUM (
+ 'xmpp',
+ 'email',
+ 'sms'
+);
+
+
+ALTER TYPE public.auth_protocol OWNER TO juick;
+
+--
+-- Name: messages_attach; Type: TYPE; Schema: public; Owner: juick
+--
+
+CREATE TYPE public.messages_attach AS ENUM (
+ 'jpg',
+ 'mp4',
+ 'png'
+);
+
+
+ALTER TYPE public.messages_attach OWNER TO juick;
+
+--
+-- Name: messages_lang; Type: TYPE; Schema: public; Owner: juick
+--
+
+CREATE TYPE public.messages_lang AS ENUM (
+ 'en',
+ 'ru',
+ 'fr',
+ 'fa',
+ '__'
+);
+
+
+ALTER TYPE public.messages_lang OWNER TO juick;
+
+--
+-- Name: users_lang; Type: TYPE; Schema: public; Owner: juick
+--
+
+CREATE TYPE public.users_lang AS ENUM (
+ 'en',
+ 'ru',
+ 'fr',
+ 'fa',
+ '__'
+);
+
+
+ALTER TYPE public.users_lang OWNER TO juick;
+
+--
+-- Name: CAST (character varying AS public.messages_attach); Type: CAST; Schema: -; Owner: -
+--
+
+CREATE CAST (character varying AS public.messages_attach) WITH INOUT AS ASSIGNMENT;
+
+
+SET default_tablespace = '';
+
+SET default_table_access_method = heap;
+
+--
+-- Name: android; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.android (
+ user_id bigint NOT NULL,
+ regid character varying(255) NOT NULL,
+ ts timestamp with time zone DEFAULT now() NOT NULL
+);
+
+
+ALTER TABLE public.android OWNER TO juick;
+
+--
+-- Name: auth; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.auth (
+ user_id bigint,
+ protocol public.auth_protocol NOT NULL,
+ account character varying(128) NOT NULL,
+ authcode character varying(8) NOT NULL,
+ ts timestamp(6) without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
+);
+
+
+ALTER TABLE public.auth OWNER TO juick;
+
+--
+-- Name: bl_tags; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.bl_tags (
+ user_id bigint NOT NULL,
+ tag_id bigint NOT NULL
+);
+
+
+ALTER TABLE public.bl_tags OWNER TO juick;
+
+--
+-- Name: bl_users; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.bl_users (
+ user_id bigint NOT NULL,
+ bl_user_id bigint NOT NULL,
+ ts timestamp with time zone DEFAULT now() NOT NULL
+);
+
+
+ALTER TABLE public.bl_users OWNER TO juick;
+
+--
+-- Name: emails; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.emails (
+ user_id bigint NOT NULL,
+ email character varying(128) NOT NULL,
+ subscr_hour smallint
+);
+
+
+ALTER TABLE public.emails OWNER TO juick;
+
+--
+-- Name: facebook; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.facebook (
+ user_id bigint,
+ fb_id numeric,
+ loginhash character varying(36),
+ access_token character varying(255),
+ ts timestamp with time zone DEFAULT now() NOT NULL,
+ fb_name character varying(64),
+ fb_link character varying(255) NOT NULL,
+ crosspost boolean DEFAULT true NOT NULL
+);
+
+
+ALTER TABLE public.facebook OWNER TO juick;
+
+--
+-- Name: favorites; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.favorites (
+ user_id bigint NOT NULL,
+ message_id bigint NOT NULL,
+ ts timestamp with time zone,
+ like_id smallint DEFAULT 1 NOT NULL,
+ user_uri character varying(255) NOT NULL DEFAULT ''::character varying
+);
+
+
+ALTER TABLE public.favorites OWNER TO juick;
+
+--
+-- Name: followers; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.followers (
+ user_id bigint,
+ ts timestamp with time zone DEFAULT now() NOT NULL,
+ acct character varying(64) NOT NULL
+);
+
+
+ALTER TABLE public.followers OWNER TO juick;
+
+--
+-- Name: images; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.images (
+ mid bigint NOT NULL,
+ rid bigint NOT NULL,
+ thumb bigint NOT NULL,
+ small bigint NOT NULL,
+ medium bigint NOT NULL,
+ height bigint NOT NULL,
+ width bigint NOT NULL
+);
+
+
+ALTER TABLE public.images OWNER TO juick;
+
+--
+-- Name: ios; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.ios (
+ user_id bigint NOT NULL,
+ token character varying(64) NOT NULL,
+ ts timestamp with time zone DEFAULT now() NOT NULL
+);
+
+
+ALTER TABLE public.ios OWNER TO juick;
+
+--
+-- Name: jids; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.jids (
+ user_id bigint,
+ jid character varying(64) NOT NULL,
+ active smallint DEFAULT 0 NOT NULL,
+ loginhash character varying(36),
+ ts timestamp with time zone DEFAULT now() NOT NULL
+);
+
+
+ALTER TABLE public.jids OWNER TO juick;
+
+--
+-- Name: logins; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.logins (
+ user_id bigint NOT NULL,
+ hash character varying(16) NOT NULL
+);
+
+
+ALTER TABLE public.logins OWNER TO juick;
+
+--
+-- Name: mail; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.mail (
+ user_id bigint NOT NULL,
+ hash character varying(16) NOT NULL,
+ ts timestamp(6) without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
+);
+
+
+ALTER TABLE public.mail OWNER TO juick;
+
+--
+-- Name: meon; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.meon (
+ id bigint NOT NULL,
+ user_id bigint NOT NULL,
+ link character varying(255) NOT NULL,
+ name character varying(32) NOT NULL,
+ ico smallint
+);
+
+
+ALTER TABLE public.meon OWNER TO juick;
+
+--
+-- Name: meon_id_seq; Type: SEQUENCE; Schema: public; Owner: juick
+--
+
+CREATE SEQUENCE public.meon_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+ALTER TABLE public.meon_id_seq OWNER TO juick;
+
+--
+-- Name: meon_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick
+--
+
+ALTER SEQUENCE public.meon_id_seq OWNED BY public.meon.id;
+
+
+--
+-- Name: messages; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.messages (
+ message_id bigint NOT NULL,
+ user_id bigint NOT NULL,
+ lang public.messages_lang DEFAULT '__'::public.messages_lang NOT NULL,
+ ts timestamp with time zone DEFAULT now() NOT NULL,
+ replies smallint DEFAULT (0)::smallint NOT NULL,
+ maxreplyid smallint DEFAULT (0)::smallint NOT NULL,
+ privacy smallint DEFAULT (1)::smallint NOT NULL,
+ readonly boolean DEFAULT false NOT NULL,
+ attach public.messages_attach,
+ place_id bigint,
+ lat numeric(10,7),
+ lon numeric(10,7),
+ popular smallint DEFAULT (0)::smallint NOT NULL,
+ hidden smallint DEFAULT (0)::smallint NOT NULL,
+ likes smallint DEFAULT (0)::smallint NOT NULL,
+ updated timestamp with time zone DEFAULT now() NOT NULL
+);
+
+
+ALTER TABLE public.messages OWNER TO juick;
+
+--
+-- Name: messages_access; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.messages_access (
+ message_id bigint NOT NULL,
+ user_id bigint NOT NULL
+);
+
+
+ALTER TABLE public.messages_access OWNER TO juick;
+
+--
+-- Name: messages_message_id_seq; Type: SEQUENCE; Schema: public; Owner: juick
+--
+
+CREATE SEQUENCE public.messages_message_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+ALTER TABLE public.messages_message_id_seq OWNER TO juick;
+
+--
+-- Name: messages_message_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick
+--
+
+ALTER SEQUENCE public.messages_message_id_seq OWNED BY public.messages.message_id;
+
+
+--
+-- Name: messages_properties; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.messages_properties (
+ message_id bigint NOT NULL,
+ reply_id smallint NOT NULL,
+ property_key character varying(255) NOT NULL,
+ property_value text NOT NULL
+);
+
+
+ALTER TABLE public.messages_properties OWNER TO juick;
+
+--
+-- Name: messages_tags; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.messages_tags (
+ message_id bigint NOT NULL,
+ tag_id bigint NOT NULL
+);
+
+
+ALTER TABLE public.messages_tags OWNER TO juick;
+
+--
+-- Name: messages_txt; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.messages_txt (
+ message_id bigint NOT NULL,
+ repliesby text,
+ txt text NOT NULL,
+ updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
+);
+
+
+ALTER TABLE public.messages_txt OWNER TO juick;
+
+CREATE INDEX messages_idx ON messages_txt USING GIN (to_tsvector('russian', txt));
+
+--
+-- Name: places; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.places (
+ place_id bigint NOT NULL,
+ lat numeric(10,7) NOT NULL,
+ lon numeric(10,7) NOT NULL,
+ name character varying(64) NOT NULL,
+ descr character varying(255),
+ url character varying(128),
+ user_id bigint NOT NULL,
+ ts timestamp with time zone DEFAULT now() NOT NULL
+);
+
+
+ALTER TABLE public.places OWNER TO juick;
+
+--
+-- Name: places_place_id_seq; Type: SEQUENCE; Schema: public; Owner: juick
+--
+
+CREATE SEQUENCE public.places_place_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+ALTER TABLE public.places_place_id_seq OWNER TO juick;
+
+--
+-- Name: places_place_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick
+--
+
+ALTER SEQUENCE public.places_place_id_seq OWNED BY public.places.place_id;
+
+
+--
+-- Name: places_tags; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.places_tags (
+ place_id bigint NOT NULL,
+ tag_id bigint NOT NULL
+);
+
+
+ALTER TABLE public.places_tags OWNER TO juick;
+
+--
+-- Name: pm; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.pm (
+ user_id bigint NOT NULL,
+ user_id_to bigint NOT NULL,
+ ts timestamp with time zone DEFAULT now() NOT NULL,
+ txt text NOT NULL
+);
+
+
+ALTER TABLE public.pm OWNER TO juick;
+
+--
+-- Name: pm_inroster; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.pm_inroster (
+ user_id bigint NOT NULL,
+ jid character varying(64) NOT NULL
+);
+
+
+ALTER TABLE public.pm_inroster OWNER TO juick;
+
+--
+-- Name: reactions; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.reactions (
+ like_id smallint NOT NULL,
+ description character varying(100) NOT NULL
+);
+
+
+ALTER TABLE public.reactions OWNER TO juick;
+
+--
+-- Name: replies; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.replies (
+ message_id bigint NOT NULL,
+ reply_id smallint NOT NULL,
+ user_id bigint NOT NULL,
+ replyto smallint DEFAULT (0)::smallint NOT NULL,
+ ts timestamp with time zone DEFAULT now() NOT NULL,
+ attach public.messages_attach,
+ txt text NOT NULL,
+ updated_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
+ user_uri character varying(255) DEFAULT NULL::character varying,
+ reply_uri character varying(255) DEFAULT NULL::character varying,
+ html smallint DEFAULT '0'::smallint NOT NULL
+);
+
+
+ALTER TABLE public.replies OWNER TO juick;
+
+--
+-- Name: sphinx; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.sphinx (
+ counter_id smallint NOT NULL,
+ max_id bigint NOT NULL
+);
+
+
+ALTER TABLE public.sphinx OWNER TO juick;
+
+--
+-- Name: subscr_messages; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.subscr_messages (
+ message_id bigint NOT NULL,
+ suser_id bigint NOT NULL,
+ last_read_rid smallint DEFAULT 0 NOT NULL
+);
+
+
+ALTER TABLE public.subscr_messages OWNER TO juick;
+
+--
+-- Name: subscr_tags; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.subscr_tags (
+ tag_id bigint NOT NULL,
+ suser_id bigint NOT NULL
+);
+
+
+ALTER TABLE public.subscr_tags OWNER TO juick;
+
+--
+-- Name: subscr_users; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.subscr_users (
+ user_id bigint NOT NULL,
+ suser_id bigint NOT NULL,
+ ts timestamp with time zone DEFAULT now() NOT NULL
+);
+
+
+ALTER TABLE public.subscr_users OWNER TO juick;
+
+--
+-- Name: tags; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.tags (
+ tag_id bigint NOT NULL,
+ synonym_id bigint,
+ name character varying(70) COLLATE public.case_insensitive,
+ top boolean DEFAULT false NOT NULL,
+ noindex boolean DEFAULT false NOT NULL,
+ stat_messages bigint DEFAULT (0)::bigint NOT NULL,
+ stat_users smallint DEFAULT (0)::smallint NOT NULL
+);
+
+
+ALTER TABLE public.tags OWNER TO juick;
+
+--
+-- Name: tags_ignore; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.tags_ignore (
+ tag_id bigint NOT NULL
+);
+
+
+ALTER TABLE public.tags_ignore OWNER TO juick;
+
+--
+-- Name: tags_synonyms; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.tags_synonyms (
+ name character varying(64) NOT NULL,
+ changeto character varying(64) NOT NULL
+);
+
+
+ALTER TABLE public.tags_synonyms OWNER TO juick;
+
+--
+-- Name: tags_tag_id_seq; Type: SEQUENCE; Schema: public; Owner: juick
+--
+
+CREATE SEQUENCE public.tags_tag_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+ALTER TABLE public.tags_tag_id_seq OWNER TO juick;
+
+--
+-- Name: tags_tag_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick
+--
+
+ALTER SEQUENCE public.tags_tag_id_seq OWNED BY public.tags.tag_id;
+
+
+--
+-- Name: telegram; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.telegram (
+ user_id bigint,
+ tg_id numeric NOT NULL,
+ tg_name character varying(64) NOT NULL,
+ ts timestamp with time zone DEFAULT now() NOT NULL,
+ loginhash character varying(36)
+);
+
+
+ALTER TABLE public.telegram OWNER TO juick;
+
+--
+-- Name: top_ignore_messages; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.top_ignore_messages (
+ message_id bigint NOT NULL
+);
+
+
+ALTER TABLE public.top_ignore_messages OWNER TO juick;
+
+--
+-- Name: top_ignore_tags; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.top_ignore_tags (
+ tag_id bigint NOT NULL
+);
+
+
+ALTER TABLE public.top_ignore_tags OWNER TO juick;
+
+--
+-- Name: top_ignore_users; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.top_ignore_users (
+ user_id bigint NOT NULL
+);
+
+
+ALTER TABLE public.top_ignore_users OWNER TO juick;
+
+--
+-- Name: twitter; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.twitter (
+ user_id bigint NOT NULL,
+ access_token character varying(64) NOT NULL,
+ access_token_secret character varying(64) NOT NULL,
+ uname character varying(64) NOT NULL,
+ ts timestamp with time zone DEFAULT now() NOT NULL,
+ crosspost boolean DEFAULT true NOT NULL
+);
+
+
+ALTER TABLE public.twitter OWNER TO juick;
+
+--
+-- Name: useroptions; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.useroptions (
+ user_id bigint NOT NULL,
+ jnotify smallint DEFAULT 1 NOT NULL,
+ subscr_active smallint DEFAULT 1 NOT NULL,
+ off_ts timestamp with time zone,
+ xmppxhtml smallint DEFAULT 0 NOT NULL,
+ subscr_notify smallint DEFAULT 1 NOT NULL,
+ recommendations smallint DEFAULT 1 NOT NULL,
+ privacy_view smallint DEFAULT 1 NOT NULL,
+ privacy_reply smallint DEFAULT 1 NOT NULL,
+ privacy_pm smallint DEFAULT 1 NOT NULL,
+ repliesview smallint DEFAULT 0 NOT NULL
+);
+
+
+ALTER TABLE public.useroptions OWNER TO juick;
+
+--
+-- Name: users; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.users (
+ id bigint NOT NULL,
+ nick character varying(64) NOT NULL,
+ passw character varying(32) NOT NULL,
+ lang public.users_lang DEFAULT '__'::public.users_lang NOT NULL,
+ banned smallint DEFAULT (0)::smallint NOT NULL,
+ lastmessage timestamp with time zone,
+ lastpm bigint DEFAULT (0)::bigint NOT NULL,
+ lastphoto bigint DEFAULT (0)::bigint NOT NULL,
+ karma smallint DEFAULT (0)::smallint NOT NULL,
+ last_seen timestamp with time zone
+);
+
+
+ALTER TABLE public.users OWNER TO juick;
+
+--
+-- Name: users_id_seq; Type: SEQUENCE; Schema: public; Owner: juick
+--
+
+CREATE SEQUENCE public.users_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+ALTER TABLE public.users_id_seq OWNER TO juick;
+
+--
+-- Name: users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick
+--
+
+ALTER SEQUENCE public.users_id_seq OWNED BY public.users.id;
+
+
+--
+-- Name: users_subscr; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.users_subscr (
+ user_id bigint NOT NULL,
+ cnt smallint DEFAULT (0)::smallint NOT NULL
+);
+
+
+ALTER TABLE public.users_subscr OWNER TO juick;
+
+--
+-- Name: usersinfo; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.usersinfo (
+ user_id bigint NOT NULL,
+ jid character varying(64),
+ fullname character varying(64),
+ country character varying(32),
+ url character varying(128),
+ gender character varying(32),
+ bday character varying(32),
+ descr text
+);
+
+
+ALTER TABLE public.usersinfo OWNER TO juick;
+
+--
+-- Name: version; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.version (
+ version numeric NOT NULL
+);
+
+
+ALTER TABLE public.version OWNER TO juick;
+
+--
+-- Name: vk; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.vk (
+ user_id bigint,
+ vk_id numeric NULL,
+ loginhash character varying(36),
+ access_token character varying(128) NOT NULL,
+ ts timestamp with time zone DEFAULT now() NOT NULL,
+ vk_name character varying(64) NOT NULL,
+ vk_link character varying(64) NOT NULL,
+ crosspost smallint DEFAULT (1)::smallint NOT NULL
+);
+
+
+ALTER TABLE public.vk OWNER TO juick;
+
+--
+-- Name: winphone; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.winphone (
+ user_id bigint NOT NULL,
+ url character varying(255) NOT NULL,
+ ts timestamp with time zone DEFAULT now() NOT NULL
+);
+
+
+ALTER TABLE public.winphone OWNER TO juick;
+
+--
+-- Name: wl_users; Type: TABLE; Schema: public; Owner: juick
+--
+
+CREATE TABLE public.wl_users (
+ user_id bigint NOT NULL,
+ wl_user_id bigint NOT NULL
+);
+
+
+ALTER TABLE public.wl_users OWNER TO juick;
+
+--
+-- Name: meon id; Type: DEFAULT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.meon ALTER COLUMN id SET DEFAULT nextval('public.meon_id_seq'::regclass);
+
+
+--
+-- Name: messages message_id; Type: DEFAULT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.messages ALTER COLUMN message_id SET DEFAULT nextval('public.messages_message_id_seq'::regclass);
+
+
+--
+-- Name: places place_id; Type: DEFAULT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.places ALTER COLUMN place_id SET DEFAULT nextval('public.places_place_id_seq'::regclass);
+
+
+--
+-- Name: tags tag_id; Type: DEFAULT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.tags ALTER COLUMN tag_id SET DEFAULT nextval('public.tags_tag_id_seq'::regclass);
+
+
+--
+-- Name: users id; Type: DEFAULT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.users ALTER COLUMN id SET DEFAULT nextval('public.users_id_seq'::regclass);
+
+
+--
+-- Name: images idx_20438_primary; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.images
+ ADD CONSTRAINT idx_20438_primary PRIMARY KEY (mid, rid);
+
+
+--
+-- Name: mail idx_20453_primary; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.mail
+ ADD CONSTRAINT idx_20453_primary PRIMARY KEY (user_id);
+
+
+--
+-- Name: meon idx_20458_primary; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.meon
+ ADD CONSTRAINT idx_20458_primary PRIMARY KEY (id);
+
+
+--
+-- Name: messages idx_20483_primary; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.messages
+ ADD CONSTRAINT idx_20483_primary PRIMARY KEY (message_id);
+
+
+--
+-- Name: messages_txt idx_20502_primary; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.messages_txt
+ ADD CONSTRAINT idx_20502_primary PRIMARY KEY (message_id);
+
+
+--
+-- Name: places idx_20514_primary; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.places
+ ADD CONSTRAINT idx_20514_primary PRIMARY KEY (place_id);
+
+
+--
+-- Name: sphinx idx_20571_primary; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.sphinx
+ ADD CONSTRAINT idx_20571_primary PRIMARY KEY (counter_id);
+
+
+--
+-- Name: tags idx_20586_primary; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.tags
+ ADD CONSTRAINT idx_20586_primary PRIMARY KEY (tag_id);
+
+
+--
+-- Name: top_ignore_tags idx_20616_primary; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.top_ignore_tags
+ ADD CONSTRAINT idx_20616_primary PRIMARY KEY (tag_id);
+
+
+--
+-- Name: top_ignore_users idx_20619_primary; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.top_ignore_users
+ ADD CONSTRAINT idx_20619_primary PRIMARY KEY (user_id);
+
+
+--
+-- Name: twitter idx_20622_primary; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.twitter
+ ADD CONSTRAINT idx_20622_primary PRIMARY KEY (user_id);
+
+
+--
+-- Name: useroptions idx_20627_primary; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.useroptions
+ ADD CONSTRAINT idx_20627_primary PRIMARY KEY (user_id);
+
+
+--
+-- Name: users idx_20653_primary; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.users
+ ADD CONSTRAINT idx_20653_primary PRIMARY KEY (id);
+
+
+--
+-- Name: usersinfo idx_20663_primary; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.usersinfo
+ ADD CONSTRAINT idx_20663_primary PRIMARY KEY (user_id);
+
+
+--
+-- Name: users_subscr idx_20672_primary; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.users_subscr
+ ADD CONSTRAINT idx_20672_primary PRIMARY KEY (user_id);
+
+
+--
+-- Name: wl_users idx_20694_primary; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.wl_users
+ ADD CONSTRAINT idx_20694_primary PRIMARY KEY (user_id, wl_user_id);
+
+
+--
+-- Name: bl_users idx_29418_primary; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.bl_users
+ ADD CONSTRAINT idx_29418_primary PRIMARY KEY (user_id, bl_user_id);
+
+
+--
+-- Name: messages_properties message_properties_key; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.messages_properties
+ ADD CONSTRAINT message_properties_key UNIQUE (message_id, reply_id, property_key);
+
+
+--
+-- Name: reactions reactions_pkey; Type: CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.reactions
+ ADD CONSTRAINT reactions_pkey PRIMARY KEY (like_id);
+
+
+--
+-- Name: idx_20390_regid; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE UNIQUE INDEX idx_20390_regid ON public.android USING btree (regid);
+
+
+--
+-- Name: idx_20390_user_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20390_user_id ON public.android USING btree (user_id);
+
+
+--
+-- Name: idx_20404_tag_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20404_tag_id ON public.bl_tags USING btree (tag_id);
+
+
+--
+-- Name: idx_20404_user_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20404_user_id ON public.bl_tags USING btree (user_id);
+
+
+--
+-- Name: idx_20418_email; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20418_email ON public.emails USING btree (email);
+
+
+--
+-- Name: idx_20421_user_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20421_user_id ON public.facebook USING btree (user_id);
+
+
+--
+-- Name: idx_20441_token; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE UNIQUE INDEX idx_20441_token ON public.ios USING btree (token);
+
+
+--
+-- Name: idx_20441_user_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20441_user_id ON public.ios USING btree (user_id);
+
+
+--
+-- Name: idx_20445_jid; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE UNIQUE INDEX idx_20445_jid ON public.jids USING btree (jid);
+
+
+--
+-- Name: idx_20445_user_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20445_user_id ON public.jids USING btree (user_id);
+
+
+--
+-- Name: idx_20450_user_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE UNIQUE INDEX idx_20450_user_id ON public.logins USING btree (user_id);
+
+
+--
+-- Name: idx_20483_attach; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20483_attach ON public.messages USING btree (attach);
+
+
+--
+-- Name: idx_20483_hidden; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20483_hidden ON public.messages USING btree (hidden);
+
+
+--
+-- Name: idx_20483_place_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20483_place_id ON public.messages USING btree (place_id);
+
+
+--
+-- Name: idx_20483_popular; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20483_popular ON public.messages USING btree (popular);
+
+
+--
+-- Name: idx_20483_ts; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20483_ts ON public.messages USING btree (ts);
+
+
+--
+-- Name: idx_20483_user_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20483_user_id ON public.messages USING btree (user_id);
+
+
+--
+-- Name: idx_20496_message_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20496_message_id ON public.messages_access USING btree (message_id);
+
+
+--
+-- Name: idx_20499_message_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20499_message_id ON public.messages_tags USING btree (message_id);
+
+
+--
+-- Name: idx_20499_message_id_2; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE UNIQUE INDEX idx_20499_message_id_2 ON public.messages_tags USING btree (message_id, tag_id);
+
+
+--
+-- Name: idx_20499_tag_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20499_tag_id ON public.messages_tags USING btree (tag_id);
+
+
+--
+-- Name: idx_20529_user_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20529_user_id ON public.pm_inroster USING btree (user_id);
+
+
+--
+-- Name: idx_20529_user_id_2; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE UNIQUE INDEX idx_20529_user_id_2 ON public.pm_inroster USING btree (user_id, jid);
+
+
+--
+-- Name: idx_20563_message_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20563_message_id ON public.replies USING btree (message_id);
+
+
+--
+-- Name: idx_20563_ts; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20563_ts ON public.replies USING btree (ts);
+
+
+--
+-- Name: idx_20563_user_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20563_user_id ON public.replies USING btree (user_id);
+
+
+--
+-- Name: idx_20574_message_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE UNIQUE INDEX idx_20574_message_id ON public.subscr_messages USING btree (message_id, suser_id);
+
+
+--
+-- Name: idx_20577_tag_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE UNIQUE INDEX idx_20577_tag_id ON public.subscr_tags USING btree (tag_id, suser_id);
+
+
+--
+-- Name: idx_20580_suser_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20580_suser_id ON public.subscr_users USING btree (suser_id);
+
+
+--
+-- Name: idx_20580_user_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE UNIQUE INDEX idx_20580_user_id ON public.subscr_users USING btree (user_id, suser_id);
+
+
+--
+-- Name: idx_20586_synonym_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20586_synonym_id ON public.tags USING btree (synonym_id);
+
+
+--
+-- Name: idx_20627_recommendations; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20627_recommendations ON public.useroptions USING btree (recommendations);
+
+
+--
+-- Name: idx_20653_nick; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE UNIQUE INDEX idx_20653_nick ON public.users USING btree (nick);
+
+
+--
+-- Name: idx_20682_user_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20682_user_id ON public.vk USING btree (user_id);
+
+
+--
+-- Name: idx_20690_url; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE UNIQUE INDEX idx_20690_url ON public.winphone USING btree (url);
+
+
+--
+-- Name: idx_20690_user_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_20690_user_id ON public.winphone USING btree (user_id);
+
+
+--
+-- Name: idx_29422_message_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_29422_message_id ON public.favorites USING btree (message_id);
+
+
+--
+-- Name: idx_29422_user_id; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX idx_29422_user_id ON public.favorites USING btree (user_id);
+
+
+--
+-- Name: reply_uri_index; Type: INDEX; Schema: public; Owner: juick
+--
+
+CREATE INDEX reply_uri_index ON public.replies USING btree (reply_uri);
+
+
+--
+-- Name: favorites favorites_like_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.favorites
+ ADD CONSTRAINT favorites_like_id_fkey FOREIGN KEY (like_id) REFERENCES public.reactions(like_id);
+
+
+--
+-- Name: followers followers_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: juick
+--
+
+ALTER TABLE ONLY public.followers
+ ADD CONSTRAINT followers_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id);
+
+
+--
+-- PostgreSQL database dump complete
+--
+
diff --git a/src/main/resources/db/migration/V1.24__fix_lastmessage.sql b/src/main/resources/db/migration/V1.24__fix_lastmessage.sql
new file mode 100644
index 00000000..ba3eee8c
--- /dev/null
+++ b/src/main/resources/db/migration/V1.24__fix_lastmessage.sql
@@ -0,0 +1 @@
+ALTER TABLE users ALTER COLUMN lastmessage TYPE timestamp with time zone \ No newline at end of file
diff --git a/src/main/resources/db/migration/V1.25__update_tokens_size.sql b/src/main/resources/db/migration/V1.25__update_tokens_size.sql
new file mode 100644
index 00000000..a1c7bbac
--- /dev/null
+++ b/src/main/resources/db/migration/V1.25__update_tokens_size.sql
@@ -0,0 +1,3 @@
+ALTER TABLE vk ALTER COLUMN access_token TYPE character varying(255);
+ALTER TABLE twitter ALTER COLUMN access_token TYPE character varying(255);
+ALTER TABLE facebook ALTER COLUMN access_token TYPE character varying(255); \ No newline at end of file
diff --git a/src/main/resources/db/migration/V1.26__case_insensitive_nick.sql b/src/main/resources/db/migration/V1.26__case_insensitive_nick.sql
new file mode 100644
index 00000000..a68c15f3
--- /dev/null
+++ b/src/main/resources/db/migration/V1.26__case_insensitive_nick.sql
@@ -0,0 +1 @@
+ALTER TABLE users ALTER COLUMN nick TYPE character varying(64) COLLATE case_insensitive
diff --git a/src/main/resources/db/migration/V1.27__followers_unique.sql b/src/main/resources/db/migration/V1.27__followers_unique.sql
new file mode 100644
index 00000000..5a15d9ae
--- /dev/null
+++ b/src/main/resources/db/migration/V1.27__followers_unique.sql
@@ -0,0 +1,4 @@
+DELETE
+FROM followers A USING followers B
+WHERE A.user_id=B.user_id AND A.ts<=B.ts AND A.acct=B.acct AND A.ctid<B.ctid;
+ALTER TABLE followers ADD UNIQUE (user_id, acct) \ No newline at end of file
diff --git a/src/main/resources/db/migration/V1.35__case_insensitive_email_jid.sql b/src/main/resources/db/migration/V1.35__case_insensitive_email_jid.sql
new file mode 100644
index 00000000..93a987b8
--- /dev/null
+++ b/src/main/resources/db/migration/V1.35__case_insensitive_email_jid.sql
@@ -0,0 +1,2 @@
+ALTER TABLE jids ALTER COLUMN jid TYPE character varying(255) COLLATE case_insensitive;
+ALTER TABLE emails ALTER COLUMN email TYPE character varying(255) COLLATE case_insensitive
diff --git a/src/main/resources/db/migration/V1.36__web_tokens.sql b/src/main/resources/db/migration/V1.36__web_tokens.sql
new file mode 100644
index 00000000..ccdefad2
--- /dev/null
+++ b/src/main/resources/db/migration/V1.36__web_tokens.sql
@@ -0,0 +1 @@
+ALTER TABLE user_services ALTER COLUMN regid TYPE character varying(1024)