CREATE TABLE IF NOT EXISTS actors ( id SERIAL PRIMARY KEY, document JSONB, identifiedat TIMESTAMP with time zone DEFAULT now(), instance VARCHAR(1000) NOT NULL, bot BOOLEAN DEFAULT FALSE ); CREATE TABLE IF NOT EXISTS activities ( id SERIAL PRIMARY KEY, document JSONB, normalized TEXT, identifiedat TIMESTAMP with time zone DEFAULT now(), instance VARCHAR(1000) NOT NULL, hashtags VARCHAR(140)[], bot BOOLEAN DEFAULT FALSE ); CREATE TABLE IF NOT EXISTS instances ( endpoint VARCHAR(2083) NOT NULL PRIMARY KEY UNIQUE, state VARCHAR(16), username VARCHAR(32), password VARCHAR(32), software VARCHAR(50), banned BOOLEAN DEFAULT FALSE, alwaysbot BOOLEAN DEFAULT FALSE ); -- Autostart mastodon.social INSERT INTO instances (endpoint) VALUES('mastodon.social'); -- Banned Instances INSERT INTO instances (endpoint, banned) VALUES ('switter.at', true), ('xxxtumblr.org', true), ('sinblr.com', true), ('twitiverse.com', true), ('my.dirtyhobby.xyz', true), ('bae.st', true); -- Alwaysbot instances INSERT INTO instances (endpoint, alwaysbot) VALUES ('mstdn.foxfam.club', true), ('botsin.space', true), ('newsbots.eu', true); ALTER TABLE activities ADD normalized_tsvector tsvector GENERATED ALWAYS AS (to_tsvector('english', normalized)) STORED; CREATE UNIQUE INDEX IF NOT EXISTS actors_uri_idx ON actors ( (document->>'id') ); CREATE UNIQUE INDEX IF NOT EXISTS activities_uri_idx ON activities ( (document->>'id') ); CREATE INDEX IF NOT EXISTS activities_published_idx ON activities ( (document->>'published') ); CREATE INDEX IF NOT EXISTS activities_identifiedat_idx ON activities (identifiedat); CREATE INDEX IF NOT EXISTS hashtags_idx ON activities(hashtags); CREATE INDEX IF NOT EXISTS normalized_idx ON activities USING gin(normalized_tsvector); CREATE INDEX IF NOT EXISTS actors_id_idx ON actors (id); CREATE INDEX IF NOT EXISTS activities_id_idx ON activities (id); CREATE TABLE IF NOT EXISTS stopwords ( word VARCHAR(20) ); INSERT INTO stopwords (word) VALUES ('a'), ('able'), ('about'), ('above'), ('abst'), ('accordance'), ('according'), ('accordingly'), ('across'), ('act'), ('actually'), ('added'), ('adj'), ('affected'), ('affecting'), ('affects'), ('after'), ('afterwards'), ('again'), ('against'), ('ah'), ('all'), ('almost'), ('alone'), ('along'), ('already'), ('also'), ('although'), ('always'), ('am'), ('among'), ('amongst'), ('an'), ('and'), ('announce'), ('another'), ('any'), ('anybody'), ('anyhow'), ('anymore'), ('anyone'), ('anything'), ('anyway'), ('anyways'), ('anywhere'), ('apparently'), ('approximately'), ('are'), ('aren'), ('arent'), ('arise'), ('around'), ('as'), ('aside'), ('ask'), ('asking'), ('at'), ('auth'), ('available'), ('away'), ('awfully'), ('b'), ('back'), ('be'), ('became'), ('because'), ('become'), ('becomes'), ('becoming'), ('been'), ('before'), ('beforehand'), ('begin'), ('beginning'), ('beginnings'), ('begins'), ('behind'), ('being'), ('believe'), ('below'), ('beside'), ('besides'), ('between'), ('beyond'), ('biol'), ('both'), ('brief'), ('briefly'), ('but'), ('by'), ('c'), ('ca'), ('came'), ('can'), ('cannot'), ('can''t'), ('cause'), ('causes'), ('certain'), ('certainly'), ('co'), ('com'), ('come'), ('comes'), ('contain'), ('containing'), ('contains'), ('could'), ('couldnt'), ('d'), ('date'), ('did'), ('didn''t'), ('different'), ('do'), ('does'), ('doesn''t'), ('doing'), ('done'), ('don''t'), ('down'), ('downwards'), ('due'), ('during'), ('e'), ('each'), ('ed'), ('edu'), ('effect'), ('eg'), ('eight'), ('eighty'), ('either'), ('else'), ('elsewhere'), ('end'), ('ending'), ('enough'), ('especially'), ('et'), ('et-al'), ('etc'), ('even'), ('ever'), ('every'), ('everybody'), ('everyone'), ('everything'), ('everywhere'), ('ex'), ('except'), ('f'), ('far'), ('few'), ('ff'), ('fifth'), ('first'), ('five'), ('fix'), ('followed'), ('following'), ('follows'), ('for'), ('former'), ('formerly'), ('forth'), ('found'), ('four'), ('from'), ('further'), ('furthermore'), ('g'), ('gave'), ('get'), ('gets'), ('getting'), ('give'), ('given'), ('gives'), ('giving'), ('go'), ('goes'), ('gone'), ('got'), ('gotten'), ('h'), ('had'), ('happens'), ('hardly'), ('has'), ('hasn''t'), ('have'), ('haven''t'), ('having'), ('he'), ('hed'), ('hence'), ('her'), ('here'), ('hereafter'), ('hereby'), ('herein'), ('heres'), ('hereupon'), ('hers'), ('herself'), ('hes'), ('hi'), ('hid'), ('him'), ('himself'), ('his'), ('hither'), ('home'), ('how'), ('howbeit'), ('however'), ('hundred'), ('i'), ('id'), ('ie'), ('if'), ('i''ll'), ('im'), ('immediate'), ('immediately'), ('importance'), ('important'), ('in'), ('inc'), ('indeed'), ('index'), ('information'), ('instead'), ('into'), ('invention'), ('inward'), ('is'), ('isn''t'), ('it'), ('itd'), ('it''ll'), ('its'), ('itself'), ('i''ve'), ('j'), ('just'), ('k'), ('keep keeps'), ('kept'), ('kg'), ('km'), ('know'), ('known'), ('knows'), ('l'), ('largely'), ('last'), ('lately'), ('later'), ('latter'), ('latterly'), ('least'), ('less'), ('lest'), ('let'), ('lets'), ('like'), ('liked'), ('likely'), ('line'), ('little'), ('''ll'), ('look'), ('looking'), ('looks'), ('ltd'), ('m'), ('made'), ('mainly'), ('make'), ('makes'), ('many'), ('may'), ('maybe'), ('me'), ('mean'), ('means'), ('meantime'), ('meanwhile'), ('merely'), ('mg'), ('might'), ('million'), ('miss'), ('ml'), ('more'), ('moreover'), ('most'), ('mostly'), ('mr'), ('mrs'), ('much'), ('mug'), ('must'), ('my'), ('myself'), ('n'), ('na'), ('name'), ('namely'), ('nay'), ('nd'), ('near'), ('nearly'), ('necessarily'), ('necessary'), ('need'), ('needs'), ('neither'), ('never'), ('nevertheless'), ('new'), ('next'), ('nine'), ('ninety'), ('no'), ('nobody'), ('non'), ('none'), ('nonetheless'), ('noone'), ('nor'), ('normally'), ('nos'), ('not'), ('noted'), ('nothing'), ('now'), ('nowhere'), ('o'), ('obtain'), ('obtained'), ('obviously'), ('of'), ('off'), ('often'), ('oh'), ('ok'), ('okay'), ('old'), ('omitted'), ('on'), ('once'), ('one'), ('ones'), ('only'), ('onto'), ('or'), ('ord'), ('other'), ('others'), ('otherwise'), ('ought'), ('our'), ('ours'), ('ourselves'), ('out'), ('outside'), ('over'), ('overall'), ('owing'), ('own'), ('p'), ('page'), ('pages'), ('part'), ('particular'), ('particularly'), ('past'), ('per'), ('perhaps'), ('placed'), ('please'), ('plus'), ('poorly'), ('possible'), ('possibly'), ('potentially'), ('pp'), ('predominantly'), ('present'), ('previously'), ('primarily'), ('probably'), ('promptly'), ('proud'), ('provides'), ('put'), ('q'), ('que'), ('quickly'), ('quite'), ('qv'), ('r'), ('ran'), ('rather'), ('rd'), ('re'), ('readily'), ('really'), ('recent'), ('recently'), ('ref'), ('refs'), ('regarding'), ('regardless'), ('regards'), ('related'), ('relatively'), ('research'), ('respectively'), ('resulted'), ('resulting'), ('results'), ('right'), ('run'), ('s'), ('said'), ('same'), ('saw'), ('say'), ('saying'), ('says'), ('sec'), ('section'), ('see'), ('seeing'), ('seem'), ('seemed'), ('seeming'), ('seems'), ('seen'), ('self'), ('selves'), ('sent'), ('seven'), ('several'), ('shall'), ('she'), ('shed'), ('she''ll'), ('shes'), ('should'), ('shouldn''t'), ('show'), ('showed'), ('shown'), ('showns'), ('shows'), ('significant'), ('significantly'), ('similar'), ('similarly'), ('since'), ('six'), ('slightly'), ('so'), ('some'), ('somebody'), ('somehow'), ('someone'), ('somethan'), ('something'), ('sometime'), ('sometimes'), ('somewhat'), ('somewhere'), ('soon'), ('sorry'), ('specifically'), ('specified'), ('specify'), ('specifying'), ('still'), ('stop'), ('strongly'), ('sub'), ('substantially'), ('successfully'), ('such'), ('sufficiently'), ('suggest'), ('sup'), ('sure t'), ('take'), ('taken'), ('taking'), ('tell'), ('tends'), ('th'), ('than'), ('thank'), ('thanks'), ('thanx'), ('that'), ('that''ll'), ('thats'), ('that''ve'), ('the'), ('their'), ('theirs'), ('them'), ('themselves'), ('then'), ('thence'), ('there'), ('thereafter'), ('thereby'), ('thered'), ('therefore'), ('therein'), ('there''ll'), ('thereof'), ('therere'), ('theres'), ('thereto'), ('thereupon'), ('there''ve'), ('these'), ('they'), ('theyd'), ('they''ll'), ('theyre'), ('they''ve'), ('think'), ('this'), ('those'), ('thou'), ('though'), ('thoughh'), ('thousand'), ('throug'), ('through'), ('throughout'), ('thru'), ('thus'), ('til'), ('tip'), ('to'), ('together'), ('too'), ('took'), ('toward'), ('towards'), ('tried'), ('tries'), ('truly'), ('try'), ('trying'), ('ts'), ('twice'), ('two'), ('u'), ('un'), ('under'), ('unfortunately'), ('unless'), ('unlike'), ('unlikely'), ('until'), ('unto'), ('up'), ('upon'), ('ups'), ('us'), ('use'), ('used'), ('useful'), ('usefully'), ('usefulness'), ('uses'), ('using'), ('usually'), ('v'), ('value'), ('various'), ('''ve'), ('very'), ('via'), ('viz'), ('vol'), ('vols'), ('vs'), ('w'), ('want'), ('wants'), ('was'), ('wasnt'), ('way'), ('we'), ('wed'), ('welcome'), ('we''ll'), ('went'), ('were'), ('werent'), ('we''ve'), ('what'), ('whatever'), ('what''ll'), ('whats'), ('when'), ('whence'), ('whenever'), ('where'), ('whereafter'), ('whereas'), ('whereby'), ('wherein'), ('wheres'), ('whereupon'), ('wherever'), ('whether'), ('which'), ('while'), ('whim'), ('whither'), ('who'), ('whod'), ('whoever'), ('whole'), ('who''ll'), ('whom'), ('whomever'), ('whos'), ('whose'), ('why'), ('widely'), ('willing'), ('wish'), ('with'), ('within'), ('without'), ('wont'), ('words'), ('world'), ('would'), ('wouldnt'), ('www'), ('x'), ('y'), ('yes'), ('yet'), ('you'), ('youd'), ('you''ll'), ('your'), ('youre'), ('yours'), ('yourself'), ('yourselves'), ('you''ve'), ('z'), ('zero');