To emulate a set, you can use an array with a check for items' uniqueness.
A generic example:
CREATE OR REPLACE FUNCTION is_set(a text[]) RETURNS bool
IMMUTABLE
RETURNS NULL ON NULL INPUT
LANGUAGE SQL
AS $$
SELECT NOT EXISTS(
SELECT i
FROM unnest(a) AS t(i)
GROUP BY i
HAVING COUNT(*) > 1
)
$$;
CREATE TABLE with_set_column(
set_column TEXT[] CHECK (is_set(set_column))
);
-- OK
INSERT INTO with_set_column(set_column) VALUES (ARRAY['a', 'b']);
-- Error, not a set
INSERT INTO with_set_column(set_column) VALUES (ARRAY['a', 'b', 'a']);
For the days of week, obviously, you should change text to a designated enum or number type.