1CALL SCHEMA_CATALOG.execute_everywhere('create_schemas', $ee$ DO $$ BEGIN 2 CREATE SCHEMA IF NOT EXISTS SCHEMA_CATALOG; -- catalog tables + internal functions 3 GRANT USAGE ON SCHEMA SCHEMA_CATALOG TO prom_reader; 4 5 CREATE SCHEMA IF NOT EXISTS SCHEMA_PROM; -- public functions 6 GRANT USAGE ON SCHEMA SCHEMA_PROM TO prom_reader; 7 8 CREATE SCHEMA IF NOT EXISTS SCHEMA_EXT; -- optimized versions of functions created by the extension 9 GRANT USAGE ON SCHEMA SCHEMA_EXT TO prom_reader; 10 11 CREATE SCHEMA IF NOT EXISTS SCHEMA_SERIES; -- series views 12 GRANT USAGE ON SCHEMA SCHEMA_SERIES TO prom_reader; 13 14 CREATE SCHEMA IF NOT EXISTS SCHEMA_METRIC; -- metric views 15 GRANT USAGE ON SCHEMA SCHEMA_METRIC TO prom_reader; 16 17 CREATE SCHEMA IF NOT EXISTS SCHEMA_DATA; 18 GRANT USAGE ON SCHEMA SCHEMA_DATA TO prom_reader; 19 20 CREATE SCHEMA IF NOT EXISTS SCHEMA_DATA_SERIES; 21 GRANT USAGE ON SCHEMA SCHEMA_DATA_SERIES TO prom_reader; 22 23 CREATE SCHEMA IF NOT EXISTS SCHEMA_INFO; 24 GRANT USAGE ON SCHEMA SCHEMA_INFO TO prom_reader; 25 26 CREATE SCHEMA IF NOT EXISTS SCHEMA_DATA_EXEMPLAR; 27 GRANT USAGE ON SCHEMA SCHEMA_DATA_EXEMPLAR TO prom_reader; 28 GRANT ALL ON SCHEMA SCHEMA_DATA_EXEMPLAR TO prom_writer; 29END $$ $ee$); 30 31-- the promscale extension contains optimized version of some 32-- of our functions and operators. To ensure the correct version of the are 33-- used, SCHEMA_EXT must be before all of our other schemas in the search path 34DO $$ 35DECLARE 36 new_path text; 37BEGIN 38 new_path := current_setting('search_path') || format(',%L,%L,%L,%L', 'SCHEMA_EXT', 'SCHEMA_PROM', 'SCHEMA_METRIC', 'SCHEMA_CATALOG'); 39 execute format('ALTER DATABASE %I SET search_path = %s', current_database(), new_path); 40 execute format('SET search_path = %s', new_path); 41END 42$$; 43