close objects or locations with geospatial data. This is achieved without exhaustive matching of values. Index-only scans often allow the system to fetch data from indexes without ever having to access the main table. Block Range Indexes (BRIN). Schemas In PostgreSQL, a schema holds all objects, except for roles and tablespaces. Schemas effectively act like namespaces, allowing objects of the same name to co-exist in the same database. By default, newly created databases have a schema called public, but any further schemas can be added, and the public schema isn't mandatory. A setting determines the order in which PostgreSQL checks schemas for unqualified objects (those without a prefixed schema). By default, it is set to ( refers to the currently connected database user). This default can be set on a database or role level, but as it is a session parameter, it can be freely changed (even multiple times) during a client session, affecting that session only. Non-existent schemas listed in search_path are silently skipped during objects lookup. New objects are created in whichever valid schema (one that presently exists) appears first in the search_path. Data types A wide variety of native data types are supported, including: Boolean Arbitrary-precision numerics Character (text, varchar, char) Binary Date/time (timestamp/time with/without time zone, date, interval) Money Enum Bit strings Text search type Composite HStore, an extension enabled key-value store within PostgreSQL Arrays (variable-length and can be of any data type, including text and composite types) up to 1 GB in total storage size Geometric primitives IPv4 and IPv6 addresses Classless Inter-Domain Routing (CIDR) blocks and MAC addresses XML supporting XPath queries Universally unique identifier (UUID) JavaScript Object Notation (JSON), and a faster binary JSONB (not the same as BSON) In addition, users can create their own data types which can usually be made fully indexable via PostgreSQL's indexing infrastructures GiST, GIN, SP-GiST. Examples of these include the geographic information system (GIS) data types from the PostGIS project for PostgreSQL. There is also a data type called a domain, which is the same as any other data type but with optional constraints defined by the creator of that domain. This means any data entered into a column using the domain will have to conform to whichever constraints were defined as part of the domain. A data type that represents a range of data can be used which are called range types. These can be