Eu entendo as diferenças de alto nível entre pg_catalog
e information_schema
.
Mas, em muitos casos, uma ferramenta pode optar por usar qualquer um deles. E eu estou querendo saber se existem razões de desempenho por que devemos preferir um ou outro. Espera-se que as consultas sejam mais rápidas em um deles? Funcionam da mesma forma em termos de fechaduras?
Normalmente,
pg_catalog
é mais rápido .A verdadeira fonte de informação no Postgres são as tabelas de catálogo em
pg_catalog
. As visualizações noinformation_schema
são baseadas neles. Às vezes, essas visualizações são bastante complicadas para cumprir o padrão SQL.Para cada consulta direcionada a uma visualização de esquema de informações, há uma alternativa mais rápida baseada
pg_catalog
diretamente em tabelas, eliminando o intermediário.Ver:
Para consultas simples, não importa muito. Mas se você repetir a consulta com alta frequência, ou para casos mais complexos, pode ser substancial. Na maioria das vezes, as visualizações do esquema de informações fazem muito trabalho que você não pediu. Compare essas duas consultas:
db<>fique aqui
1 ms vs 200 ms (depende do número de colunas no banco de dados, é claro). Esse é o preço de cumprir um padrão - que também é o principal motivo para usar o esquema de informações: as consultas são estáveis nas principais versões do Postgres (mas as colunas principais das tabelas de catálogo também quase nunca mudam) e (em teoria) são portáteis para outros RDBMS. (Mas escrever código "portátil" é um negócio complicado e eu não tentaria a menos que fosse absolutamente necessário.)
Relacionado:
Às vezes, nem é a melhor opção para começar. Existem muitas funções de informações do sistema dedicadas , ou uma conversão para um tipo de identificador de objeto pode simplificar ou resolver a tarefa. Exemplos:
Quanto aos bloqueios : você normalmente não precisa se preocupar com isso no Postgres. Graças ao modelo MVCC , os leitores não bloqueiam os escritores e vice-versa. Se for o caso,
information_schema
é mais um problema, pois normalmente extrai mais tabelas de catálogo do que o necessário.