jsonb

jsonb
O jsonb armazena dados em um formato binário decomposto, não como uma sequência ASCII/UTF-8, mas como código binário. Isso o torna um pouco mais lento para entrada devido à sobrecarga adicional de conversão, mas significativamente mais rápido para processamento, uma vez que nenhuma nova análise é necessária.
O jsonb também suporta indexação, o que pode ser uma vantagem significativa.
O jsonb não preserva o espaço em branco, não preserva a ordem de chaves de objetos e não mantém chaves de objetos duplicadas. Se chaves duplicadas forem especificadas na entrada, somente o último valor será mantido.
Recomenda-se que os aplicativos armazenem dados JSON como jsonb, a menos que haja necessidades bastante especializadas, como suposições anteriores sobre a ordenação de chaves de objetos.
A RFC 7159 permite sequências JSON para conter sequências de escape Unicode denotadas por \uXXXX. A função de entrada para jsonb não permite escapes Unicode para caracteres não ASCII (aqueles acima de U + 007F), a menos que a codificação do banco de dados seja UTF8. O jsonb rejeita \u0000. A razão para isso é que \u0000 não pode ser representado no tipo de texto do PostgreSQL. O jsonb insiste que qualquer uso de pares substitutos do Unicode para designar caracteres fora do Unicode Basic Multilingual Plane esteja correto. Os escapes Unicode válidos são convertidos no caractere ASCII ou UTF8 equivalente para armazenamento; isso inclui compactar pares substitutos em um único caractere.
Ao converter a entrada textual JSON em jsonb, os tipos primitivos descritos pela RFC 7159 são efetivamente mapeados para os tipos nativos do PostgreSQL. O jsonb rejeita os números que estão fora do intervalo do tipo de dados numéricos do PostgreSQL.