CREATE TABLE assessor_cve_enrichments ( cve_id text PRIMARY KEY CHECK (cve_id ~ '^CVE-[0-9]{4}-[0-9]{4,}$'), source text NOT NULL CHECK (source = 'nvd'), last_modified_at timestamptz NOT NULL, fetched_at timestamptz NOT NULL, data jsonb NOT NULL CHECK (jsonb_typeof(data) = 'object') ); CREATE INDEX assessor_cve_enrichments_last_modified_idx ON assessor_cve_enrichments (last_modified_at DESC); CREATE INDEX assessor_cve_enrichments_search_idx ON assessor_cve_enrichments USING gin ( to_tsvector('simple'::regconfig, coalesce(data->>'cveId', '') || ' ' || coalesce(data->>'description', '')) );