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 >) |
Created
January 31, 2018 09:38
-
-
Save steveh/7c7145409a5eed6b698ee8b609b6d1fc to your computer and use it in GitHub Desktop.
I strongly wonder why BIT(n)
requires plus 5-8 bytes (per row?)
Good resource, very useful
Super useful thx
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thank you for this gist!