--- title: "UUID Type" id: datatype-uuid pg_version: "20devel" --- ## 8.12. UUID Type The data type `uuid` stores Universally Unique Identifiers (UUID) as defined by [RFC 9562](https://datatracker.ietf.org/doc/html/rfc9562), ISO/IEC 9834-8:2005, and related standards. (Some systems refer to this data type as a globally unique identifier, or GUID, instead.) This identifier is a 128-bit quantity that is generated by an algorithm chosen to make it very unlikely that the same identifier will be generated by anyone else in the known universe using the same algorithm. Therefore, for distributed systems, these identifiers provide a better uniqueness guarantee than sequence generators, which are only unique within a single database. RFC 9562 defines 8 different UUID versions. Each version has specific requirements for generating new UUID values, and each version provides distinct benefits and drawbacks. PostgreSQL provides native support for generating UUIDs using the UUIDv4 and UUIDv7 algorithms. Alternatively, UUID values can be generated outside of the database using any algorithm. The data type `uuid` can be used to store any UUID, regardless of the origin and the UUID version. UUIDs are compared lexicographically on their 128-bit value. For UUIDv7 values, which embed a Unix timestamp in the most significant bits, this ordering corresponds to chronological order, making them suitable for use with aggregate functions such as `min()` and `max()`. A UUID is written as a sequence of lower-case hexadecimal digits, in several groups separated by hyphens, specifically a group of 8 digits followed by three groups of 4 digits followed by a group of 12 digits, for a total of 32 digits representing the 128 bits. An example of a UUID in this standard form is: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 PostgreSQL also accepts the following alternative forms for input: use of upper-case digits, the standard format surrounded by braces, omitting some or all hyphens, adding a hyphen after any group of four digits. Examples are: A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11 {a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11} a0eebc999c0b4ef8bb6d6bb9bd380a11 a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11 {a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11} Output is always in the standard form. It is possible to cast `uuid` values to and from type `bytea`. This is useful for using functions such as `encode()` and `decode()` with UUID values. For example: encode('1ea3d64c-bc40-4cc3-84bb-6b11ee31e5c2'::uuid::bytea, 'base64') decode('HqPWTLxATMOEu2sR7jHlwg==', 'base64')::uuid See [Section 9.15](functions-uuid.md) for how to generate a UUID in PostgreSQL.