@@ -7,7 +7,7 @@ CREATE TABLE IF NOT EXISTS schema_migrations
77
88
99INSERT INTO schema_migrations
10- VALUES (155 , false);
10+ VALUES (156 , false);
1111
1212-- ---------------------------------------------------------------------------
1313-- Functions
6565$check_unchanged$
6666 LANGUAGE ' plpgsql' ;
6767
68+ CREATE OR REPLACE FUNCTION sync_system_inventory_workspace ()
69+ RETURNS TRIGGER AS
70+ $$
71+ BEGIN
72+ IF NEW .workspaces IS NOT NULL
73+ AND jsonb_typeof(NEW .workspaces ) = ' array'
74+ AND jsonb_array_length(NEW .workspaces ) > 0
75+ THEN
76+ NEW .workspace_id := (NEW .workspaces - > 0 - >> ' id' )::UUID;
77+ NEW .workspace_name := NEW .workspaces - > 0 - >> ' name' ;
78+ IF NEW .workspace_name IS NULL OR empty(NEW .workspace_name ) THEN
79+ RAISE EXCEPTION ' workspace_name must not be empty' ;
80+ END IF;
81+ ELSIF TG_OP = ' INSERT' THEN
82+ RAISE EXCEPTION ' workspaces required' ;
83+ END IF;
84+ RETURN NEW;
85+ END;
86+ $$ LANGUAGE plpgsql;
6887
6988CREATE OR REPLACE FUNCTION on_system_update ()
7089-- this trigger updates advisory_account_data when server changes its stale flag
@@ -593,6 +612,8 @@ CREATE TABLE IF NOT EXISTS system_inventory
593612 mssql_workload BOOLEAN NOT NULL DEFAULT false,
594613 mssql_workload_version TEXT CHECK (NOT empty(mssql_workload_version)),
595614 workspaces JSONB,
615+ workspace_id UUID,
616+ workspace_name TEXT CHECK (NOT empty(workspace_name)),
596617 PRIMARY KEY (rh_account_id, id),
597618 UNIQUE (rh_account_id, inventory_id)
598619) PARTITION BY HASH (rh_account_id);
@@ -621,6 +642,11 @@ SELECT create_table_partition_triggers('system_inventory_on_update',
621642 ' system_inventory' ,
622643 $$FOR EACH ROW EXECUTE PROCEDURE on_system_update()$$);
623644
645+ SELECT create_table_partition_triggers(' system_inventory_sync_workspace' ,
646+ $$BEFORE INSERT OR UPDATE OF workspaces$$,
647+ ' system_inventory' ,
648+ $$FOR EACH ROW EXECUTE PROCEDURE sync_system_inventory_workspace()$$);
649+
624650CREATE INDEX IF NOT EXISTS system_inventory_inventory_id_idx ON system_inventory (inventory_id);
625651CREATE INDEX IF NOT EXISTS system_inventory_tags_index ON system_inventory USING GIN (tags JSONB_PATH_OPS);
626652CREATE INDEX IF NOT EXISTS system_inventory_stale_timestamp_index ON system_inventory (stale_timestamp);
0 commit comments