Revision 11696
Added by Aaron Marcuse-Kubitza about 11 years ago
schemas/vegbien.sql | ||
---|---|---|
1220 | 1220 |
-- |
1221 | 1221 |
|
1222 | 1222 |
CREATE FUNCTION sync_analytical_stem_to_view() RETURNS void |
1223 |
LANGUAGE plpgsql |
|
1224 |
AS $$ |
|
1225 |
DECLARE |
|
1226 |
analytical_plot_def text := NULL; |
|
1227 |
analytical_specimen_def text := NULL; |
|
1228 |
provider_count_view_def text := NULL; |
|
1229 |
range_modeling_input_def text := NULL; |
|
1230 |
BEGIN |
|
1231 |
-- Save and drop dependent objects |
|
1232 |
BEGIN |
|
1233 |
analytical_plot_def := |
|
1234 |
'CREATE OR REPLACE VIEW analytical_plot AS ' |
|
1235 |
||pg_get_viewdef('analytical_plot'); |
|
1236 |
DROP VIEW analytical_plot; |
|
1237 |
EXCEPTION |
|
1238 |
WHEN undefined_table THEN NULL; |
|
1239 |
END; |
|
1240 |
BEGIN |
|
1241 |
analytical_specimen_def := |
|
1242 |
'CREATE OR REPLACE VIEW analytical_specimen AS ' |
|
1243 |
||pg_get_viewdef('analytical_specimen'); |
|
1244 |
DROP VIEW analytical_specimen; |
|
1245 |
EXCEPTION |
|
1246 |
WHEN undefined_table THEN NULL; |
|
1247 |
END; |
|
1248 |
BEGIN |
|
1249 |
provider_count_view_def := |
|
1250 |
'CREATE OR REPLACE VIEW provider_count_view AS ' |
|
1251 |
||pg_get_viewdef('provider_count_view'); |
|
1252 |
DROP VIEW provider_count_view; |
|
1253 |
EXCEPTION |
|
1254 |
WHEN undefined_table THEN NULL; |
|
1255 |
END; |
|
1256 |
BEGIN |
|
1257 |
range_modeling_input_def := |
|
1258 |
'CREATE OR REPLACE VIEW range_modeling_input AS ' |
|
1259 |
||pg_get_viewdef('range_modeling_input'); |
|
1260 |
DROP VIEW range_modeling_input; |
|
1261 |
EXCEPTION |
|
1262 |
WHEN undefined_table THEN NULL; |
|
1263 |
END; |
|
1264 |
|
|
1265 |
DROP TABLE IF EXISTS analytical_stem; |
|
1266 |
CREATE TABLE analytical_stem AS SELECT * FROM analytical_stem_view LIMIT 0; |
|
1267 |
ALTER TABLE analytical_stem ADD COLUMN taxon_occurrence__pkey serial PRIMARY KEY; |
|
1268 |
|
|
1269 |
GRANT SELECT ON TABLE analytical_stem TO bien_read; |
|
1270 |
GRANT SELECT ON TABLE analytical_stem_view TO bien_read; |
|
1271 |
|
|
1272 |
ALTER TABLE analytical_stem ADD FOREIGN KEY (datasource) REFERENCES source (shortname) ON UPDATE CASCADE ON DELETE CASCADE; |
|
1273 |
|
|
1274 |
ALTER TABLE analytical_stem ALTER COLUMN "datasource" SET NOT NULL; |
|
1275 |
ALTER TABLE analytical_stem ALTER COLUMN "locationID" SET NOT NULL; |
|
1276 |
|
|
1277 |
CREATE INDEX ON analytical_stem ("datasource", "occurrenceID"); |
|
1278 |
CREATE INDEX ON analytical_stem ("datasource", "specimenHolderInstitutions", "collection", "accessionNumber"); |
|
1279 |
CREATE INDEX ON analytical_stem ("datasource", "projectID", "locationID", "eventDate"); |
|
1280 |
CREATE INDEX ON analytical_stem ("scrubbed_morphospecies_binomial"); |
|
1281 |
|
|
1282 |
-- Re-create dependent objects |
|
1283 |
IF analytical_plot_def IS NOT NULL THEN |
|
1284 |
EXECUTE analytical_plot_def; |
|
1285 |
GRANT SELECT ON TABLE analytical_plot TO bien_read; |
|
1286 |
END IF; |
|
1287 |
IF analytical_specimen_def IS NOT NULL THEN |
|
1288 |
EXECUTE analytical_specimen_def; |
|
1289 |
GRANT SELECT ON TABLE analytical_specimen TO bien_read; |
|
1290 |
END IF; |
|
1291 |
IF provider_count_view_def IS NOT NULL THEN |
|
1292 |
EXECUTE provider_count_view_def; |
|
1293 |
GRANT SELECT ON TABLE provider_count_view TO bien_read; |
|
1294 |
GRANT SELECT ON TABLE provider_count_view TO public_; |
|
1295 |
END IF; |
|
1296 |
IF range_modeling_input_def IS NOT NULL THEN |
|
1297 |
EXECUTE range_modeling_input_def; |
|
1298 |
GRANT SELECT ON TABLE range_modeling_input TO bien_read; |
|
1299 |
END IF; |
|
1300 |
END; |
|
1301 |
$$; |
|
1223 |
LANGUAGE sql |
|
1224 |
AS $_$ |
|
1225 |
SELECT util.force_recreate($$ |
|
1226 |
DROP TABLE IF EXISTS analytical_stem; |
|
1227 |
CREATE TABLE analytical_stem AS SELECT * FROM analytical_stem_view LIMIT 0; |
|
1228 |
ALTER TABLE analytical_stem ADD COLUMN taxon_occurrence__pkey serial PRIMARY KEY; |
|
1302 | 1229 |
|
1230 |
GRANT SELECT ON TABLE analytical_stem TO bien_read; |
|
1231 |
GRANT SELECT ON TABLE analytical_stem_view TO bien_read; |
|
1303 | 1232 |
|
1233 |
ALTER TABLE analytical_stem ADD FOREIGN KEY (datasource) REFERENCES source (shortname) ON UPDATE CASCADE ON DELETE CASCADE; |
|
1234 |
|
|
1235 |
ALTER TABLE analytical_stem ALTER COLUMN "datasource" SET NOT NULL; |
|
1236 |
ALTER TABLE analytical_stem ALTER COLUMN "locationID" SET NOT NULL; |
|
1237 |
|
|
1238 |
CREATE INDEX ON analytical_stem ("datasource", "occurrenceID"); |
|
1239 |
CREATE INDEX ON analytical_stem ("datasource", "specimenHolderInstitutions", "collection", "accessionNumber"); |
|
1240 |
CREATE INDEX ON analytical_stem ("datasource", "projectID", "locationID", "eventDate"); |
|
1241 |
CREATE INDEX ON analytical_stem ("scrubbed_morphospecies_binomial"); |
|
1242 |
$$); |
|
1243 |
$_$; |
|
1244 |
|
|
1245 |
|
|
1304 | 1246 |
-- |
1305 | 1247 |
-- Name: sync_geoscrub_input_to_view(); Type: FUNCTION; Schema: public; Owner: - |
1306 | 1248 |
-- |
Also available in: Unified diff
schemas/vegbien.sql: sync_analytical_stem_to_view(): use new util.force_recreate() instead of manually dropping and re-creating every view that uses this. this avoids the need to add several lines to this function every time we add a new scientific view (of which we expect to have many), because force_recreate()'s error parsing handles this automatically. this makes it possible for a non-expert user to add scientific views without compromising the ability to add columns to analytical_stem_view, because they don't need to understand Postgres's dependency error messages when updating analytical_stem with this function.