1-- delete the get_new_label_pos so that base.sql creates the new one.
2DROP FUNCTION IF EXISTS SCHEMA_CATALOG.get_new_pos_for_key(text, text[]);
3
4CREATE DOMAIN SCHEMA_PROM.label_value_array AS TEXT[];
5
6CREATE SCHEMA IF NOT EXISTS SCHEMA_DATA_EXEMPLAR;
7GRANT USAGE ON SCHEMA SCHEMA_DATA_EXEMPLAR TO prom_reader;
8GRANT ALL ON SCHEMA SCHEMA_DATA_EXEMPLAR TO prom_writer;
9
10CREATE TABLE IF NOT EXISTS SCHEMA_CATALOG.exemplar_label_key_position (
11  metric_name TEXT NOT NULL,
12  key         TEXT NOT NULL,
13  pos         INTEGER NOT NULL,
14  PRIMARY KEY (metric_name, key) INCLUDE (pos)
15);
16GRANT SELECT ON TABLE SCHEMA_CATALOG.exemplar_label_key_position TO prom_reader;
17GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE SCHEMA_CATALOG.exemplar_label_key_position TO prom_writer;
18
19CREATE TABLE IF NOT EXISTS SCHEMA_CATALOG.exemplar (
20   id          SERIAL PRIMARY KEY,
21   metric_name TEXT NOT NULL,
22   table_name  TEXT NOT NULL,
23   UNIQUE (metric_name) INCLUDE (table_name, id)
24);
25GRANT SELECT ON TABLE SCHEMA_CATALOG.exemplar TO prom_reader;
26GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE SCHEMA_CATALOG.exemplar TO prom_writer;
27
28GRANT USAGE, SELECT ON SEQUENCE exemplar_id_seq TO prom_writer;
29
30INSERT INTO public.prom_installation_info(key, value) VALUES
31    ('exemplar data schema',  'SCHEMA_DATA_EXEMPLAR');
32
33------------------ op.@> -----------------
34CREATE OR REPLACE FUNCTION SCHEMA_CATALOG.label_value_contains(labels SCHEMA_PROM.label_value_array, label_value TEXT)
35RETURNS BOOLEAN
36AS $func$
37    SELECT labels @> ARRAY[label_value]::TEXT[]
38$func$
39LANGUAGE SQL STABLE PARALLEL SAFE;
40
41CREATE OPERATOR SCHEMA_PROM.@> (
42    LEFTARG = SCHEMA_PROM.label_value_array,
43    RIGHTARG = TEXT,
44    FUNCTION = SCHEMA_CATALOG.label_value_contains
45);
46
47CALL SCHEMA_CATALOG.execute_everywhere('create_schemas', $ee$ DO $$ BEGIN
48    CREATE SCHEMA IF NOT EXISTS SCHEMA_CATALOG; -- catalog tables + internal functions
49    GRANT USAGE ON SCHEMA SCHEMA_CATALOG TO prom_reader;
50
51    CREATE SCHEMA IF NOT EXISTS SCHEMA_PROM; -- public functions
52    GRANT USAGE ON SCHEMA SCHEMA_PROM TO prom_reader;
53
54    CREATE SCHEMA IF NOT EXISTS SCHEMA_EXT; -- optimized versions of functions created by the extension
55    GRANT USAGE ON SCHEMA SCHEMA_EXT TO prom_reader;
56
57    CREATE SCHEMA IF NOT EXISTS SCHEMA_SERIES; -- series views
58    GRANT USAGE ON SCHEMA SCHEMA_SERIES TO prom_reader;
59
60    CREATE SCHEMA IF NOT EXISTS SCHEMA_METRIC; -- metric views
61    GRANT USAGE ON SCHEMA SCHEMA_METRIC TO prom_reader;
62
63    CREATE SCHEMA IF NOT EXISTS SCHEMA_DATA;
64    GRANT USAGE ON SCHEMA SCHEMA_DATA TO prom_reader;
65
66    CREATE SCHEMA IF NOT EXISTS SCHEMA_DATA_SERIES;
67    GRANT USAGE ON SCHEMA SCHEMA_DATA_SERIES TO prom_reader;
68
69    CREATE SCHEMA IF NOT EXISTS SCHEMA_INFO;
70    GRANT USAGE ON SCHEMA SCHEMA_INFO TO prom_reader;
71
72    CREATE SCHEMA IF NOT EXISTS SCHEMA_DATA_EXEMPLAR;
73    GRANT USAGE ON SCHEMA SCHEMA_DATA_EXEMPLAR TO prom_reader;
74    GRANT ALL ON SCHEMA SCHEMA_DATA_EXEMPLAR TO prom_writer;
75END $$ $ee$);