I dislike the premise of this option. It doesn't seem like something that should be evaluated on a cluster/database scope.
Indeed. OP, we already have a mechanism to support this: event triggers. Quick example:
create or replace function unlogged_be_gone() returns event_trigger
language plpgsql as $$ declare myrec record; begin for myrec in select * from pg_event_trigger_ddl_commands() loop if myrec.command_tag = 'CREATE TABLE' OR myrec.command_tag = 'ALTER TABLE' then perform 1 from pg_class where oid = myrec.objid and relpersistence = 'u'; if found then raise 'Tables may not be created or changed to unlogged!'; end if; end if; end loop; end $$;
create event trigger etest on ddl_command_end execute function unlogged_be_gone();