apiVersion: v1 kind: ConfigMap metadata: name: {{ include "thermo.fullname" . }}-postgres-init labels: {{- include "thermo.labels" . | nindent 4 }} data: 01-schema.sql: | CREATE TABLE sensor_events ( event_id uuid PRIMARY KEY, observed_at timestamptz NOT NULL, ingested_at timestamptz NOT NULL, source text NOT NULL, event_type text NOT NULL, severity text NOT NULL, collector_id text, device_id text NOT NULL, raw_event jsonb NOT NULL, stored_at timestamptz NOT NULL DEFAULT now() ); CREATE TABLE sensor_measurements ( event_id uuid NOT NULL REFERENCES sensor_events(event_id) ON DELETE CASCADE, observed_at timestamptz NOT NULL, source text NOT NULL, collector_id text, device_id text NOT NULL, metric_name text NOT NULL, numeric_value double precision, text_value text, unit text, source_updated_at timestamptz, PRIMARY KEY (event_id, metric_name), CHECK (numeric_value IS NOT NULL OR text_value IS NOT NULL) ); CREATE INDEX sensor_events_device_time_idx ON sensor_events (device_id, observed_at DESC); CREATE INDEX sensor_measurements_metric_device_time_idx ON sensor_measurements (metric_name, device_id, observed_at DESC); CREATE INDEX sensor_measurements_time_idx ON sensor_measurements (observed_at DESC); CREATE VIEW grafana_sensor_measurements AS SELECT observed_at AS time, source, collector_id, device_id, metric_name, numeric_value, text_value, unit FROM sensor_measurements; 02-reader.sh: | #!/bin/sh set -eu psql --set ON_ERROR_STOP=1 \ --username "$POSTGRES_USER" \ --dbname "$POSTGRES_DB" \ --set reader_user="$GRAFANA_USER" \ --set reader_password="$GRAFANA_PASSWORD" <<'SQL' SELECT format('CREATE ROLE %I LOGIN PASSWORD %L', :'reader_user', :'reader_password') WHERE NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = :'reader_user') \gexec GRANT CONNECT ON DATABASE {{ .Values.postgres.database }} TO :"reader_user"; GRANT USAGE ON SCHEMA public TO :"reader_user"; GRANT SELECT ON sensor_events, sensor_measurements, grafana_sensor_measurements TO :"reader_user"; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO :"reader_user"; SQL