[db] fixes for context_node_ngrams_view materialized view

Unique index is necessary when one wants to refresh the view
concurrently.
parent 494b3e64
...@@ -79,7 +79,7 @@ main = do ...@@ -79,7 +79,7 @@ main = do
refreshIndex :: Cmd'' DevEnv IOException () refreshIndex :: Cmd'' DevEnv IOException ()
refreshIndex = do refreshIndex = do
_ <- execPGSQuery [sql| REFRESH MATERIALIZED VIEW context_node_ngrams_view; |] () _ <- execPGSQuery [sql| REFRESH MATERIALIZED VIEW CONCURRENTLY context_node_ngrams_view; |] ()
pure () pure ()
addIndex :: Cmd'' DevEnv IOException Int64 addIndex :: Cmd'' DevEnv IOException Int64
...@@ -87,15 +87,24 @@ addIndex = do ...@@ -87,15 +87,24 @@ addIndex = do
execPGSQuery query () execPGSQuery query ()
where where
query = [sql| query = [sql|
create materialized view if not exists context_node_ngrams_view as CREATE MATERIALIZED VIEW IF NOT EXISTS context_node_ngrams_view AS
select context_node_ngrams.context_id, ngrams_id, nodes_contexts.node_id SELECT DISTINCT context_node_ngrams.context_id, ngrams_id, nodes_contexts.node_id
from nodes_contexts FROM nodes_contexts
join context_node_ngrams JOIN context_node_ngrams
on context_node_ngrams.context_id = nodes_contexts.context_id; ON context_node_ngrams.context_id = nodes_contexts.context_id;
create index if not exists context_node_ngrams_context_id_ngrams_id_idx on context_node_ngrams(context_id, ngrams_id); CREATE INDEX IF NOT EXISTS context_node_ngrams_context_id_ngrams_id_idx
create index if not exists context_node_ngrams_view_context_id_idx on context_node_ngrams_view(context_id); ON context_node_ngrams(context_id, ngrams_id);
create index if not exists context_node_ngrams_view_ngrams_id_idx on context_node_ngrams_view(ngrams_id);
create index if not exists context_node_ngrams_view_node_id_idx on context_node_ngrams_view(node_id); CREATE INDEX IF NOT EXISTS context_node_ngrams_view_context_id_idx
create index if not exists node_stories_ngrams_id_idx on node_stories(ngrams_id); ON context_node_ngrams_view(context_id);
CREATE INDEX IF NOT EXISTS context_node_ngrams_view_ngrams_id_idx
ON context_node_ngrams_view(ngrams_id);
CREATE INDEX IF NOT EXISTS context_node_ngrams_view_node_id_idx
ON context_node_ngrams_view(node_id);
CREATE UNIQUE INDEX IF NOT EXISTS context_node_ngrams_view_context_ngrams_node_uniq_idx
ON context_node_ngrams_view (context_id, ngrams_id, node_id);
CREATE INDEX IF NOT EXISTS node_stories_ngrams_id_idx
ON node_stories(ngrams_id);
|] |]
...@@ -337,14 +337,23 @@ CREATE OR REPLACE function node_pos(int, int) returns bigint ...@@ -337,14 +337,23 @@ CREATE OR REPLACE function node_pos(int, int) returns bigint
--create index node_by_pos on nodes using btree(node_pos(id,typename)); --create index node_by_pos on nodes using btree(node_pos(id,typename));
-- Optimization for Ngrams Table View -- Optimization for Ngrams Table View
create materialized view if not exists context_node_ngrams_view as CREATE MATERIALIZED VIEW IF NOT EXISTS context_node_ngrams_view AS
select context_node_ngrams.context_id, ngrams_id, nodes_contexts.node_id SELECT DISTINCT context_node_ngrams.context_id, ngrams_id, nodes_contexts.node_id
from nodes_contexts FROM nodes_contexts
join context_node_ngrams JOIN context_node_ngrams
on context_node_ngrams.context_id = nodes_contexts.context_id; ON context_node_ngrams.context_id = nodes_contexts.context_id;
create index if not exists context_node_ngrams_context_id_ngrams_id_idx on context_node_ngrams(context_id, ngrams_id); CREATE INDEX IF NOT EXISTS context_node_ngrams_context_id_ngrams_id_idx
create index if not exists context_node_ngrams_view_context_id_idx on context_node_ngrams_view(context_id); ON context_node_ngrams(context_id, ngrams_id);
create index if not exists context_node_ngrams_view_ngrams_id_idx on context_node_ngrams_view(ngrams_id);
create index if not exists context_node_ngrams_view_node_id_idx on context_node_ngrams_view(node_id); CREATE INDEX IF NOT EXISTS context_node_ngrams_view_context_id_idx
create index if not exists node_stories_ngrams_id_idx on node_stories(ngrams_id); ON context_node_ngrams_view(context_id);
CREATE INDEX IF NOT EXISTS context_node_ngrams_view_ngrams_id_idx
ON context_node_ngrams_view(ngrams_id);
CREATE INDEX IF NOT EXISTS context_node_ngrams_view_node_id_idx
ON context_node_ngrams_view(node_id);
CREATE UNIQUE INDEX IF NOT EXISTS context_node_ngrams_view_context_ngrams_node_uniq_idx
ON context_node_ngrams_view (context_id, ngrams_id, node_id);
CREATE INDEX IF NOT EXISTS node_stories_ngrams_id_idx
ON node_stories(ngrams_id);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment