Skip to main content

PgHasArrayType

Trait PgHasArrayType 

pub trait PgHasArrayType {
    // Required method
    fn array_type_info() -> PgTypeInfo;

    // Provided method
    fn array_compatible(ty: &PgTypeInfo) -> bool { ... }
}
Expand description

Provides information necessary to encode and decode Postgres arrays as compatible Rust types.

Implementing this trait for some type T enables relevant Type,Encode and Decode impls for Vec<T>, &[T] (slices), [T; N] (arrays), etc.

§Note: #[derive(sqlx::Type)]

If you have the postgres feature enabled, #[derive(sqlx::Type)] will also generate an impl of this trait for your type if your wrapper is marked #[sqlx(transparent)]:

#[derive(sqlx::Type)]
#[sqlx(transparent)]
struct UserId(i64);

let user_ids: Vec<UserId> = sqlx::query_scalar("select '{ 123, 456 }'::int8[]")
   .fetch(&mut pg_connection)
   .await?;

However, this may cause an error if the type being wrapped does not implement PgHasArrayType, e.g. Vec itself, because we don’t currently support multidimensional arrays:

#[derive(sqlx::Type)] // ERROR: `Vec<i64>` does not implement `PgHasArrayType`
#[sqlx(transparent)]
struct UserIds(Vec<i64>);

To remedy this, add #[sqlx(no_pg_array)], which disables the generation of the PgHasArrayType impl:

#[derive(sqlx::Type)]
#[sqlx(transparent, no_pg_array)]
struct UserIds(Vec<i64>);

See the documentation of Type for more details.

Required Methods§

Provided Methods§

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

§

impl PgHasArrayType for &str

§

impl PgHasArrayType for &[u8]

§

impl PgHasArrayType for Cow<'_, str>

§

impl PgHasArrayType for bool

§

impl PgHasArrayType for f32

§

impl PgHasArrayType for f64

§

impl PgHasArrayType for i8

§

impl PgHasArrayType for i16

§

impl PgHasArrayType for i32

§

impl PgHasArrayType for i64

§

impl PgHasArrayType for u8

§

impl PgHasArrayType for Box<str>

§

impl PgHasArrayType for Box<[u8]>

§

impl PgHasArrayType for String

§

impl PgHasArrayType for Vec<u8>

§

impl PgHasArrayType for NonZero<i16>

§

impl PgHasArrayType for NonZero<i32>

§

impl PgHasArrayType for NonZero<i64>

§

impl PgHasArrayType for Duration

§

impl PgHasArrayType for TimeDelta

Available on crate feature chrono only.
§

impl<T1> PgHasArrayType for (T1,)

§

impl<T1, T2> PgHasArrayType for (T1, T2)

§

impl<T1, T2, T3> PgHasArrayType for (T1, T2, T3)

§

impl<T1, T2, T3, T4> PgHasArrayType for (T1, T2, T3, T4)

§

impl<T1, T2, T3, T4, T5> PgHasArrayType for (T1, T2, T3, T4, T5)

§

impl<T1, T2, T3, T4, T5, T6> PgHasArrayType for (T1, T2, T3, T4, T5, T6)

§

impl<T1, T2, T3, T4, T5, T6, T7> PgHasArrayType for (T1, T2, T3, T4, T5, T6, T7)

§

impl<T1, T2, T3, T4, T5, T6, T7, T8> PgHasArrayType for (T1, T2, T3, T4, T5, T6, T7, T8)

§

impl<T1, T2, T3, T4, T5, T6, T7, T8, T9> PgHasArrayType for (T1, T2, T3, T4, T5, T6, T7, T8, T9)

§

impl<T> PgHasArrayType for Option<T>
where T: PgHasArrayType,

§

impl<T> PgHasArrayType for &T
where T: PgHasArrayType,

§

impl<const N: usize> PgHasArrayType for [u8; N]

Implementors§

§

impl PgHasArrayType for Value

§

impl PgHasArrayType for PgCube

§

impl PgHasArrayType for NaiveDate

§

impl PgHasArrayType for NaiveDateTime

§

impl PgHasArrayType for NaiveTime

§

impl PgHasArrayType for Decimal

§

impl PgHasArrayType for RawValue

§

impl PgHasArrayType for Uuid

§

impl PgHasArrayType for Oid

§

impl PgHasArrayType for PgBox

§

impl PgHasArrayType for PgCiText

§

impl PgHasArrayType for PgCircle

§

impl PgHasArrayType for PgHstore

§

impl PgHasArrayType for PgInterval

§

impl PgHasArrayType for PgLQuery

§

impl PgHasArrayType for PgLSeg

§

impl PgHasArrayType for PgLTree

§

impl PgHasArrayType for PgLine

§

impl PgHasArrayType for PgMoney

§

impl PgHasArrayType for PgPath

§

impl PgHasArrayType for PgPoint

§

impl PgHasArrayType for PgPolygon

§

impl PgHasArrayType for PgRange<i32>

§

impl PgHasArrayType for PgRange<i64>

§

impl PgHasArrayType for PgRange<NaiveDate>

Available on crate feature chrono only.
§

impl PgHasArrayType for PgRange<NaiveDateTime>

Available on crate feature chrono only.
§

impl PgHasArrayType for PgRange<Decimal>

Available on crate feature rust_decimal only.
§

impl<T> PgHasArrayType for Json<T>

§

impl<T> PgHasArrayType for Text<T>

§

impl<Time, Offset> PgHasArrayType for PgTimeTz<Time, Offset>

§

impl<Tz> PgHasArrayType for DateTime<Tz>
where Tz: TimeZone,

§

impl<Tz> PgHasArrayType for PgRange<DateTime<Tz>>
where Tz: TimeZone,

Available on crate feature chrono only.