pub struct Jsonb;
postgres_backend
only.Expand description
The jsonb
SQL type. This type can only be used with feature = "serde_json"
In SQLite, jsonb
brings mainly performance improvements over
regular JSON:
The advantage of JSONB in SQLite is that it is smaller and faster than text JSON - potentially several times faster. There is space in the on-disk JSONB format to add enhancements and future versions of SQLite might include options to provide O(1) lookup of elements in JSONB, but no such capability is currently available.
diesel
for those changes to be accounted
for. If you do not want this, prefer the regular
Json
type.
In PostgreSQL, jsonb
offers several advantages over regular JSON:
There are two JSON data types:
json
andjsonb
. They accept almost identical sets of values as input. The major practical difference is one of efficiency. Thejson
data type stores an exact copy of the input text, which processing functions must reparse on each execution; whilejsonb
data is stored in a decomposed binary format that makes it slightly slower to input due to added conversion overhead, but significantly faster to process, since no reparsing is needed.jsonb
also supports indexing, which can be a significant advantage.…In general, most applications should prefer to store JSON data as
jsonb
, unless there are quite specialized needs, such as legacy assumptions about ordering of object keys.
§ToSql
impls
§FromSql
impls
§Examples
table! {
contacts {
id -> Integer,
name -> Text,
address -> Jsonb,
}
}
let santas_address: serde_json::Value = serde_json::from_str(
r#"{
"street": "Article Circle Expressway 1",
"city": "North Pole",
"postcode": "99705",
"state": "Alaska"
}"#,
)?;
let inserted_address = insert_into(contacts)
.values((name.eq("Claus"), address.eq(&santas_address)))
.returning(address)
.get_result::<serde_json::Value>(connection)?;
assert_eq!(santas_address, inserted_address);
Trait Implementations§
Source§impl<'__expr, '__expr2> AsExpression<Jsonb> for &'__expr2 &'__expr Value
Available on crate feature serde_json
and (crate features postgres_backend
or mysql_backend
or sqlite
) only.
impl<'__expr, '__expr2> AsExpression<Jsonb> for &'__expr2 &'__expr Value
serde_json
and (crate features postgres_backend
or mysql_backend
or sqlite
) only.Source§type Expression = Bound<Jsonb, &'__expr2 &'__expr Value>
type Expression = Bound<Jsonb, &'__expr2 &'__expr Value>
Source§fn as_expression(self) -> <Self as AsExpression<Jsonb>>::Expression
fn as_expression(self) -> <Self as AsExpression<Jsonb>>::Expression
Source§impl<'__expr> AsExpression<Jsonb> for &'__expr Value
Available on crate feature serde_json
and (crate features postgres_backend
or mysql_backend
or sqlite
) only.
impl<'__expr> AsExpression<Jsonb> for &'__expr Value
serde_json
and (crate features postgres_backend
or mysql_backend
or sqlite
) only.Source§type Expression = Bound<Jsonb, &'__expr Value>
type Expression = Bound<Jsonb, &'__expr Value>
Source§fn as_expression(self) -> <Self as AsExpression<Jsonb>>::Expression
fn as_expression(self) -> <Self as AsExpression<Jsonb>>::Expression
Source§impl AsExpression<Jsonb> for Value
Available on crate feature serde_json
and (crate features postgres_backend
or mysql_backend
or sqlite
) only.
impl AsExpression<Jsonb> for Value
serde_json
and (crate features postgres_backend
or mysql_backend
or sqlite
) only.Source§type Expression = Bound<Jsonb, Value>
type Expression = Bound<Jsonb, Value>
Source§fn as_expression(self) -> <Self as AsExpression<Jsonb>>::Expression
fn as_expression(self) -> <Self as AsExpression<Jsonb>>::Expression
Source§impl HasSqlType<Jsonb> for Pg
impl HasSqlType<Jsonb> for Pg
Source§fn metadata(_: &mut Self::MetadataLookup) -> PgTypeMetadata
fn metadata(_: &mut Self::MetadataLookup) -> PgTypeMetadata
Source§impl HasSqlType<Jsonb> for Sqlite
impl HasSqlType<Jsonb> for Sqlite
Source§impl KnownCastSqlTypeName<Pg> for Jsonb
impl KnownCastSqlTypeName<Pg> for Jsonb
Source§const SQL_TYPE_NAME: &'static str = "jsonb"
const SQL_TYPE_NAME: &'static str = "jsonb"
sql_type
in the CAST(expr AS sql_type)
SQL for
Self
Source§impl KnownCastSqlTypeName<Sqlite> for Jsonb
Available on crate feature sqlite
only.
impl KnownCastSqlTypeName<Sqlite> for Jsonb
sqlite
only.Source§const SQL_TYPE_NAME: &'static str = "jsonb"
const SQL_TYPE_NAME: &'static str = "jsonb"
sql_type
in the CAST(expr AS sql_type)
SQL for
Self
Source§impl QueryId for Jsonb
impl QueryId for Jsonb
Source§const HAS_STATIC_QUERY_ID: bool = true
const HAS_STATIC_QUERY_ID: bool = true
Self
be uniquely identified by its type? Read moreimpl CastsTo<Json> for Jsonb
impl CastsTo<Jsonb> for Json
impl CastsTo<Text> for Jsonb
impl Copy for Jsonb
impl FallibleCastsTo<Json> for Jsonb
impl FallibleCastsTo<Jsonb> for Json
impl FallibleCastsTo<Jsonb> for Text
impl FallibleCastsTo<Text> for Jsonb
impl SingleValue for Jsonb
Auto Trait Implementations§
impl Freeze for Jsonb
impl RefUnwindSafe for Jsonb
impl Send for Jsonb
impl Sync for Jsonb
impl Unpin for Jsonb
impl UnwindSafe for Jsonb
Blanket Implementations§
Source§impl<T> AggregateExpressionMethods for T
impl<T> AggregateExpressionMethods for T
Source§fn aggregate_distinct(self) -> AggregateDistinct<Self>where
Self: DistinctDsl,
fn aggregate_distinct(self) -> AggregateDistinct<Self>where
Self: DistinctDsl,
DISTINCT
modifier for aggregate functions Read moreSource§fn aggregate_all(self) -> AggregateAll<Self>where
Self: AllDsl,
fn aggregate_all(self) -> AggregateAll<Self>where
Self: AllDsl,
ALL
modifier for aggregate functions Read moreSource§fn aggregate_filter<P>(self, f: P) -> AggregateFilter<Self, P>
fn aggregate_filter<P>(self, f: P) -> AggregateFilter<Self, P>
Source§fn aggregate_order<O>(self, o: O) -> AggregateOrder<Self, O>where
Self: OrderAggregateDsl<O>,
fn aggregate_order<O>(self, o: O) -> AggregateOrder<Self, O>where
Self: OrderAggregateDsl<O>,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<ST, U, DB> CompatibleType<U, DB> for ST
impl<ST, U, DB> CompatibleType<U, DB> for ST
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.