CREATE EXTENSION "uuid-ossp"; CREATE EXTENSION provsql; SET search_path TO public, provsql; CREATE TYPE classification_level AS ENUM ('unclassified','restricted','confidential','secret','top_secret'); CREATE TABLE personnel( id SERIAL PRIMARY KEY, name varchar, position varchar, city varchar, classification classification_level ); INSERT INTO personnel (name,position,city,classification) VALUES ('John','Director','New York','unclassified'), ('Paul','Janitor','New York','restricted'), ('Dave','Analyst','Paris','confidential'), ('Ellen','Field agent','Berlin','secret'), ('Magdalen','Double agent','Paris','top_secret'), ('Nancy','HR','Paris','restricted'), ('Susan','Analyst','Berlin','secret'); /* The security semiring */ CREATE FUNCTION security_min_state(state classification_level, level classification_level) RETURNS classification_level AS $$ SELECT CASE WHEN state IS NULL THEN level WHEN state