Considere a situação em que tenho todos os nomes de esquema em uma tabela e todos os nomes de tabela em outra tabela.
É possível fazer algo como no seguinte (pseudo-código)?
SELECT value FROM (SELECT schema_name FROM schemas).(SELECT table_name FROM tables)
Ou tenho que dividir a consulta em três SELECTs?
Jack demonstrou o caminho a seguir. No entanto, sinto que há espaço para melhorias.
Configuração de teste:
Função atualizada com
format()
em 2017; formatado em 2021:db<>mexa aqui
Ligar:
A função pode retornar qualquer coluna de qualquer tipo .
Leia o manual sobre Tipos Polimórficos e Declaração de Parâmetros de Funções .
Use
format()
para se defender contra injeção de SQL. Ver:Recupere o nome da tabela por consulta, conforme solicitado.
Nomeie a coluna retornada para facilitar a referência.
Resposta original:
Defenda-se contra a injeção de SQL usando
quote_ident()
e convertendo pararegclass
.Você precisa de SQL dinâmico - talvez algo assim:
Estou assumindo que todas as tabelas estão presentes em todos os esquemas, como a pergunta implica