Tenho a tabela tenant, e todos as demais tabelas tem relação com ela, direta ou indiretamente.

Em todas as requisições, passe o id do tenant e liste somente os registros certos.

Ja vi gente falando em usar múltiplos bancos de dados e até múltiplos schemas do PostgreSQL. Cada caso é um caso. No meu caso optei pelo mais simples.

então, em relação a queries, estou fazendo isso e está funcionando corretamente. meu maior problema agora é na parte do create, por Ex: tenho produto 1 no tenant 1, e vou fazer um orçamento no tenant 2, se eu colocar o produto 1 no orçamento, ele gera, o que está errado. eu queria uma forma de validar isso ou algo parecido.

Fala ae, blz? será que não pode ser algum join que está na query? dê uma olhada nos diferentes tipos de join nesse link: https://www.w3schools.com/postgresql/postgresql_joins.php
É só fazer a consulta antes de salvar. Se o produto pertencer ao tenant, deixa. Se não pertencer, encerra com um erro

No seu caso como você sabe de qual tenant é o usuário que acabou de logar? Relaciona o usuário com o tenant?

No meu caso eu tenho usuários que pertencem a tenants e usuários que não pertencem a nenhum, como administradores. Dessa forma, eu tenho uma tabela user_role que relaciona os usuários às suas permissões. Ou seja, o mesmo usuário pode estar em vários tenants. Essa tabela tem o id do usuário, o id da permissão e o id do tenant. esse último não é obrigatório. Um usuário pode ser administrador do sistema e ser operador de um tenant, por exemplo.