Revision 48139
Added by Alessia Bardi almost 7 years ago
materialised_views.sql | ||
---|---|---|
1 |
|
|
2 | 1 |
-- query performed by IIS to bulk load project details |
3 | 2 |
DROP MATERIALIZED VIEW project_details; |
4 | 3 |
CREATE MATERIALIZED VIEW project_details AS ( |
5 |
SELECT p.id AS projectid, |
|
6 |
p.acronym AS acronym, |
|
7 |
p.code AS code, |
|
8 |
p.optional1 AS optional1, |
|
9 |
p.optional2 AS optional2, |
|
10 |
p.jsonextrainfo AS jsonextrainfo, |
|
11 |
array_agg(fp.path) AS fundingpath |
|
12 |
FROM projects p |
|
13 |
LEFT OUTER JOIN project_fundingpath pf ON (pf.project = p.id) |
|
14 |
LEFT OUTER JOIN fundingpaths fp ON (fp.id = pf.funding) |
|
15 |
GROUP BY p.id |
|
4 |
SELECT |
|
5 |
p.id AS projectid, |
|
6 |
p.acronym AS acronym, |
|
7 |
p.code AS code, |
|
8 |
p.optional1 AS optional1, |
|
9 |
p.optional2 AS optional2, |
|
10 |
p.jsonextrainfo AS jsonextrainfo, |
|
11 |
array_agg(fp.path) AS fundingpath |
|
12 |
FROM projects p |
|
13 |
LEFT OUTER JOIN project_fundingpath pf ON (pf.project = p.id) |
|
14 |
LEFT OUTER JOIN fundingpaths fp ON (fp.id = pf.funding) |
|
15 |
GROUP BY p.id |
|
16 | 16 |
); |
17 | 17 |
|
18 | 18 |
-- used to serve queries from api tsv exporter |
19 | 19 |
DROP MATERIALIZED VIEW projects_tsv; |
20 | 20 |
CREATE MATERIALIZED VIEW projects_tsv AS ( |
21 |
SELECT |
|
22 |
pr.code, |
|
23 |
pr.acronym, |
|
24 |
pr.title, |
|
25 |
pr.call_identifier, |
|
26 |
pr.startdate, |
|
27 |
pr.enddate, |
|
28 |
pr.ec_sc39, |
|
29 |
pr.oa_mandate_for_publications, |
|
30 |
pr.ec_article29_3, |
|
31 |
f.id AS fundingpathid, |
|
32 |
f.description, |
|
33 |
org.legalname, |
|
34 |
org.countryclass, |
|
35 |
CASE WHEN po.participantnumber = 1 THEN 'coordinator' ELSE '' END AS role, |
|
36 |
pe.firstname, |
|
37 |
pe.secondnames, |
|
38 |
pe.email |
|
39 |
FROM projects pr |
|
40 |
LEFT OUTER JOIN project_organization po ON (pr.id = po.project) |
|
41 |
LEFT OUTER JOIN persons pe ON (po.contactperson=pe.id) |
|
42 |
LEFT OUTER JOIN organizations org ON (po.resporganization = org.id) |
|
43 |
LEFT OUTER JOIN project_fundingpath pf ON (pr.id = pf.project) |
|
44 |
LEFT OUTER JOIN fundingpaths f ON (pf.funding = f.id) |
|
45 |
ORDER BY pr.acronym); |
|
46 |
CREATE INDEX projects_tsv_fundingpathid_idx ON projects_tsv (fundingpathid); |
|
47 |
CREATE INDEX projects_tsv_ec_article29_3_idx ON projects_tsv (ec_article29_3); |
|
21 |
SELECT |
|
22 |
pr.code, |
|
23 |
pr.acronym, |
|
24 |
pr.title, |
|
25 |
pr.call_identifier, |
|
26 |
pr.startdate, |
|
27 |
pr.enddate, |
|
28 |
pr.ec_sc39, |
|
29 |
pr.oa_mandate_for_publications, |
|
30 |
pr.ec_article29_3, |
|
31 |
f.id AS fundingpathid, |
|
32 |
f.description, |
|
33 |
org.legalname, |
|
34 |
org.countryclass, |
|
35 |
CASE WHEN po.participantnumber = 1 |
|
36 |
THEN 'coordinator' |
|
37 |
ELSE '' END AS role, |
|
38 |
pe.firstname, |
|
39 |
pe.secondnames, |
|
40 |
pe.email |
|
41 |
FROM projects pr |
|
42 |
LEFT OUTER JOIN project_organization po ON (pr.id = po.project) |
|
43 |
LEFT OUTER JOIN persons pe ON (po.contactperson = pe.id) |
|
44 |
LEFT OUTER JOIN organizations org ON (po.resporganization = org.id) |
|
45 |
LEFT OUTER JOIN project_fundingpath pf ON (pr.id = pf.project) |
|
46 |
LEFT OUTER JOIN fundingpaths f ON (pf.funding = f.id) |
|
47 |
ORDER BY pr.acronym); |
|
48 |
CREATE INDEX projects_tsv_fundingpathid_idx |
|
49 |
ON projects_tsv (fundingpathid); |
|
50 |
CREATE INDEX projects_tsv_ec_article29_3_idx |
|
51 |
ON projects_tsv (ec_article29_3); |
|
48 | 52 |
|
49 | 53 |
-- used to serve queries from dspace and eprints exporter |
50 | 54 |
DROP MATERIALIZED VIEW projects_api; |
51 | 55 |
CREATE MATERIALIZED VIEW projects_api AS ( |
52 |
SELECT |
|
53 |
org.legalshortname AS funder, |
|
54 |
fp.jurisdiction AS jurisdiction, |
|
55 |
p.acronym AS acronym, |
|
56 |
p.title AS title, |
|
57 |
p.code AS code, |
|
58 |
p.startdate AS startdate, |
|
59 |
p.enddate AS enddate, |
|
60 |
fp.id AS fundingpathid |
|
61 |
FROM projects p |
|
62 |
LEFT OUTER JOIN project_fundingpath pfp ON (p.id = pfp.project) |
|
63 |
LEFT OUTER JOIN fundingpaths fp ON (pfp.funding = fp.id) |
|
64 |
LEFT OUTER JOIN organizations org ON (org.id = fp.funder)); |
|
65 |
CREATE INDEX projects_api_fundingpathid_idx ON projects_api (fundingpathid); |
|
66 |
CREATE INDEX projects_api_startdate_idx ON projects_api (startdate); |
|
67 |
CREATE INDEX projects_api_enddate_idx ON projects_api (enddate); |
|
56 |
SELECT |
|
57 |
org.legalshortname AS funder, |
|
58 |
fp.jurisdiction AS jurisdiction, |
|
59 |
p.acronym AS acronym, |
|
60 |
p.title AS title, |
|
61 |
p.code AS code, |
|
62 |
p.startdate AS startdate, |
|
63 |
p.enddate AS enddate, |
|
64 |
fp.id AS fundingpathid |
|
65 |
FROM projects p |
|
66 |
LEFT OUTER JOIN project_fundingpath pfp ON (p.id = pfp.project) |
|
67 |
LEFT OUTER JOIN fundingpaths fp ON (pfp.funding = fp.id) |
|
68 |
LEFT OUTER JOIN organizations org ON (org.id = fp.funder)); |
|
69 |
CREATE INDEX projects_api_fundingpathid_idx |
|
70 |
ON projects_api (fundingpathid); |
|
71 |
CREATE INDEX projects_api_startdate_idx |
|
72 |
ON projects_api (startdate); |
|
73 |
CREATE INDEX projects_api_enddate_idx |
|
74 |
ON projects_api (enddate); |
|
68 | 75 |
|
69 | 76 |
-- used to serve queries from the repo admin dashboard |
70 | 77 |
DROP MATERIALIZED VIEW dashboard_ds; |
... | ... | |
94 | 101 |
ds.issn, |
95 | 102 |
ds.eissn, |
96 | 103 |
ds.lissn, |
97 |
(array_agg(o.legalname))[1] as organization,
|
|
98 |
(array_agg(ccl.code))[1] as countrycode,
|
|
99 |
(array_agg(ccl.name))[1] as countryname,
|
|
100 |
array_agg(distinct ag.accessinfopackage) as accessinfopackage,
|
|
104 |
(array_agg(o.legalname)) [1] AS organization,
|
|
105 |
(array_agg(ccl.code)) [1] AS countrycode,
|
|
106 |
(array_agg(ccl.name)) [1] AS countryname,
|
|
107 |
array_agg(DISTINCT ag.accessinfopackage) AS accessinfopackage,
|
|
101 | 108 |
to_char(now(), 'YYYY-MM-DDThh24:mi:ssZ') AS now |
102 | 109 |
|
103 | 110 |
FROM datasources ds |
... | ... | |
105 | 112 |
LEFT OUTER JOIN organizations o ON dso.organization = o.id |
106 | 113 |
LEFT OUTER JOIN class ccl ON ccl.code = o.countryclass |
107 | 114 |
LEFT OUTER JOIN ( |
108 |
SELECT |
|
109 |
api.datasource, |
|
110 |
api.contentdescriptionclass, |
|
111 |
api.compatibilityclass, |
|
112 |
COALESCE(api.id, '')||'<==1==>'|| |
|
113 |
COALESCE(api.typologyclass, '')||'<==2==>'|| |
|
114 |
COALESCE(api.compatibilityclass, '')||'<==3==>'|| |
|
115 |
COALESCE(api.contentdescriptionclass,'')||'<==4==>'|| |
|
116 |
COALESCE(api.protocolclass,'')||'<==5==>'|| |
|
117 |
COALESCE(api.active,false)||'<==6==>'|| |
|
118 |
COALESCE(api.removable,false)||'<==7==>'|| |
|
119 |
array_to_string( |
|
120 |
array_agg(distinct |
|
121 |
COALESCE(ac.accessparam, true)||'###'|| |
|
122 |
COALESCE(ac.param,'')||'###'|| |
|
123 |
COALESCE(ac.value,'')||'###'), '@@@') AS accessinfopackage |
|
124 |
FROM api |
|
125 |
LEFT OUTER JOIN ( |
|
126 |
SELECT |
|
127 |
api, |
|
128 |
param, |
|
129 |
accessparam, |
|
130 |
CASE WHEN edited IS NULL THEN original ELSE edited END as value FROM apicollections |
|
131 |
) AS ac ON (ac.api = api.id) |
|
132 |
GROUP BY |
|
133 |
api.id, |
|
134 |
api.datasource, |
|
135 |
api.contentdescriptionclass, |
|
136 |
api.typologyclass, |
|
137 |
api.compatibilityclass, |
|
138 |
api.protocolclass, |
|
139 |
api.active, |
|
140 |
api.removable |
|
141 |
) AS ag on (ag.datasource = ds.id) |
|
142 |
GROUP BY |
|
143 |
ds.id, |
|
144 |
ds.officialname, |
|
145 |
ds.englishname, |
|
146 |
ds.websiteurl, |
|
147 |
ds.logourl, |
|
148 |
ds.contactemail, |
|
149 |
ds.latitude, |
|
150 |
ds.longitude, |
|
151 |
ds.timezone, |
|
152 |
ds.namespaceprefix, |
|
153 |
ds.collectedfrom, |
|
154 |
ds.dateofvalidation, |
|
155 |
ds.registeredby, |
|
156 |
ds.datasourceclass, |
|
157 |
ds.provenanceactionclass, |
|
158 |
ds.dateofcollection, |
|
159 |
ds.typology, |
|
160 |
ds.activationid, |
|
161 |
ds.description, |
|
162 |
ds.aggregator, |
|
163 |
ds.issn, |
|
164 |
ds.eissn, |
|
165 |
ds.lissn |
|
115 |
SELECT |
|
116 |
api.datasource, |
|
117 |
api.contentdescriptionclass, |
|
118 |
api.compatibilityclass, |
|
119 |
COALESCE(api.id, '') || '<==1==>' || |
|
120 |
COALESCE(api.typologyclass, '') || '<==2==>' || |
|
121 |
COALESCE(api.compatibilityclass, '') || '<==3==>' || |
|
122 |
COALESCE(api.contentdescriptionclass, '') || '<==4==>' || |
|
123 |
COALESCE(api.protocolclass, '') || '<==5==>' || |
|
124 |
COALESCE(api.active, FALSE) || '<==6==>' || |
|
125 |
COALESCE(api.removable, FALSE) || '<==7==>' || |
|
126 |
array_to_string( |
|
127 |
array_agg(DISTINCT |
|
128 |
COALESCE(ac.accessparam, TRUE) || '###' || |
|
129 |
COALESCE(ac.param, '') || '###' || |
|
130 |
COALESCE(ac.value, '') || '###'), '@@@') AS accessinfopackage |
|
131 |
FROM api |
|
132 |
LEFT OUTER JOIN ( |
|
133 |
SELECT |
|
134 |
api, |
|
135 |
param, |
|
136 |
accessparam, |
|
137 |
CASE WHEN edited IS NULL |
|
138 |
THEN original |
|
139 |
ELSE edited END AS value |
|
140 |
FROM apicollections |
|
141 |
) AS ac ON (ac.api = api.id) |
|
142 |
GROUP BY |
|
143 |
api.id, |
|
144 |
api.datasource, |
|
145 |
api.contentdescriptionclass, |
|
146 |
api.typologyclass, |
|
147 |
api.compatibilityclass, |
|
148 |
api.protocolclass, |
|
149 |
api.active, |
|
150 |
api.removable |
|
151 |
) AS ag ON (ag.datasource = ds.id) |
|
152 |
GROUP BY |
|
153 |
ds.id, |
|
154 |
ds.officialname, |
|
155 |
ds.englishname, |
|
156 |
ds.websiteurl, |
|
157 |
ds.logourl, |
|
158 |
ds.contactemail, |
|
159 |
ds.latitude, |
|
160 |
ds.longitude, |
|
161 |
ds.timezone, |
|
162 |
ds.namespaceprefix, |
|
163 |
ds.collectedfrom, |
|
164 |
ds.dateofvalidation, |
|
165 |
ds.registeredby, |
|
166 |
ds.datasourceclass, |
|
167 |
ds.provenanceactionclass, |
|
168 |
ds.dateofcollection, |
|
169 |
ds.typology, |
|
170 |
ds.activationid, |
|
171 |
ds.description, |
|
172 |
ds.aggregator, |
|
173 |
ds.issn, |
|
174 |
ds.eissn, |
|
175 |
ds.lissn |
|
166 | 176 |
); |
167 |
CREATE INDEX dashboard_ds_id_idx ON dashboard_ds (id); |
|
177 |
CREATE INDEX dashboard_ds_id_idx |
|
178 |
ON dashboard_ds (id); |
|
168 | 179 |
|
180 |
DROP MATERIALIZED VIEW projects_mv; |
|
181 |
CREATE MATERIALIZED VIEW projects_mv AS ( |
|
182 |
SELECT |
|
183 |
p.id AS projectid, |
|
184 |
p.code AS code, |
|
185 |
p.websiteurl AS websiteurl, |
|
186 |
p.acronym AS acronym, |
|
187 |
p.title AS title, |
|
188 |
p.startdate AS startdate, |
|
189 |
p.enddate AS enddate, |
|
190 |
p.call_identifier AS callidentifier, |
|
191 |
p.keywords AS keywords, |
|
192 |
p.duration AS duration, |
|
193 |
p.ec_sc39 AS ecsc39, |
|
194 |
p.oa_mandate_for_publications AS oamandatepublications, |
|
195 |
p.ec_article29_3 AS ecarticle29_3, |
|
196 |
p.dateofcollection AS dateofcollection, |
|
197 |
p.inferred AS inferred, |
|
198 |
p.deletedbyinference AS deletedbyinference, |
|
199 |
p.trust AS trust, |
|
200 |
p.inferenceprovenance AS inferenceprovenance, |
|
201 |
p.optional1 AS optional1, |
|
202 |
p.optional2 AS optional2, |
|
203 |
p.jsonextrainfo AS jsonextrainfo, |
|
204 |
dc.id AS collectedfromid, |
|
205 |
dc.officialname AS collectedfromname, |
|
206 |
|
|
207 |
cc.code || '@@@' || cc.name || '@@@' || cs.code || '@@@' || cs.name AS contracttype, |
|
208 |
pac.code || '@@@' || pac.name || '@@@' || pas.code || '@@@' || pas.name AS provenanceaction, |
|
209 |
|
|
210 |
array_agg(DISTINCT i.pid || '###' || i.issuertypeclass) AS pid, |
|
211 |
array_agg(DISTINCT s.name || '###' || sc.code || '@@@' || sc.name || '@@@' || ss.code || '@@@' || ss.name) AS subjects, |
|
212 |
|
|
213 |
array_agg(fp.path) AS fundingtree |
|
214 |
|
|
215 |
FROM projects p |
|
216 |
LEFT OUTER JOIN class cc ON (cc.code = p.contracttypeclass) |
|
217 |
LEFT OUTER JOIN scheme cs ON (cs.code = p.contracttypescheme) |
|
218 |
|
|
219 |
LEFT OUTER JOIN class pac ON (pac.code = p.provenanceactionclass) |
|
220 |
LEFT OUTER JOIN scheme pas ON (pas.code = p.provenanceactionscheme) |
|
221 |
|
|
222 |
LEFT OUTER JOIN projectpids pp ON (pp.project = p.id) |
|
223 |
LEFT OUTER JOIN identities i ON (i.pid = pp.pid) |
|
224 |
|
|
225 |
LEFT OUTER JOIN datasources dc ON (dc.id = p.collectedfrom) |
|
226 |
|
|
227 |
LEFT OUTER JOIN project_fundingpath pf ON (pf.project = p.id) |
|
228 |
LEFT OUTER JOIN fundingpaths fp ON (fp.id = pf.funding) |
|
229 |
|
|
230 |
LEFT OUTER JOIN project_subject ps ON (ps.project = p.id) |
|
231 |
LEFT OUTER JOIN subjects s ON (s.id = ps.subject) |
|
232 |
|
|
233 |
LEFT OUTER JOIN class sc ON (sc.code = s.semanticclass) |
|
234 |
LEFT OUTER JOIN scheme ss ON (ss.code = s.semanticscheme) |
|
235 |
|
|
236 |
GROUP BY |
|
237 |
p.id, |
|
238 |
p.code, |
|
239 |
p.websiteurl, |
|
240 |
p.acronym, |
|
241 |
p.title, |
|
242 |
p.startdate, |
|
243 |
p.enddate, |
|
244 |
p.call_identifier, |
|
245 |
p.keywords, |
|
246 |
p.duration, |
|
247 |
p.ec_sc39, |
|
248 |
p.oa_mandate_for_publications, |
|
249 |
p.ec_article29_3, |
|
250 |
p.dateofcollection, |
|
251 |
p.inferred, |
|
252 |
p.deletedbyinference, |
|
253 |
p.trust, |
|
254 |
p.inferenceprovenance, |
|
255 |
dc.id, |
|
256 |
dc.officialname, |
|
257 |
cc.code, cc.name, cs.code, cs.name, |
|
258 |
pac.code, pac.name, pas.code, pas.name |
|
259 |
); |
|
260 |
CREATE INDEX projects_mv_id_idx |
|
261 |
ON projects_mv (projectid); |
|
262 |
|
|
169 | 263 |
GRANT SELECT ON projects_api TO dnetapi; |
170 | 264 |
GRANT SELECT ON projects_tsv TO dnetapi; |
171 | 265 |
GRANT SELECT ON project_details TO dnetapi; |
Also available in: Unified diff
integrated (hopefully) all required changes from dnet40