Skip to content

Instantly share code, notes, and snippets.

@steveh
Created January 31, 2018 09:38
Show Gist options
  • Select an option

  • Save steveh/7c7145409a5eed6b698ee8b609b6d1fc to your computer and use it in GitHub Desktop.

Select an option

Save steveh/7c7145409a5eed6b698ee8b609b6d1fc to your computer and use it in GitHub Desktop.
PostgreSQL Type PostgreSQL Size Description Range Diesel Type Rust Type
Nullable Types nullable Nullable<T> Option<T>
Numeric Types
smallint, int2 2 bytes signed integer -32768 to +32767 SmallInt i16
integer, int, int4 4 bytes signed integer -2147483648 to +2147483647 Integer i32
bigint, int8 8 bytes signed integer -9223372036854775808 to +9223372036854775807 BigInt i64
numeric(p, s), decimal(p, s) 2 bytes per 4 digits + 3 to 8 bytes exact numeric of selectable precision 131072.16383 digits Numeric bigdecimal::BigDecimal
real, float4 4 bytes single precision floating-point number 6 digits precision Float f32
double precision, float8 8 bytes double precision floating-point number 15 digits precision Double f64
smallserial, serial2 2 bytes autoincrementing integer 1 to 32767 SmallInt i16
serial, serial4 4 bytes autoincrementing integer 1 to 2147483647 Integer i32
bigserial, serial8 8 bytes autoincrementing integer 1 to 9223372036854775807 BigInt i64
Monetary Types
money 8 bytes currency amount -92233720368547758.08 to +92233720368547758.07 Money Cents
Character Types
character varying(n), varchar(n) n+1 or n+4 bytes variable-length character string Text String, &str
character(n), char(n) n+1 or n+4 bytes fixed-length character string Text String, &str
text n+1 or n+4 bytes variable-length character string Text String, &str
Binary Data Types
bytea n+1 to n+4 bytes binary data ("byte array") Binary Vec<u8>, &u8
Date/Time Types
timestamp, timestamp(p) without time zone 8 bytes date and time of day 4713 BC to 294276 AD, 1 microsecond Timestamp chrono::NaiveDateTime
timestamptz, timestamp(p) with time zone 8 bytes date and time of day, with time zone 4713 BC to 294276 AD, 1 microsecond Timestamptz chrono::DateTime
date 4 bytes calendar date (year, month, day) 4713 BC to 5874897 AD, 1 day Date chrono::NaiveDate
time, time(p) without time zone 8 bytes time of day (no date) 00:00:00 to 24:00:00, 1 microsecond Time chrono::NaiveTime
timetz, time(p) with time zone 12 bytes time of day (no date), with time zone 00:00:00+1459 to 24:00:00-1459, 1 microsecond
interval(fields)(p) 16 bytes time span -178000000 years to 178000000 years, 1 microsecond Interval PgInterval
Boolean Type
boolean, bool 1 byte logical Boolean (true/false) Bool bool
Geometric Types
point (x,y) 16 bytes geometric point on a plane
line {A,B,C} 32 bytes infinite line on a plane
lseg ((x1,y1),(x2,y2)) 32 bytes finite line segment on a plane
box ((x1,y1),(x2,y2)) 32 bytes rectangular box on a plane
path ((x1,y1),...) 16+16n bytes closed geometric path on a plane
path [(x1,y1),...] 16+16n bytes open geometric path on a plane
polygon ((x1,y1),...) 40+16n bytes closed geometric path on a plane
circle <(x,y),r\> 24 bytes circle on a plane
Network Address Types
cidr 7 or 19 bytes IPv4 or IPv6 network address Cidr ipnetwork::IpNetwork
inet 7 or 19 bytes IPv4 or IPv6 host address Inet ipnetwork::IpNetwork
macaddr 6 bytes MAC address MacAddr [u8; 6]
macaddr8 8 bytes MAC address (EUI-64 format)
Enumerated Types
enum 4 bytes enumerated value (user-defined) String, enum
Bit String Types
bit(n) 1 byte per 8 bits + 5 or 8 bytes fixed-length bit string
bit varying(n), varbit 1 byte per 8 bits + 5 or 8 bytes variable-length bit string
Text Search Types
tsvector text search document TsVector
tsquery text search query TsQuery
UUID Type
uuid 16 bytes universally unique identifier Uuid uuid::Uuid
XML Type
xml XML data
JSON Types
json textual JSON data Json serde_json::Value
jsonb binary JSON data, decomposed Jsonb serde_json::Value
Arrays
t[] array of values Array<T> Vec<T>, Vec<Option<T>>, &[T], &[Option<T>]
Range Types
int4range range of integer Range<Integer> (Bound<i32>, Bound<i32>)
int8range range of bigint Range<BigInt> (Bound<i64>, Bound<i64>)
numrange range of numeric Range<Numeric> (Bound<bigdecimal::BigDecimal>, Bound<bigdecimal::BigDecimal>)
tsrange range of timestamp Range<Timestamp> (Bound<chrono::NaiveDateTime>, Bound<chrono::NaiveDateTime>)
tstzrange range of timestamptz Range<Timestamptz> (Bound<chrono::DateTime>, Bound<chrono::DateTime>)
daterange range of date Range<Date> (Bound<chrono::NaiveDate>, Bound<chrono::NaiveDate>)
@digizeph
Copy link
Copy Markdown

Thank you for this gist!

@vporton
Copy link
Copy Markdown

vporton commented Oct 16, 2021

I strongly wonder why BIT(n) requires plus 5-8 bytes (per row?)

@Corfucinas
Copy link
Copy Markdown

Good resource, very useful

@0xle0ne
Copy link
Copy Markdown

0xle0ne commented Jul 12, 2022

Super useful thx

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment