I think what you mean is that a room BOOKING is for at least one guest. ANSI standard SQL would allow you to express the constraint as an ASSERTION something like:
create assertion x as check
(not exists (select * from booking b
where not exists
(select * from booking_guest bg
where bg.booking_id = b.booking_id)));
However, I don't suppose Postgres supports that (I'm not sure any current DBMS does).
There is a way using materialized views and check constraints, but I've never seen this done in practice:
1) Create a materialised view as
select booking_id from booking b
where not exists
(select * from booking_guest bg
where bg.booking_id = b.booking_id);
2) Add a check constraint to the materialized view:
check (boooking_id is null)
This constraint will fail if ever the materialized view is not empty, i.e. if there is a booking with no associated guest. However, you would need to be careful about the performance of this approach.