From 3c701201a05d2c18edb6a82dbb061547d9d40067 Mon Sep 17 00:00:00 2001 From: Lev Kokotov Date: Mon, 29 Jun 2026 20:21:32 -0700 Subject: [PATCH 01/12] shard shard --- docs/features/sharding/.pages | 2 +- docs/features/sharding/basics.md | 12 +- .../sharding/cross-shard-queries/index.md | 2 +- docs/features/sharding/index.md | 45 ++-- docs/features/sharding/sharding-functions.md | 233 ++++++++++-------- docs/index.md | 2 +- 6 files changed, 166 insertions(+), 130 deletions(-) diff --git a/docs/features/sharding/.pages b/docs/features/sharding/.pages index 6c05145f..3ca0fc26 100644 --- a/docs/features/sharding/.pages +++ b/docs/features/sharding/.pages @@ -1,11 +1,11 @@ nav: - 'index.md' - 'basics.md' + - 'sharding-functions.md' - 'supported-queries.md' - 'query-routing.md' - 'manual-routing.md' - 'cross-shard-queries' - - 'sharding-functions.md' - '...' - 'resharding' - 'internals' diff --git a/docs/features/sharding/basics.md b/docs/features/sharding/basics.md index 866e1ee0..6bb3202c 100644 --- a/docs/features/sharding/basics.md +++ b/docs/features/sharding/basics.md @@ -7,32 +7,32 @@ Sharding a PostgreSQL database splits it, with all its tables and indices, betwe ## Terminology -Some terms and expressions used in the documentation may be new to some readers. They are defined below. +Some terms and expressions used in the documentation may be new to some readers. They are defined below: | Term | Definition | |------|------------| -| Shard | PostgreSQL database(s) that contains a portion of the entire dataset. | +| Shard | PostgreSQL database(s) that contains a portion of the entire dataset. In most deployments, that's an independent PostgreSQL server. | | Sharding function | A function that takes some data and computes a shard number for where this data should be placed. | | Shard number | A number between 0 and _N_ where _N_ is the total number of shards in the cluster. | | Primary | A database that serves write queries like `INSERT`, `UPDATE`, `DELETE`, etc. | | Replica | A database that has the same data as a primary and can only serve `SELECT` queries. | -### Shards +### Database shards Each shard is responsible for a subset of the total data in the database cluster. Each shard can have multiple replica databases and only one primary. The primary is responsible for serving writes, like creating and updating rows, while replica databases are responsible for serving read queries. -When we refer to "shards" in this documentation, we mean primary and replica databases collectively responsible for a subset of the database data. +When we refer to "shards" in this documentation, we mean primary and replica databases collectively responsible for a subset of the database data. PgDog can simulteneously manage sharding and load balancing queries, so a database shard can actually encompass a primary and replicas without leaking that abstraction to the application. ### Sharding function -A [sharding function](sharding-functions.md) is responsible for splitting data between shards. It's typically based on some kind of hash, divided by the total number of shards in the cluster, to obtain the shard number. The hash ensures that data is distributed uniformly between shards, no matter what that data is. +A [sharding function](sharding-functions.md) is responsible for splitting data between shards. It's typically based on some kind of hash, divided by the total number of shards in the cluster, to obtain the shard number. The hash ensures that data is distributed uniformly between shards, no matter what that data is, for example: ``` shard_number = hash(data) % num_shards ``` -Alternatively, a sharding function can map the sharding keys directly to a shard number. This is done when the number of keys is relatively small and they represent large collections of evenly distributed data. Examples include country codes for geographic data or tenant IDs for multitenant applications. +PgDog supports many different sharding functions, including a list-based and value-based function which can map the sharding keys directly to a shard number. This is done in situations where the number of keys is relatively small and they represent large collections of evenly distributed data, e.g., country codes for geographic data or tenant IDs for multitenant applications. ## Read more diff --git a/docs/features/sharding/cross-shard-queries/index.md b/docs/features/sharding/cross-shard-queries/index.md index e3fa5b4b..dfc8d3c7 100644 --- a/docs/features/sharding/cross-shard-queries/index.md +++ b/docs/features/sharding/cross-shard-queries/index.md @@ -2,7 +2,7 @@ icon: material/multicast --- -# Cross-shard queries overview +# Cross-shard queries If a client can't or doesn't specify a sharding key in the query, PgDog will send that query to all shards in parallel, and combine the results automatically. To the client, this looks like the query was executed by a single database. diff --git a/docs/features/sharding/index.md b/docs/features/sharding/index.md index 66522693..24352f99 100644 --- a/docs/features/sharding/index.md +++ b/docs/features/sharding/index.md @@ -2,45 +2,44 @@ icon: material/set-split --- -# Sharding Postgres +# Sharding PostgreSQL -Sharding splits a PostgreSQL database and all its tables and indices between multiple machines. Each machine runs its own, independent PostgreSQL server, while PgDog takes care of routing queries and moving data between hosts. +Sharding splits up a PostgreSQL database with all its tables and indices between multiple servers. Each machine runs its own, independent PostgreSQL server, while PgDog takes care of routing queries and moving data between databases. + +Applications are not be aware of sharding and should continue to work as if they were using regualar Postgres. PgDog's role is to make that possible. + +A lot of the features described in this section are stable, tested and are powering large, production databases. Others are still experimental and are marked accordingly. If you have any questions about how sharding works in PgDog, join our [Discord](https://discord.gg/CcBZkjSJdd). ## Intro to sharding +
+ How PgDog sharding works +

PgDog's sharding architecture

+
+ If you're not familiar with database sharding fundamentals, take a look at the [sharding basics](basics.md). Even if you're a seasoned database expert, it's good to have a refresher to confirm your understanding matches our implementation. -[**→ Sharding basics**](basics.md) +PgDog is somewhat similar in architecture to Vitess (sharding proxy for MySQL). Everything that has to do with sharding is handled internally and any abstraction that leaks to the client is usually considered a bug. You can report those [here](https://github.com/pgdogdev/pgdog/issues). ## Routing queries -PgDog is a query router. It can extract sharding hints directly from the SQL using the PostgreSQL parser and send queries to one or more shards. +PgDog is a query router. It can extract sharding hints directly from the SQL queries, using its built-in PostgreSQL parser, and send queries to one or more shards. Different types of queries which PgDog can currently handle are listed below: -| Query router feature | Description | +| Query | Description | |-|-| -| [**Direct-to-shard queries**](query-routing.md) | Automatic sharding key detection which sends the query to one shard only. | -| [**Cross-shard queries**](cross-shard-queries/index.md) | Queries that don't have a sharding key are sent to all shards with results collected and transformed, as if they came from one database. | -| [**Manual routing**](manual-routing.md) | Provide the sharding key in a query comment, or separately with a `SET` PostgreSQL command. | -| [**Sharded COPY**](cross-shard-queries/copy.md) | Data sent via `COPY` commands is automatically split between all shards, using the configured [sharding function](sharding-functions.md). | - -## Managing data - -PgDog implements the logical replication protocol used by Postgres to move data between nodes. +| [**Direct-to-shard queries**](query-routing.md) | Sharding key(s) are extracted directly from the query text and the query is sent to one shard only. | +| [**Cross-shard queries**](cross-shard-queries/index.md) | Queries which don't have a sharding key are sent to all shards, with the results collected and transformed, as if they are coming from one database. | +| [**Manually routed queries**](manual-routing.md) | Queries are routed explicitely using a query comment, or separately with a `SET` command, to a specific shard. | +| [**COPY commands**](cross-shard-queries/copy.md) | Data sent with the `COPY` command is automatically sharded between all databases. | ### Data consistency -To make sure data is atomically written in cross-shard transactions, PgDog supports PostgreSQL's prepared transactions and two-phase commit. - -[**→ Two-phase commit**](2pc.md) - -### Resharding +To make sure data is atomically written in cross-shard transactions, PgDog supports PostgreSQL's prepared transactions and [two-phase commit](2pc.md). -Resharding takes a database cluster with _N_ shards (where _N_ can be 1, for unsharded databases), and turns it into a cluster with _M_ databases. It uses logical replication to do this without downtime or impacting production operations. +## Managing data -[**→ Resharding**](resharding/index.md) +PgDog implements the logical replication protocol used by PostgreSQL and can move data between databases, while distributing individual rows between shards. This process is called resharding and you can read more about how PgDog implements it [here](resharding/index.md). ### Schema management -PgDog makes sure that the database schema is identical on all shards. It also has support for in-database primary key generation. - -[**→ Schema management**](schema_management/index.md) +PgDog makes sure that the database [schema](schema_management/index.md) is identical on all shards. It also has support for [in-database](sequences.md) and [in-proxy](unique-ids.md) primary key generation, so you can continue to use `BIGINT` (and `INTEGER`) primary keys in sharded PostgreSQL deployments. diff --git a/docs/features/sharding/sharding-functions.md b/docs/features/sharding/sharding-functions.md index 2999ab87..c3558b9c 100644 --- a/docs/features/sharding/sharding-functions.md +++ b/docs/features/sharding/sharding-functions.md @@ -3,111 +3,102 @@ icon: material/function --- # Sharding functions -The sharding function inside PgDog transforms column values in SQL queries to specific shard numbers, which are in turn used for routing queries to one or more databases in the [configuration](../../configuration/pgdog.toml/databases.md). +The sharding function determine how to route SQL queries to one or more shard numbers. They can use arbitrary input data to make this decision, and PgDog supports multiple sharding functions. Once a shard number is determined, PgDog will send the query to one or more databases configured in [`pgdog.toml`](../../configuration/pgdog.toml/databases.md). -## How it works +## Supported functions -The PgDog sharding function is based on PostgreSQL declarative partitions. This choice is intentional: it allows data to be sharded both inside PgDog and inside PostgreSQL, with the use of the same partition functions. +Currently, PgDog supports two sharding functions: -PgDog supports all three PostgreSQL partition functions and uses them for sharding data between nodes: +| Sharding function | Description | +|-|-| +| [Column-based](#column-based-sharding) | Uses one of the three supported Postgres partition functions and applies them to a specific column value, e.g., `tenant_id` to produce a shard number. | +| [Schema-based](#schema-based-sharding) | Maps different PostgreSQL schemas (e.g., `public`) to different shard numbers, allowing to physically separate different schemas. | + +## Column-based sharding + +The PgDog column sharding function is based on PostgreSQL declarative partitions. This choice is intentional: it allows data to be sharded both inside PgDog and inside PostgreSQL, with the use of the same partition functions. + +PgDog supports all three PostgreSQL partition functions: | Function | Description | |-|-| -| Hash | `PARTITION BY HASH` function, using a special hashing function implemented by both PgDog and Postgres. | +| Hash | `PARTITION BY HASH` function, using an internal hashing function implemented by both PgDog and PostgreSQL. | | List | `PARTITION BY LIST` function, used for splitting rows by an explicitly defined mapping of values to shard numbers. | -| Range| `PARTITION BY RANGE` function, similar to list sharding, except the mapping is defined with a bounded range. | - -The sharding functions are configurable in [`pgdog.toml`](../../configuration/pgdog.toml/sharded_tables.md) on a per-table and/or per-column basis. +| Range| `PARTITION BY RANGE` function, similar to list sharding, except the mapping is defined using a bounded range. | -!!! note "Multiple sharding functions" - Since sharding is configured for each table or column name, this allows storing tables - with different sharding functions in the same database. +The sharding functions are configurable in [`pgdog.toml`](../../configuration/pgdog.toml/sharded_tables.md) on a per-table and/or per-column basis, for example: - While this works for some [cross-shard](cross-shard-queries/index.md) queries, joins between tables using a different sharding function are not possible for [direct-to-shard](query-routing.md) queries. +=== "pgdog.toml" + ```toml + [[sharded_tables]] + database = "prod" + column = "tenant_id" + ``` +=== "Helm chart" + ```yaml + shardedTables: + - database: prod + column: tenant_id + ``` +By default, PgDog uses the hash-based function which can, theoretically, handle any data type. PgDog currently supports sharding on all integers, text (incl. `VARCHAR`), and UUID columns. By default, the sharded tables configuration uses integer, and you can specify a different data type as follows: -## Hash +=== "pgdog.toml" + ```toml + [[sharded_tables]] + database = "prod" + column = "tenant_id" + data_type = "uuid" # or "varchar" + ``` +=== "Helm chart" + ```yaml + shardedTables: + - database: prod + column: tenant_id + dataType: uuid # or varchar + ``` -The hash function evenly distributes data between all shards. It ingests bytes and returns a single 64-bit unsigned integer which we then modulo by the number of shards in the configuration. +The data type needs to be known at runtime so PgDog can safely parse and interpret queries without talking to the database. This also allows it to resolve the data type in ambiguous situations, e.g., when using [query comments](manual-routing.md#query-comment) for routing queries. -
-`hash(user_id) mod shards` -
+### Table/column matching +The sharded tables configuration uses greedy matching to find tables and columns. For example, if the configuration only specifies the `column`, the config will match all tables that have that column. This is especially useful when the database schema follows some kind of convention for naming columns (as all good schema designs should). -The hash function is used by default when configuring sharded tables in [`pgdog.toml`](../../configuration/pgdog.toml/sharded_tables.md): +To match a specific table/column combination, you can specify the table name as follows: === "pgdog.toml" ```toml [[sharded_tables]] database = "prod" - column = "user_id" - data_type = "bigint" + table = "users" + column = "company_id" ``` === "Helm chart" ```yaml shardedTables: - database: prod - column: user_id - dataType: bigint + table: users + column: company_id ``` -All queries referencing the `user_id` column will be automatically sent to the matching shard(s) and data in those tables will be split between all data nodes evenly. See below for a list of [supported](#supported-data-types) data types. Each can be specified as follows: - -=== "Integers" - !!! note "Integer types" - Different integer types are treated the same by the query router. If you're using `BIGINT`, `INTEGER` or `SMALLINT` as your sharding key, you can specify `bigint` in the configuration: - - === "pgdog.toml" - ```toml - [[sharded_tables]] - database = "prod" - column = "user_id" - data_type = "bigint" - ``` - === "Helm chart" - ```yaml - shardedTables: - - database: prod - column: user_id - dataType: bigint - ``` -=== "Text" - !!! note "Text types" - `VARCHAR`, `VARCHAR(n)`, and `TEXT` use the same encoding and are treated the same by the query router. For either one, you can specify `varchar` in the configuration: - === "pgdog.toml" - ```toml - [[sharded_tables]] - database = "prod" - column = "serial_number" - data_type = "varchar" - ``` - === "Helm chart" - ```yaml - shardedTables: - - database: prod - column: serial_number - dataType: varchar - ``` -=== "UUID" - !!! note "UUID types" - Only UUIDv4 is currently supported for sharding in the query router. - === "pgdog.toml" - ```toml - [[sharded_tables]] - database = "prod" - column = "unique_id" - data_type = "uuid" - ``` - === "Helm chart" - ```yaml - shardedTables: - - database: prod - column: unique_id - dataType: uuid - ``` - -## List +This makes PgDog's shrading configuration flexible and forgving of the realities of running PostreSQL in production. As long as you can find and configure all required sharding keys, query routing will work as expected. + +!!! note "Multiple sharding functions" + Since sharding is configured for each table or column name, this allows storing tables + with different sharding functions in the same database. + + While this works for some [cross-shard](cross-shard-queries/index.md) queries, joins between tables using a different sharding function are not going to work for [direct-to-shard](query-routing.md) queries. + + +### Why Postgres partitions + +We often get asked why we chose PostgreSQL partitions for sharding Postgres. There are indeed better hash functions, e.g., rendez-vous hashing, which minimizes the amount of data movement when changing the number of shards later on. + +Partition functions allow you to reshard data both inside PgDog and inside Postgres. For example, if you already have partitioned several tables (usually the biggest and most used ones) and you just want to move those to different PostgreSQL servers, you can do so with logical replication or even with just `pg_dump`. + +This makes the initial step for sharding your database that much easier and doesn't require you to use our (currently experimental) [resharding](resharding/index.md) implementation. + +### List-based sharding The list sharding function distributes data between shards according to a value <-> shard mapping. It's useful for low-cardinality sharding keys, like country codes or region names, or when you want to control how your data is distributed between the data nodes. The most common use case for this is [multitenant](../multi-tenancy.md) systems. @@ -132,14 +123,38 @@ To enable this sharding function on a table or column, you need to specify addit shard: 0 ``` -This example will route all queries with `user_id` equal to one, two, or three to shard zero. Unlike [hash](#hash) sharding, a value <-> shard mapping is required for _all_ values of the sharding key. If a value is used that doesn't have a mapping, the query will be sent to [all shards](cross-shard-queries/index.md). +This example will route all queries with `user_id` equal to `1`, `2`, and `3` to shard zero. Unlike [hash](#column-based-sharding) sharding, a value <-> shard mapping is usually required for _all_ values of the sharding key. If a value is used that doesn't have a mapping and a [fallback](#fallback-shard) routing configuration isn't specified, the query will be sent to [all shards](cross-shard-queries/index.md). !!! note "Required configuration" - The `[[sharded_tables]]` configuration entry is still required for list and range sharding. It specifies the data type of the column, which tells PgDog how to parse its value at runtime. + The `[[sharded_tables]]` configuration entry is still required for list-based sharding. It specifies the data type of the column, which tells PgDog how to parse its value at runtime. + +#### Fallback shard + +If you don't want to specify an exhaustive list of values, PgDog accepts a default (or fallback) mapping which will match all queries that are not otherwise configured using other `[[sharded_mapping]]` entries: + +=== "pgdog.toml" + ```toml + [[sharded_mappings]] + database = "prod" + column = "user_id" + kind = "default" + shard = 1 + ``` +=== "Helm chart" + ```yaml + shardedMappings: + - database: prod + column: user_id + kind: default + shard: 1 + ``` + +This is identical to `PARTITION OF [...] DEFAULT` behavior in PostgreSQL. + -## Range +### Range-based sharding -Sharding by range is similar to [list](#list) sharding, except instead of specifying the values explicitly, you can specify a bounding range. All values that are included in the range will be sent to the specified shard, for example: +Sharding by range is similar to [list](#list-based-sharding) sharding, except instead of specifying the values explicitly, you can specify a bounding range. All values that are included in the range will be sent to the specified shard, for example: === "pgdog.toml" ```toml @@ -162,34 +177,35 @@ Sharding by range is similar to [list](#list) sharding, except instead of specif shard: 0 ``` -This will route queries that refer to the `user_id` column, with values between 1 and 100 (exclusively), to shard zero. For open-ended ranges, you can specify either the `start` or the `end` value. The start value is included in the range, while the end value is excluded. +This example will route queries that refer to the `user_id` column, with values between 1 and 100 (exclusively), to shard zero. For open-ended ranges, you can specify either the `start` or the `end` value. The start value is included in the range, while the end value is excluded (same as PostgreSQL partitions). !!! note "Required configuration" - The `[[sharded_tables]]` configuration entry is still required for list and range sharding. It specifies the data type of the column, which tells PgDog how to parse its value at runtime. + The `[[sharded_tables]]` configuration entry is still required for range-based sharding. It specifies the data type of the column, which tells PgDog how to parse its value at runtime. ## Supported data types -PostgreSQL has dozens of data types. PgDog supports a subset of those for sharding purposes and they are listed below. - !!! note "Work in progress" This list will continue to get longer as the development of PgDog continues. Check back soon or [create an issue](https://github.com/pgdogdev/pgdog/issues) to request support for a data type you need. -| Data type | Hash | List | Range | -|-|-|-|-| -| `BIGINT` / `INTEGER` / `SMALLINT` | :material-check-circle-outline: | :material-check-circle-outline: | :material-check-circle-outline: | -| `VARCHAR` / `TEXT` | :material-check-circle-outline: | :material-check-circle-outline: | No | -| `UUID` | :material-check-circle-outline: | :material-check-circle-outline: | No | + +PostgreSQL has dozens of data types. PgDog supports a subset of those for sharding purposes and they are listed below: + +| Data type | Hash | List | Range | Configuration | +|-|-|-|-|-| +| `BIGINT` / `INTEGER` / `SMALLINT` | :material-check-circle-outline: | :material-check-circle-outline: | :material-check-circle-outline: | `"bigint"` | +| `VARCHAR` / `TEXT` | :material-check-circle-outline: | :material-check-circle-outline: | No | `"varchar"` | +| `UUID` | :material-check-circle-outline: | :material-check-circle-outline: | No | `"uuid"` | ## Schema-based sharding In addition to splitting the tables themselves, PgDog can shard Postgres databases by placing different schemas on different shards. This is useful for multi-tenant applications that have stricter separation between their users' data. -When enabled, PgDog will route queries that fully qualify tables based on their respective schema names. +When enabled, PgDog will route queries that fully qualify tables based on their respective schema names. Additionally, it can use the `search_path` session variable to infer the schema name for specified tables and use that for routing queries instead. ### Schema-to-shard mapping -Schemas are mapped to their shards in [pgdog.toml](../../configuration/pgdog.toml/sharded_schemas.md), for example: +Just like [column-based sharding](#column-based-sharding), schemas can be mapped to their shards with configuration in [`pgdog.toml`](../../configuration/pgdog.toml/sharded_schemas.md): === "pgdog.toml" ```toml @@ -222,11 +238,17 @@ SELECT * FROM customer_a.users WHERE email = $1; Since the `users` table is fully qualified as `customer_a.users`, the query will be routed to shard zero. -### DDL +Alternatively, the application can dynamically set the `search_path` session variable to the desired schema before executing the query, for example: + +```postgresql +SET search_path TO customer_a, public; +``` -Unlike other sharding functions, schema-based sharding will also route DDL (e.g., `CREATE TABLE`, `CREATE INDEX`, etc.) queries to their respective shard, as long as the entity name is fully qualified. +Schemas are evaluated in order specified in the statement, and the first schema that matches a configuration entry in `pgdog.toml` is chosen for routing all subsequent queries. -For example: +### DDL + +Unlike other sharding functions, schema-based sharding will also route DDL (e.g., `CREATE TABLE`, `CREATE INDEX`, etc.) queries to their respective shard, as long as the entity name is fully qualified or `search_path` is set: ```postgresql CREATE TABLE customer_b.users ( @@ -237,13 +259,24 @@ CREATE TABLE customer_b.users ( CREATE UNIQUE INDEX ON customer_b.users USING btree(email); ``` -Both of these DDL statements will be sent to shard one, because they explicitly refer to tables in schema `customer_b`, which is mapped to shard one. +Alternatively, you can: + +```postgresql +SET search_path TO customer_b, public; + +CREATE TABLE users ( + id BIGSERIAL PRIMARY KEY, + email VARCHAR NOT NULL +); +``` + +All of these DDL statements will be sent to shard one, because they explicitly refer to tables in schema `customer_b`, which is mapped to shard one in the configuration. ### Default routing If a schema isn't mapped to a shard number, PgDog will fallback to using other configured sharding functions. If none are set, the query will be sent to all shards. -To avoid this behavior and send all other queries to a particular shard, you can add a default schema mapping: +To avoid this behavior and send all other queries to a particular shard, you can add a default schema mapping, for example: === "pgdog.toml" ```toml @@ -260,6 +293,10 @@ To avoid this behavior and send all other queries to a particular shard, you can This will send all queries that don't specify a schema or use a schema without a mapping to shard zero. +### Why shard on schema + +Schema-based sharding is really easy to deploy and use, since it has very explicit separation between data and will almost always use [direct-to-shard](query-routing.md) queries to serve requests. That makes it 100% compatible with all PostgreSQL features, while allowing you to scale your database horizontally. + ## Read more {{ next_steps_links([ diff --git a/docs/index.md b/docs/index.md index 263fba30..ba1171a7 100644 --- a/docs/index.md +++ b/docs/index.md @@ -32,7 +32,7 @@ Unlike those proxies, PgDog handles features that usually force a pooler to pin PgDog is also multithreaded, so a single instance can serve many more clients while still relying on the same small number of Postgres connections. -You can read more about how the connection pooler works [here](features/connection-pooler/transaction-mode.md). +You can read more about how the connection pooler works [here](features/connection-pooler/index.md). ## Load balancer From bd715740328c2373884aee086861c94dc5a6530a Mon Sep 17 00:00:00 2001 From: Lev Kokotov Date: Mon, 29 Jun 2026 20:29:58 -0700 Subject: [PATCH 02/12] save --- docs/features/sharding/basics.md | 2 +- docs/features/sharding/index.md | 4 +- docs/features/sharding/sharding-functions.md | 51 ++++++++++---------- 3 files changed, 28 insertions(+), 29 deletions(-) diff --git a/docs/features/sharding/basics.md b/docs/features/sharding/basics.md index 6bb3202c..8199e393 100644 --- a/docs/features/sharding/basics.md +++ b/docs/features/sharding/basics.md @@ -22,7 +22,7 @@ Some terms and expressions used in the documentation may be new to some readers. Each shard is responsible for a subset of the total data in the database cluster. Each shard can have multiple replica databases and only one primary. The primary is responsible for serving writes, like creating and updating rows, while replica databases are responsible for serving read queries. -When we refer to "shards" in this documentation, we mean primary and replica databases collectively responsible for a subset of the database data. PgDog can simulteneously manage sharding and load balancing queries, so a database shard can actually encompass a primary and replicas without leaking that abstraction to the application. +When we refer to "shards" in this documentation, we mean primary and replica databases collectively responsible for a subset of the database data. PgDog can simultaneously manage sharding and load balancing queries, so a database shard can actually encompass a primary and replicas without leaking that abstraction to the application. ### Sharding function diff --git a/docs/features/sharding/index.md b/docs/features/sharding/index.md index 24352f99..85f7653a 100644 --- a/docs/features/sharding/index.md +++ b/docs/features/sharding/index.md @@ -6,7 +6,7 @@ icon: material/set-split Sharding splits up a PostgreSQL database with all its tables and indices between multiple servers. Each machine runs its own, independent PostgreSQL server, while PgDog takes care of routing queries and moving data between databases. -Applications are not be aware of sharding and should continue to work as if they were using regualar Postgres. PgDog's role is to make that possible. +Applications are not aware of sharding and should continue to work as if they were using regular Postgres. PgDog's role is to make that possible. A lot of the features described in this section are stable, tested and are powering large, production databases. Others are still experimental and are marked accordingly. If you have any questions about how sharding works in PgDog, join our [Discord](https://discord.gg/CcBZkjSJdd). @@ -29,7 +29,7 @@ PgDog is a query router. It can extract sharding hints directly from the SQL que |-|-| | [**Direct-to-shard queries**](query-routing.md) | Sharding key(s) are extracted directly from the query text and the query is sent to one shard only. | | [**Cross-shard queries**](cross-shard-queries/index.md) | Queries which don't have a sharding key are sent to all shards, with the results collected and transformed, as if they are coming from one database. | -| [**Manually routed queries**](manual-routing.md) | Queries are routed explicitely using a query comment, or separately with a `SET` command, to a specific shard. | +| [**Manually routed queries**](manual-routing.md) | Queries are routed explicitly using a query comment, or separately with a `SET` command, to a specific shard. | | [**COPY commands**](cross-shard-queries/copy.md) | Data sent with the `COPY` command is automatically sharded between all databases. | ### Data consistency diff --git a/docs/features/sharding/sharding-functions.md b/docs/features/sharding/sharding-functions.md index c3558b9c..801d0965 100644 --- a/docs/features/sharding/sharding-functions.md +++ b/docs/features/sharding/sharding-functions.md @@ -3,7 +3,7 @@ icon: material/function --- # Sharding functions -The sharding function determine how to route SQL queries to one or more shard numbers. They can use arbitrary input data to make this decision, and PgDog supports multiple sharding functions. Once a shard number is determined, PgDog will send the query to one or more databases configured in [`pgdog.toml`](../../configuration/pgdog.toml/databases.md). +The sharding functions determine how to route SQL queries to one or more shard numbers. They can use arbitrary input data to make this decision, and PgDog supports multiple sharding functions. Once a shard number is determined, PgDog will send the query to one or more databases configured in [`pgdog.toml`](../../configuration/pgdog.toml/databases.md). ## Supported functions @@ -81,7 +81,7 @@ To match a specific table/column combination, you can specify the table name as column: company_id ``` -This makes PgDog's shrading configuration flexible and forgving of the realities of running PostreSQL in production. As long as you can find and configure all required sharding keys, query routing will work as expected. +This makes PgDog's sharding configuration flexible and forgiving of the realities of running PostgreSQL in production. As long as you can find and configure all required sharding keys, query routing will work as expected. !!! note "Multiple sharding functions" Since sharding is configured for each table or column name, this allows storing tables @@ -127,31 +127,7 @@ This example will route all queries with `user_id` equal to `1`, `2`, and `3` to !!! note "Required configuration" The `[[sharded_tables]]` configuration entry is still required for list-based sharding. It specifies the data type of the column, which tells PgDog how to parse its value at runtime. - -#### Fallback shard - -If you don't want to specify an exhaustive list of values, PgDog accepts a default (or fallback) mapping which will match all queries that are not otherwise configured using other `[[sharded_mapping]]` entries: - -=== "pgdog.toml" - ```toml - [[sharded_mappings]] - database = "prod" - column = "user_id" - kind = "default" - shard = 1 - ``` -=== "Helm chart" - ```yaml - shardedMappings: - - database: prod - column: user_id - kind: default - shard: 1 - ``` - -This is identical to `PARTITION OF [...] DEFAULT` behavior in PostgreSQL. - ### Range-based sharding Sharding by range is similar to [list](#list-based-sharding) sharding, except instead of specifying the values explicitly, you can specify a bounding range. All values that are included in the range will be sent to the specified shard, for example: @@ -183,6 +159,29 @@ This example will route queries that refer to the `user_id` column, with values The `[[sharded_tables]]` configuration entry is still required for range-based sharding. It specifies the data type of the column, which tells PgDog how to parse its value at runtime. +### Fallback shard + +If you don't want to specify an exhaustive list of values, PgDog accepts a default (or fallback) mapping which will match all queries that are not otherwise configured using other `[[sharded_mapping]]` entries: + +=== "pgdog.toml" + ```toml + [[sharded_mappings]] + database = "prod" + column = "user_id" + kind = "default" + shard = 1 + ``` +=== "Helm chart" + ```yaml + shardedMappings: + - database: prod + column: user_id + kind: default + shard: 1 + ``` + +This is identical to `PARTITION OF [...] DEFAULT` behavior in PostgreSQL. + ## Supported data types !!! note "Work in progress" From 1f9b68dea2227478b4307fad205788b44362063b Mon Sep 17 00:00:00 2001 From: Lev Kokotov Date: Mon, 29 Jun 2026 20:34:02 -0700 Subject: [PATCH 03/12] save --- docs/features/sharding/basics.md | 4 ++-- docs/features/sharding/sharding-functions.md | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/features/sharding/basics.md b/docs/features/sharding/basics.md index 8199e393..fe89e4c9 100644 --- a/docs/features/sharding/basics.md +++ b/docs/features/sharding/basics.md @@ -37,6 +37,6 @@ PgDog supports many different sharding functions, including a list-based and val ## Read more {{ next_steps_links([ - ("Sharding functions", "sharding-functions.md", "Control how rows are distributed across shards."), - ("Direct-to-shard queries", "query-routing.md", "Route queries directly to the correct shard."), + ("Sharding functions", "sharding-functions.md", "Control how rows or tables are distributed across shards."), + ("Direct-to-shard queries", "query-routing.md", "Route queries directly to the right shard without application changes."), ]) }} diff --git a/docs/features/sharding/sharding-functions.md b/docs/features/sharding/sharding-functions.md index 801d0965..7973d3c3 100644 --- a/docs/features/sharding/sharding-functions.md +++ b/docs/features/sharding/sharding-functions.md @@ -41,7 +41,9 @@ The sharding functions are configurable in [`pgdog.toml`](../../configuration/pg column: tenant_id ``` -By default, PgDog uses the hash-based function which can, theoretically, handle any data type. PgDog currently supports sharding on all integers, text (incl. `VARCHAR`), and UUID columns. By default, the sharded tables configuration uses integer, and you can specify a different data type as follows: +By default, PgDog uses the hash-based function which distributes data evenly, on average, between all shards. PgDog currently supports sharding on all integers (incl. `BIGINT`, `INTEGER`, and `SMALLINT`), text (incl. `VARCHAR`), and UUID columns. + +By default, the sharded tables configuration uses the integer data type, but you can specify a different one as follows: === "pgdog.toml" ```toml From c22419053ff9544793ea4fcdab7084dbbb374a20 Mon Sep 17 00:00:00 2001 From: Lev Kokotov Date: Mon, 29 Jun 2026 21:08:05 -0700 Subject: [PATCH 04/12] woo --- docs/features/sharding/.pages | 2 +- docs/features/sharding/query-routing.md | 88 +++++++++++++------ docs/features/sharding/sharding-functions.md | 2 +- docs/images/fk.png | Bin 127807 -> 77192 bytes docs/images/intro.png | Bin 88167 -> 62838 bytes 5 files changed, 63 insertions(+), 29 deletions(-) diff --git a/docs/features/sharding/.pages b/docs/features/sharding/.pages index 3ca0fc26..661acc98 100644 --- a/docs/features/sharding/.pages +++ b/docs/features/sharding/.pages @@ -2,8 +2,8 @@ nav: - 'index.md' - 'basics.md' - 'sharding-functions.md' - - 'supported-queries.md' - 'query-routing.md' + - 'supported-queries.md' - 'manual-routing.md' - 'cross-shard-queries' - '...' diff --git a/docs/features/sharding/query-routing.md b/docs/features/sharding/query-routing.md index 2bb0dad6..8f07715b 100644 --- a/docs/features/sharding/query-routing.md +++ b/docs/features/sharding/query-routing.md @@ -5,14 +5,15 @@ icon: material/call-split PgDog has a powerful parser that can extract sharding hints directly from SQL queries. Queries that refer to a column in one of the [sharded tables](../../configuration/pgdog.toml/sharded_tables.md) are sent directly to the corresponding database in the [configuration](../../configuration/pgdog.toml/databases.md). -Direct-to-shard queries are foundational to horizontal database scaling. The more queries can be routed to just one database, the more requests can be served by the entire cluster. +Direct-to-shard queries are foundational to horizontal database scaling. The more queries can be routed to just one database, the more requests can be served by the entire sharded database cluster. ## How it works -PgDog is using the [pg_query](https://docs.rs/pg_query) library, which provides direct access to the native PostgreSQL parser. This allows PgDog to read and understand **100%** of valid SQL queries and commands. +Under the hood, PgDog is using the [pg_query](https://docs.rs/pg_query) library, which provides direct access to the native PostgreSQL parser. This allows PgDog to read and understand all valid SQL queries and commands.
- How PgDog works + How direct-to-shard queries work +

Direct-to-shard queries go to one shard at a time.

PgDog is deployed as a proxy between Postgres shards and the application and takes care of routing queries between them. Each SQL command is different and is handled differently by our query router, as documented below. @@ -31,6 +32,12 @@ WHERE Both regular queries and [prepared statements](../connection-pooler/prepared-statements.md) are supported. So if your database driver is using placeholders instead of actual values, PgDog will extract the sharding key value from the extended protocol messages. +The sharding key doesn't have to appear in the top-level statement: PgDog's parser will recurse into subqueries and CTEs, if any, and will find all matching filters, for example: + +```postgresql +SELECT * FROM (SELECT * FROM users WHERE tenant_id = $1 /* sharding key */) t; +``` + ### Supported syntax The `SELECT` query can express complex filtering logic and not all of it is currently supported. The following filters in the `WHERE` will work: @@ -43,10 +50,10 @@ The `SELECT` query can express complex filtering logic and not all of it is curr All other variations will be ignored and the query will be sent to [all shards](cross-shard-queries/index.md). !!! note "Query router improvements" - This is an area of constant improvement. Check back here for updates or [create an issue](https://github.com/pgdogdev/pgdog/issues/new) to request - support for a particular filter you're using. + This is an area of constant improvement. Check back here for updates or [create an issue](https://github.com/pgdogdev/pgdog/issues/) to request + support for a particular filter or query you are using. -If the query has multiple sharding key filters, all of them will be extracted and converged to a set of unique shard numbers. +If the query has multiple sharding keys, all of them will be extracted and converged to a set of unique shard numbers. For example, when filtering by a list of values, e.g., `WHERE user_id IN ($1, $2, $3)`, if all of them map to a single shard, the query will be sent to that shard only. If they map to two or more shards, it will be sent to all corresponding shards [concurrently](cross-shard-queries/index.md). @@ -58,13 +65,11 @@ Insert queries are routed using the values in the `VALUES` clause, for example: INSERT INTO payments (user_id, amount) VALUES ($1, $2) RETURNING * ``` -If the query is inserting a row into a [sharded table](../../configuration/pgdog.toml/sharded_tables.md), the query router will extract the sharding key, and route the query to the corresponding shard. - -Just like for `SELECT` queries, both [prepared statements](../connection-pooler/prepared-statements.md) and regular queries are supported. +If the query is inserting a row into a [sharded table](../../configuration/pgdog.toml/sharded_tables.md), the query router will extract the sharding key, and route the query to the corresponding shard. Just like for [SELECT](#select) queries, both [prepared statements](../connection-pooler/prepared-statements.md) and regular queries are supported. ### Supported syntax -PgDog can automatically detect the sharding key in an `INSERT` statement, whether it specifies column names or not. It can also split multi-tuple inserts, by sending each tuple to their respective shard, for example: +PgDog can automatically detect the sharding key in an `INSERT` statement, whether it specifies column names or not. This works because PgDog fetches the table definitions at proxy startup and knows which columns a particular table contains. ```postgresql -- user_id is the sharding key ($1) @@ -73,41 +78,70 @@ INSERT INTO payments (user_id, amount) VALUES ($1, $2); -- user_id is automatically detected as parameter $1 -- using schema inference INSERT INTO payments VALUES ($1, $2); - --- Statement is rewritten into two inserts, and each is sent --- to different shards -INSERT INTO payments VALUES ($1, $2), ($3, $4); ``` -## UPDATE and DELETE +If an `INSERT` statement contains multiple tuples, PgDog is able to rewrite it into individual, separate statements and send them, concurrently, to their respective shards. This feature is still experimental and **disabled** by default. You can enable it in [`pgdog.toml`](../../configuration/pgdog.toml/rewrite.md): + +=== "pgdog.toml" + ```toml + [rewrite] + split_inserts = "rewrite" + ``` +=== "Helm chart" + ```yaml + rewrite: + splitInserts: rewrite + ``` -Both `UPDATE` and `DELETE` queries work identically to [`SELECT`](#select) queries. The query router looks inside the `WHERE` clause for sharding keys, and routes the query to the corresponding shard. +Once enabled, PgDog will transform multi-tuple queries automatically, for example: -If no `WHERE` clause is present, or it's filtering on a column not used for sharding, the query is sent to all shards [concurrently](cross-shard-queries/index.md), for example: +=== "Original statement" + ```postgresql + INSERT INTO payments VALUES ($1, $2), ($3, $4); + ``` +=== "Rewritten statements" + ```postgresql + -- Statement is rewritten into two, and each is sent to a different shard. + INSERT INTO payments VALUES ($1, $2); + INSERT INTO payments VALUES ($1, $2); + ``` + +### Subqueries and CTEs + +!!! warning "Not supported yet" + Subqueries and CTEs are not currently supported for sharded `INSERT` statements. + +Currently, subqueries fetching data from _other_ shards are not supported in `INSERT` statements. For example, the following pattern _will not_, currently, work with PgDog: ```postgresql -UPDATE users SET banned = true; +INSERT INTO users (tenant_id, email) VALUES ($1, (SELECT email FROM signups LIMIT 1)); ``` - +```postgresql +UPDATE users SET banned = true WHERE created_at <= NOW(); -- Not a sharding key. +UPDATE users SET banned = true; -- Missing WHERE clause. +``` ## Foreign keys While it's best to choose a sharding column present in all tables, it is sometimes not desirable or possible to do so. For example, it's redundant to store a foreign key in a table that has a transitive relationship to another table:
- How PgDog works + How foreign keys work +

Transitive foreign key relationships require special handling.

In this example, the `order_items` table has a foreign key to `orders`, which in turn refers to `users`. This makes `order_items` related to `users` as well, but it doesn't need a foreign key to that table. However, this also means that table doesn't have a sharding key. @@ -118,13 +152,13 @@ To make querying the `order_items` table in a sharded database possible, the fol |-|-| | Add sharding key column | Add the sharding key column to the table and backfill it with corresponding values. | | [Manual routing](manual-routing.md) | Provide sharding hints to the query router via SQL comments or `SET` commands. | -| Use joins | For `SELECT` queries only, refer to the table as part of a join to a table that has the sharding key column. All other queries would need to use [manual routing](manual-routing.md).| +| Use joins | For [SELECT](#select) queries only, refer to the table as part of a join to a table that has the sharding key column. All other queries would need to use [manual routing](manual-routing.md).| Adding the sharding key column is often best, because it makes writing queries a lot easier. The sharding key is usually a compact data type, like a `BIGINT` or a `UUID`, so it doesn't take up much space, and can be backfilled relatively quickly. If backfilling, make sure to do so in small batches, so as to reduce impact on database performance. ### Sharding configuration -If most or all of your tables have the sharding key and the column name is the same, you can add it to [pgdog.toml](../../configuration/pgdog.toml/sharded_tables.md) without specifying a table name, for example: +If most or all of your tables have the sharding key and the column name is the same, you can add it to [`pgdog.toml`](../../configuration/pgdog.toml/sharded_tables.md) without specifying a table name, for example: === "pgdog.toml" ```toml diff --git a/docs/features/sharding/sharding-functions.md b/docs/features/sharding/sharding-functions.md index 7973d3c3..2c8e4eb5 100644 --- a/docs/features/sharding/sharding-functions.md +++ b/docs/features/sharding/sharding-functions.md @@ -249,7 +249,7 @@ Schemas are evaluated in order specified in the statement, and the first schema ### DDL -Unlike other sharding functions, schema-based sharding will also route DDL (e.g., `CREATE TABLE`, `CREATE INDEX`, etc.) queries to their respective shard, as long as the entity name is fully qualified or `search_path` is set: +Unlike column-based sharding functions, schema-based sharding will also route DDL (e.g., `CREATE TABLE`, `CREATE INDEX`, etc.) queries to their respective shard, as long as the entity name is fully qualified or `search_path` is set: ```postgresql CREATE TABLE customer_b.users ( diff --git a/docs/images/fk.png b/docs/images/fk.png index ca95948163fa9b85f3b80a21e6477032dceca3eb..083b965605394f1455340fbe5bd7afcde0d8a06c 100644 GIT binary patch literal 77192 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

=nV`Fw6WcOyB4MAKO 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

VH(q!m-c7I}0AMD*BKzCoiVuc51Nl?>>KBdTcz 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

$Q8=57a_Yzi&q7&{okSl2F+@;Zw=hQ>hmhwLn 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 H>%zYQuZPDB literal 127807 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 z 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 To>`Xn_9g`)ZEs=O8o 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 From 984e949b09acd7796be7700887ba8fe0b74d2b49 Mon Sep 17 00:00:00 2001 From: Lev Kokotov Date: Tue, 30 Jun 2026 10:34:17 -0700 Subject: [PATCH 05/12] phrasing! boom! --- docs/features/sharding/query-routing.md | 6 ++- docs/features/sharding/sharding-functions.md | 44 ++++++++++---------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/docs/features/sharding/query-routing.md b/docs/features/sharding/query-routing.md index 8f07715b..38250997 100644 --- a/docs/features/sharding/query-routing.md +++ b/docs/features/sharding/query-routing.md @@ -122,7 +122,7 @@ This is because PgDog needs to split up the execution of these statements and ex ## UPDATE and DELETE -Both `UPDATE` and `DELETE` queries work similarly to [SELECT](#select) queries. The query router looks inside the `WHERE` clause for sharding keys, and routes the query to the corresponding shard, for example: +Both UPDATE and DELETE queries work similarly to [SELECT](#select) queries. The query router looks inside the `WHERE` clause for sharding keys, and routes the query to the corresponding shard, for example: ```postgresql UPDATE users SET email = $1 WHERE tenant_id = $2 AND id = $3; @@ -135,6 +135,10 @@ UPDATE users SET banned = true WHERE created_at <= NOW(); -- Not a sharding key. UPDATE users SET banned = true; -- Missing WHERE clause. ``` +### Sharding key updates + +Unlike Citus, PgDog supports mutating a sharding key column with `UPDATE` statements. Under the hood, it will move the row between shards, deleting it from the original shard and inserting it into the new one. See [sharding key updates](cross-shard-queries/update.md#sharding-key-updates) for more details. + ## Foreign keys While it's best to choose a sharding column present in all tables, it is sometimes not desirable or possible to do so. For example, it's redundant to store a foreign key in a table that has a transitive relationship to another table: diff --git a/docs/features/sharding/sharding-functions.md b/docs/features/sharding/sharding-functions.md index 2c8e4eb5..98d8c241 100644 --- a/docs/features/sharding/sharding-functions.md +++ b/docs/features/sharding/sharding-functions.md @@ -7,16 +7,16 @@ The sharding functions determine how to route SQL queries to one or more shard n ## Supported functions -Currently, PgDog supports two sharding functions: +Currently, PgDog supports two kinds of sharding function: | Sharding function | Description | |-|-| | [Column-based](#column-based-sharding) | Uses one of the three supported Postgres partition functions and applies them to a specific column value, e.g., `tenant_id` to produce a shard number. | -| [Schema-based](#schema-based-sharding) | Maps different PostgreSQL schemas (e.g., `public`) to different shard numbers, allowing to physically separate different schemas. | +| [Schema-based](#schema-based-sharding) | Maps different PostgreSQL schemas (e.g., `public`) to different shard numbers, allowing you to physically separate different schemas. | ## Column-based sharding -The PgDog column sharding function is based on PostgreSQL declarative partitions. This choice is intentional: it allows data to be sharded both inside PgDog and inside PostgreSQL, with the use of the same partition functions. +The PgDog column sharding function is based on PostgreSQL declarative partitions. This choice is intentional: it allows data to be sharded both inside PgDog and inside PostgreSQL, using the same partition functions. PgDog supports all three PostgreSQL partition functions: @@ -24,7 +24,7 @@ PgDog supports all three PostgreSQL partition functions: |-|-| | Hash | `PARTITION BY HASH` function, using an internal hashing function implemented by both PgDog and PostgreSQL. | | List | `PARTITION BY LIST` function, used for splitting rows by an explicitly defined mapping of values to shard numbers. | -| Range| `PARTITION BY RANGE` function, similar to list sharding, except the mapping is defined using a bounded range. | +| Range | `PARTITION BY RANGE` function, similar to list sharding, except the mapping is defined using a bounded range. | The sharding functions are configurable in [`pgdog.toml`](../../configuration/pgdog.toml/sharded_tables.md) on a per-table and/or per-column basis, for example: @@ -41,7 +41,7 @@ The sharding functions are configurable in [`pgdog.toml`](../../configuration/pg column: tenant_id ``` -By default, PgDog uses the hash-based function which distributes data evenly, on average, between all shards. PgDog currently supports sharding on all integers (incl. `BIGINT`, `INTEGER`, and `SMALLINT`), text (incl. `VARCHAR`), and UUID columns. +By default, PgDog uses the hash-based function, which distributes data evenly, on average, between all shards. PgDog currently supports sharding on all integers (including `BIGINT`, `INTEGER`, and `SMALLINT`), text (including `VARCHAR`), and UUID columns. By default, the sharded tables configuration uses the integer data type, but you can specify a different one as follows: @@ -64,7 +64,7 @@ The data type needs to be known at runtime so PgDog can safely parse and interpr ### Table/column matching -The sharded tables configuration uses greedy matching to find tables and columns. For example, if the configuration only specifies the `column`, the config will match all tables that have that column. This is especially useful when the database schema follows some kind of convention for naming columns (as all good schema designs should). +The sharded tables configuration uses greedy matching to find tables and columns. For example, if the configuration only specifies the `column`, the config will match all tables that have that column. This is especially useful when the database schema follows a convention for naming columns. To match a specific table/column combination, you can specify the table name as follows: @@ -86,23 +86,23 @@ To match a specific table/column combination, you can specify the table name as This makes PgDog's sharding configuration flexible and forgiving of the realities of running PostgreSQL in production. As long as you can find and configure all required sharding keys, query routing will work as expected. !!! note "Multiple sharding functions" - Since sharding is configured for each table or column name, this allows storing tables + Since sharding is configured for each table or column name, this allows you to store tables with different sharding functions in the same database. - While this works for some [cross-shard](cross-shard-queries/index.md) queries, joins between tables using a different sharding function are not going to work for [direct-to-shard](query-routing.md) queries. + While this works for some [cross-shard](cross-shard-queries/index.md) queries, joins between tables using different sharding functions are not going to work for [direct-to-shard](query-routing.md) queries. ### Why Postgres partitions -We often get asked why we chose PostgreSQL partitions for sharding Postgres. There are indeed better hash functions, e.g., rendez-vous hashing, which minimizes the amount of data movement when changing the number of shards later on. +We often get asked why we chose PostgreSQL partitions for sharding Postgres. There are indeed better hash functions, e.g., rendezvous hashing, which minimizes the amount of data movement needed when changing the number of shards later on. -Partition functions allow you to reshard data both inside PgDog and inside Postgres. For example, if you already have partitioned several tables (usually the biggest and most used ones) and you just want to move those to different PostgreSQL servers, you can do so with logical replication or even with just `pg_dump`. +Partition functions allow you to reshard data both inside PgDog and inside Postgres. For example, if you already have partitioned several tables (usually the biggest and most heavily used ones) and you just want to move those to different PostgreSQL servers, you can do so with logical replication, or even with `COPY`. This makes the initial step for sharding your database that much easier and doesn't require you to use our (currently experimental) [resharding](resharding/index.md) implementation. ### List-based sharding -The list sharding function distributes data between shards according to a value <-> shard mapping. It's useful for low-cardinality sharding keys, like country codes or region names, or when you want to control how your data is distributed between the data nodes. The most common use case for this is [multitenant](../multi-tenancy.md) systems. +The list sharding function distributes data between shards according to a value <-> shard mapping. It's useful for low-cardinality sharding keys, such as country codes or region names, or when you want to control how your data is distributed between the data nodes. The most common use case for this is [multitenant](../multi-tenancy.md) systems. To enable this sharding function on a table or column, you need to specify additional value <-> shard mappings in [`pgdog.toml`](../../configuration/pgdog.toml/sharded_tables.md), for example: @@ -129,10 +129,10 @@ This example will route all queries with `user_id` equal to `1`, `2`, and `3` to !!! note "Required configuration" The `[[sharded_tables]]` configuration entry is still required for list-based sharding. It specifies the data type of the column, which tells PgDog how to parse its value at runtime. - + ### Range-based sharding -Sharding by range is similar to [list](#list-based-sharding) sharding, except instead of specifying the values explicitly, you can specify a bounding range. All values that are included in the range will be sent to the specified shard, for example: +Sharding by range is similar to [list](#list-based-sharding) sharding, except instead of specifying the values explicitly, you can specify a bounded range. All values included in the range will be sent to the specified shard, for example: === "pgdog.toml" ```toml @@ -155,7 +155,7 @@ Sharding by range is similar to [list](#list-based-sharding) sharding, except in shard: 0 ``` -This example will route queries that refer to the `user_id` column, with values between 1 and 100 (exclusively), to shard zero. For open-ended ranges, you can specify either the `start` or the `end` value. The start value is included in the range, while the end value is excluded (same as PostgreSQL partitions). +This example will route queries that refer to the `user_id` column with values between 1 and 100 (exclusively) to shard zero. For open-ended ranges, you can specify either the `start` or the `end` value. The start value is included in the range, while the end value is excluded (same as PostgreSQL partitions). !!! note "Required configuration" The `[[sharded_tables]]` configuration entry is still required for range-based sharding. It specifies the data type of the column, which tells PgDog how to parse its value at runtime. @@ -190,7 +190,7 @@ This is identical to `PARTITION OF [...] DEFAULT` behavior in PostgreSQL. This list will continue to get longer as the development of PgDog continues. Check back soon or [create an issue](https://github.com/pgdogdev/pgdog/issues) to request support for a data type you need. -PostgreSQL has dozens of data types. PgDog supports a subset of those for sharding purposes and they are listed below: +PostgreSQL has dozens of data types. PgDog supports a subset of those for sharding purposes, and they are listed below: | Data type | Hash | List | Range | Configuration | |-|-|-|-|-| @@ -202,7 +202,7 @@ PostgreSQL has dozens of data types. PgDog supports a subset of those for shardi In addition to splitting the tables themselves, PgDog can shard Postgres databases by placing different schemas on different shards. This is useful for multi-tenant applications that have stricter separation between their users' data. -When enabled, PgDog will route queries that fully qualify tables based on their respective schema names. Additionally, it can use the `search_path` session variable to infer the schema name for specified tables and use that for routing queries instead. +When enabled, PgDog will route queries that fully qualify tables with their schema names. Additionally, it can use the `search_path` session variable to infer the schema name for specified tables and use that for routing queries instead. ### Schema-to-shard mapping @@ -231,7 +231,7 @@ Just like [column-based sharding](#column-based-sharding), schemas can be mapped shard: 1 ``` -Queries that include the schema name in the tables they are referring to can be routed to the right shard. For example: +Queries that include the schema name in the tables they refer to can be routed to the right shard. For example: ```postgresql SELECT * FROM customer_a.users WHERE email = $1; @@ -245,11 +245,11 @@ Alternatively, the application can dynamically set the `search_path` session var SET search_path TO customer_a, public; ``` -Schemas are evaluated in order specified in the statement, and the first schema that matches a configuration entry in `pgdog.toml` is chosen for routing all subsequent queries. +Schemas are evaluated in the order specified in the statement, and the first schema that matches a configuration entry in `pgdog.toml` is chosen for routing all subsequent queries. ### DDL -Unlike column-based sharding functions, schema-based sharding will also route DDL (e.g., `CREATE TABLE`, `CREATE INDEX`, etc.) queries to their respective shard, as long as the entity name is fully qualified or `search_path` is set: +Unlike column-based sharding functions, schema-based sharding will also route DDL statements (e.g., `CREATE TABLE`, `CREATE INDEX`, etc.) to the appropriate shard, as long as the entity name is fully qualified or `search_path` is set: ```postgresql CREATE TABLE customer_b.users ( @@ -275,7 +275,7 @@ All of these DDL statements will be sent to shard one, because they explicitly r ### Default routing -If a schema isn't mapped to a shard number, PgDog will fallback to using other configured sharding functions. If none are set, the query will be sent to all shards. +If a schema isn't mapped to a shard number, PgDog will fall back to using other configured sharding functions. If none are set, the query will be sent to all shards. To avoid this behavior and send all other queries to a particular shard, you can add a default schema mapping, for example: @@ -296,11 +296,13 @@ This will send all queries that don't specify a schema or use a schema without a ### Why shard on schema -Schema-based sharding is really easy to deploy and use, since it has very explicit separation between data and will almost always use [direct-to-shard](query-routing.md) queries to serve requests. That makes it 100% compatible with all PostgreSQL features, while allowing you to scale your database horizontally. +Schema-based sharding is straightforward to deploy and use, since it has clear data separation and will almost always route requests as [direct-to-shard](query-routing.md) queries. That makes it 100% compatible with all PostgreSQL features, while allowing you to scale your database horizontally. ## Read more {{ next_steps_links([ + ("Direct-to-shard queries", "query-routing.md", "Route queries to a single shard whenever the sharding key is known."), + ("Cross-shard queries", "cross-shard-queries/index.md", "Run queries that span multiple shards."), ("COPY command", "cross-shard-queries/copy.md", "Bulk load data across shards with the COPY protocol."), ("Two-phase commit", "2pc.md", "Atomic transactions spanning multiple shards."), ]) }} From ef2d5dff317bdd75429f6e907ee16bd5776ec197 Mon Sep 17 00:00:00 2001 From: Lev Kokotov Date: Tue, 30 Jun 2026 12:05:17 -0700 Subject: [PATCH 06/12] save --- docs/features/sharding/.pages | 2 +- .../sharding/cross-shard-queries/index.md | 42 +++++------ docs/features/sharding/query-routing.md | 68 +++++++++--------- docs/images/cross-shard.png | Bin 81350 -> 67771 bytes 4 files changed, 56 insertions(+), 56 deletions(-) diff --git a/docs/features/sharding/.pages b/docs/features/sharding/.pages index 661acc98..7da81ec3 100644 --- a/docs/features/sharding/.pages +++ b/docs/features/sharding/.pages @@ -3,9 +3,9 @@ nav: - 'basics.md' - 'sharding-functions.md' - 'query-routing.md' + - 'cross-shard-queries' - 'supported-queries.md' - 'manual-routing.md' - - 'cross-shard-queries' - '...' - 'resharding' - 'internals' diff --git a/docs/features/sharding/cross-shard-queries/index.md b/docs/features/sharding/cross-shard-queries/index.md index dfc8d3c7..8306e5af 100644 --- a/docs/features/sharding/cross-shard-queries/index.md +++ b/docs/features/sharding/cross-shard-queries/index.md @@ -4,28 +4,32 @@ icon: material/multicast # Cross-shard queries -If a client can't or doesn't specify a sharding key in the query, PgDog will send that query to all shards in parallel, and combine the results automatically. To the client, this looks like the query was executed by a single database. +If a client can't or doesn't specify a sharding key in the query, PgDog will send that query to all shards concurrently and combine the results automatically. To the client, this looks like the query was executed by a single database. -

- Cross-shard queries +
+ Cross-shard queries +

Cross-shard queries are sent to all shards concurrently.

-## How it works +While this sounds simple on the surface, the actual implementation is anything but. It's described below, along with edge cases that are not yet supported. -PgDog understands the Postgres protocol and query language. It can connect to multiple database servers, send the query to all of them, and collect [`DataRow`](#under-the-hood) messages as they are returned by each connection. +## Cross-shard basics + +PgDog understands the Postgres protocol and SQL query language. It can connect to multiple database servers, send the query to all of them, and collect [rows](#under-the-hood) as they are returned by each connection. Once all servers finish executing the request, PgDog processes the result, performs any requested sorting, aggregation or row disambiguation, and sends the complete result back to the client, as if all rows came from one database server. Just like with [direct-to-shard](../query-routing.md) queries, each SQL command is handled differently, as documented below: -- [`SELECT`](select.md) -- [`INSERT`](insert.md) -- [`UPDATE`, `DELETE`](update.md) -- [`CREATE`, `ALTER`, `DROP`](ddl.md) (and other DDL statements) -- [`COPY`](copy.md) - +| Command | Summary | +|-|-| +| [SELECT](select.md) | PgDog implements a scatter/gather query engine to fetch rows from multiple shards concurrently. | +| [INSERT](insert.md) | Statements targeting [omnisharded](omnishards.md) are sent to all shards concurrently. Sharded tables with automatic [primary key](../unique-ids.md) generation are sent to one shard only. | +| [UPDATE and DELETE](update.md) | Statements are sent to all shards concurrently. Sharding key updates are partially supported. | +| [DDL statements, e.g., CREATE, ALTER, DROP](ddl.md) | DDL is sent to all shards concurrently, to make sure the schema is identical on all shards. | +| [COPY command](copy.md) | Rows sent via COPY are automatically distributed between all shards using the configured [sharding function](../sharding-functions.md). | -## Under the hood +### Under the hood PgDog implements the PostgreSQL wire protocol, which is well documented and stable. The messages sent by Postgres clients and servers contain all the necessary information about data types, column names and executed statements, which PgDog can use to present multi-database results as a single stream of data. @@ -39,7 +43,7 @@ The following protocol messages are especially relevant: The protocol has two formats for encoding tuples: text and binary. Text format is equivalent to calling the `to_string()` method on native types, while binary encoding sends them in network-byte order. For example: -=== "Data" +=== "Query" ```postgresql SELECT 1::bigint, 2::integer, 'three'::VARCHAR; ``` @@ -50,7 +54,7 @@ The protocol has two formats for encoding tuples: text and binary. Text format i | `INTEGER` | `"2"` | `00 00 00 02` | | `VARCHAR` | `"three"` | `three` | -Since PgDog needs to process rows before sending them to the client, we implemented parsing both formats for [most data types](select.md#supported-data-types). +Since PgDog needs to process rows before sending them to the client, we implemented parsing both formats for most [data types](select.md#supported-data-types). ## Disabling cross-shard queries @@ -72,10 +76,8 @@ When this setting is enabled and a query doesn't have a sharding key, instead of ## Read more {{ next_steps_links([ - ("Sharding functions", "../sharding-functions.md", "Control how rows are distributed across shards."), - ("Cross-shard SELECT", "select.md", "Query data across all shards with automatic merging."), - ("Cross-shard INSERT", "insert.md", "Insert rows that get routed to the correct shard."), - ("Cross-shard UPDATE and DELETE", "update.md", "Modify or remove rows in tables spanning multiple shards."), - ("DDL, e.g. CREATE TABLE", "ddl.md", "Run schema changes across all shards at once."), - ("COPY command", "copy.md", "Bulk load data across shards with the COPY protocol."), + ("SELECT", "select.md", "Query data from all shards."), + ("INSERT", "insert.md", "Create rows that get routed to the correct shard."), + ("UPDATE and DELETE", "update.md", "Modify or remove rows in tables spanning multiple shards."), + ("DDL", "ddl.md", "Make schema changes across all shards concurrently."), ]) }} diff --git a/docs/features/sharding/query-routing.md b/docs/features/sharding/query-routing.md index 38250997..022be690 100644 --- a/docs/features/sharding/query-routing.md +++ b/docs/features/sharding/query-routing.md @@ -5,22 +5,22 @@ icon: material/call-split PgDog has a powerful parser that can extract sharding hints directly from SQL queries. Queries that refer to a column in one of the [sharded tables](../../configuration/pgdog.toml/sharded_tables.md) are sent directly to the corresponding database in the [configuration](../../configuration/pgdog.toml/databases.md). -Direct-to-shard queries are foundational to horizontal database scaling. The more queries can be routed to just one database, the more requests can be served by the entire sharded database cluster. +Direct-to-shard queries are foundational to horizontal database scaling. The more queries that can be routed to just one database, the more requests the entire sharded database cluster can serve. ## How it works -Under the hood, PgDog is using the [pg_query](https://docs.rs/pg_query) library, which provides direct access to the native PostgreSQL parser. This allows PgDog to read and understand all valid SQL queries and commands. +Under the hood, PgDog uses the [pg_query](https://docs.rs/pg_query) library, which provides direct access to the native PostgreSQL parser. This allows PgDog to read and understand all valid SQL queries and commands.
How direct-to-shard queries work

Direct-to-shard queries go to one shard at a time.

-PgDog is deployed as a proxy between Postgres shards and the application and takes care of routing queries between them. Each SQL command is different and is handled differently by our query router, as documented below. +PgDog is deployed as a proxy between Postgres shards and the application, and takes care of routing queries between them. Each SQL command is different and is handled differently by the query router, as documented below. ## SELECT -To route `SELECT` queries, the query router looks for a sharding key in the `WHERE` clause. For example, if your database is sharded by the `user_id` column, all queries that filter rows by that column, either directly or through a foreign key, can be sent to a single shard: +To route SELECT queries, the query router looks for a sharding key in the `WHERE` clause. For example, if your database is sharded by the `user_id` column, all queries that filter rows by that column, either directly or through a foreign key, can be sent to a single shard: ```postgresql SELECT * FROM payments @@ -30,9 +30,9 @@ WHERE payments.user_id = $1; -- Sharding key. ``` -Both regular queries and [prepared statements](../connection-pooler/prepared-statements.md) are supported. So if your database driver is using placeholders instead of actual values, PgDog will extract the sharding key value from the extended protocol messages. +Both regular queries and [prepared statements](../connection-pooler/prepared-statements.md) are supported. If your database driver uses placeholders instead of actual values, PgDog will extract the sharding key value from the extended protocol messages. -The sharding key doesn't have to appear in the top-level statement: PgDog's parser will recurse into subqueries and CTEs, if any, and will find all matching filters, for example: +The sharding key doesn't have to appear in the top-level statement: PgDog's parser will recurse into subqueries and CTEs, if any, and find all matching filters. For example: ```postgresql SELECT * FROM (SELECT * FROM users WHERE tenant_id = $1 /* sharding key */) t; @@ -40,12 +40,12 @@ SELECT * FROM (SELECT * FROM users WHERE tenant_id = $1 /* sharding key */) t; ### Supported syntax -The `SELECT` query can express complex filtering logic and not all of it is currently supported. The following filters in the `WHERE` will work: +The `SELECT` query can express complex filtering logic, and not all of it is currently supported. The following filters in the `WHERE` clause will work: | Filter | Example | |-|-| -| Column equals to a value | `payments.user_id = $1` | -| Column matches against a list | `payments.user_id IN ($1, $2, $3)` +| Column equals a value | `payments.user_id = $1` | +| Column matches a list | `payments.user_id IN ($1, $2, $3)` | All other variations will be ignored and the query will be sent to [all shards](cross-shard-queries/index.md). @@ -53,9 +53,9 @@ All other variations will be ignored and the query will be sent to [all shards]( This is an area of constant improvement. Check back here for updates or [create an issue](https://github.com/pgdogdev/pgdog/issues/) to request support for a particular filter or query you are using. -If the query has multiple sharding keys, all of them will be extracted and converged to a set of unique shard numbers. +If the query has multiple sharding keys, all of them will be extracted and reduced to a set of unique shard numbers. -For example, when filtering by a list of values, e.g., `WHERE user_id IN ($1, $2, $3)`, if all of them map to a single shard, the query will be sent to that shard only. If they map to two or more shards, it will be sent to all corresponding shards [concurrently](cross-shard-queries/index.md). +For example, when filtering by a list of values, e.g., `WHERE user_id IN ($1, $2, $3)`, the query will be sent only to that shard if all values map to a single shard. If they map to two or more shards, it will be sent to all corresponding shards [concurrently](cross-shard-queries/index.md). ## INSERT @@ -65,22 +65,22 @@ Insert queries are routed using the values in the `VALUES` clause, for example: INSERT INTO payments (user_id, amount) VALUES ($1, $2) RETURNING * ``` -If the query is inserting a row into a [sharded table](../../configuration/pgdog.toml/sharded_tables.md), the query router will extract the sharding key, and route the query to the corresponding shard. Just like for [SELECT](#select) queries, both [prepared statements](../connection-pooler/prepared-statements.md) and regular queries are supported. +If the query is inserting a row into a [sharded table](../../configuration/pgdog.toml/sharded_tables.md), the query router will extract the sharding key and route the query to the corresponding shard. As with [SELECT](#select) queries, both [prepared statements](../connection-pooler/prepared-statements.md) and regular queries are supported. ### Supported syntax -PgDog can automatically detect the sharding key in an `INSERT` statement, whether it specifies column names or not. This works because PgDog fetches the table definitions at proxy startup and knows which columns a particular table contains. +PgDog can automatically detect the sharding key in an INSERT statement, whether it specifies column names or not. This works because PgDog fetches the table definitions at proxy startup and knows which columns a particular table contains: ```postgresql --- user_id is the sharding key ($1) +-- user_id is the sharding key ($1). INSERT INTO payments (user_id, amount) VALUES ($1, $2); -- user_id is automatically detected as parameter $1 --- using schema inference +-- using the table schema. INSERT INTO payments VALUES ($1, $2); ``` -If an `INSERT` statement contains multiple tuples, PgDog is able to rewrite it into individual, separate statements and send them, concurrently, to their respective shards. This feature is still experimental and **disabled** by default. You can enable it in [`pgdog.toml`](../../configuration/pgdog.toml/rewrite.md): +If an INSERT statement contains multiple tuples, PgDog can rewrite it into separate statements and send them concurrently to their respective shards. This feature is still experimental and **disabled** by default. You can enable it in [`pgdog.toml`](../../configuration/pgdog.toml/rewrite.md): === "pgdog.toml" ```toml @@ -93,7 +93,7 @@ If an `INSERT` statement contains multiple tuples, PgDog is able to rewrite it i splitInserts: rewrite ``` -Once enabled, PgDog will transform multi-tuple queries automatically, for example: +Once enabled, PgDog will transform multi-tuple queries automatically and send them to their respective shards, for example: === "Original statement" ```postgresql @@ -109,9 +109,9 @@ Once enabled, PgDog will transform multi-tuple queries automatically, for exampl ### Subqueries and CTEs !!! warning "Not supported yet" - Subqueries and CTEs are not currently supported for sharded `INSERT` statements. + Subqueries and CTEs are not presently supported for sharded INSERT statements. -Currently, subqueries fetching data from _other_ shards are not supported in `INSERT` statements. For example, the following pattern _will not_, currently, work with PgDog: +Currently, subqueries fetching data from _other_ shards are not supported in INSERT statements. For example, the following pattern _will not_ work with PgDog: ```postgresql INSERT INTO users (tenant_id, email) VALUES ($1, (SELECT email FROM signups LIMIT 1)); @@ -122,13 +122,13 @@ This is because PgDog needs to split up the execution of these statements and ex ## UPDATE and DELETE -Both UPDATE and DELETE queries work similarly to [SELECT](#select) queries. The query router looks inside the `WHERE` clause for sharding keys, and routes the query to the corresponding shard, for example: +Both UPDATE and DELETE queries work similarly to [SELECT](#select) queries. The query router looks inside the `WHERE` clause for sharding keys and routes the query to the corresponding shard, for example: ```postgresql -UPDATE users SET email = $1 WHERE tenant_id = $2 AND id = $3; +UPDATE users SET email = $1 WHERE tenant_id = $2 /* sharding key */ AND id = $3; ``` -If no `WHERE` clause is present, or it's filtering on a column not used for sharding, the query is sent to all shards [concurrently](cross-shard-queries/index.md), for example: +If no `WHERE` clause is present, or if it filters on a column not used for sharding, the query is sent to all shards [concurrently](cross-shard-queries/index.md), for example: ```postgresql UPDATE users SET banned = true WHERE created_at <= NOW(); -- Not a sharding key. @@ -137,28 +137,31 @@ UPDATE users SET banned = true; -- Missing WHERE clause. ### Sharding key updates -Unlike Citus, PgDog supports mutating a sharding key column with `UPDATE` statements. Under the hood, it will move the row between shards, deleting it from the original shard and inserting it into the new one. See [sharding key updates](cross-shard-queries/update.md#sharding-key-updates) for more details. +Unlike Citus, PgDog supports mutating a sharding key column with an UPDATE statement. Under the hood, it will move the row between shards, deleting it from the original shard and inserting it into the new one. See [sharding key updates](cross-shard-queries/update.md#sharding-key-updates) for more details. ## Foreign keys -While it's best to choose a sharding column present in all tables, it is sometimes not desirable or possible to do so. For example, it's redundant to store a foreign key in a table that has a transitive relationship to another table: +While it's best to choose a sharding column that's present in all tables, it is sometimes not desirable or possible to do so. For example, it's redundant to store a foreign key in a table that has a transitive relationship to another table:
How foreign keys work

Transitive foreign key relationships require special handling.

-In this example, the `order_items` table has a foreign key to `orders`, which in turn refers to `users`. This makes `order_items` related to `users` as well, but it doesn't need a foreign key to that table. However, this also means that table doesn't have a sharding key. +In this example, the `order_items` table has a foreign key to `orders`, which in turn refers to `users`. This makes `order_items` related to `users` as well, but it doesn't need a foreign key to that table. However, this also means the table doesn't have its own sharding key. To make querying the `order_items` table in a sharded database possible, the following workarounds are available: | Workaround | Description | |-|-| -| Add sharding key column | Add the sharding key column to the table and backfill it with corresponding values. | +| Add the sharding key column | Add the sharding key column to the table and backfill it with corresponding values. | | [Manual routing](manual-routing.md) | Provide sharding hints to the query router via SQL comments or `SET` commands. | -| Use joins | For [SELECT](#select) queries only, refer to the table as part of a join to a table that has the sharding key column. All other queries would need to use [manual routing](manual-routing.md).| +| Use joins | For [SELECT](#select) queries only, refer to the table as part of a join to another table that has the sharding key column. All other queries, e.g., INSERT, DELETE, etc., would need to use [manual routing](manual-routing.md).| -Adding the sharding key column is often best, because it makes writing queries a lot easier. The sharding key is usually a compact data type, like a `BIGINT` or a `UUID`, so it doesn't take up much space, and can be backfilled relatively quickly. If backfilling, make sure to do so in small batches, so as to reduce impact on database performance. +Adding the sharding key column is often the best choice because it makes writing queries much easier. The sharding key is usually a compact data type, like a `BIGINT` or a `UUID`, so it doesn't take up much space and can be backfilled relatively quickly. + +!!! note "Backfilling" + If backfilling the sharding key column, make sure to do so in small batches to reduce the impact on database performance. ### Sharding configuration @@ -169,20 +172,17 @@ If most or all of your tables have the sharding key and the column name is the s [[sharded_tables]] database = "prod" column = "user_id" - data_type = "bigint" ``` === "Helm chart" ```yaml shardedTables: - database: prod column: user_id - dataType: bigint ``` This will match all queries referring to all tables with the `user_id` column and route them to a shard accordingly. -For the table storing the actual data referred to by the foreign keys, you can make another -entry in the config, this time with the table name explicitly stated: +For the table storing the actual data referred to by the foreign keys, you can add another entry to the configuration, this time with the table name explicitly stated: === "pgdog.toml" ```toml @@ -190,7 +190,6 @@ entry in the config, this time with the table name explicitly stated: database = "prod" name = "users" column = "id" - data_type = "bigint" ``` === "Helm chart" ```yaml @@ -198,10 +197,9 @@ entry in the config, this time with the table name explicitly stated: - database: prod name: users column: id - dataType: bigint ``` -The latter will match queries referring to the `users.id` column only. Together with the `user_id` entry, all tables that contain the sharding key will be supported by the query router for direct-to-shard queries. +The second entry will match queries referring to the `users.id` column only. Together with the `user_id` entry, all tables that contain the sharding key will be supported by the query router for direct-to-shard queries. ## Read more diff --git a/docs/images/cross-shard.png b/docs/images/cross-shard.png index fa9cc07f9825158fc64cb9dd09abc5b475f138db..ff4d7f9a8ba3366209007218c933095e08d60d74 100644 GIT binary patch literal 67771 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
Cross-shard queries @@ -17,27 +17,27 @@ While this sounds simple on the surface, the actual implementation is anything b PgDog understands the Postgres protocol and SQL query language. It can connect to multiple database servers, send the query to all of them, and collect [rows](#under-the-hood) as they are returned by each connection. -Once all servers finish executing the request, PgDog processes the result, performs any requested sorting, aggregation or row disambiguation, and sends the complete result back to the client, as if all rows came from one database server. +Once all servers finish executing the request, PgDog processes the result, performs any requested sorting, aggregation, or row disambiguation, and sends the complete result back to the client, as if all rows came from one database server. Just like with [direct-to-shard](../query-routing.md) queries, each SQL command is handled differently, as documented below: -| Command | Summary | +| Commands | Summary | |-|-| | [SELECT](select.md) | PgDog implements a scatter/gather query engine to fetch rows from multiple shards concurrently. | -| [INSERT](insert.md) | Statements targeting [omnisharded](omnishards.md) are sent to all shards concurrently. Sharded tables with automatic [primary key](../unique-ids.md) generation are sent to one shard only. | +| [INSERT](insert.md) | Statements targeting [omnisharded](omnishards.md) tables are sent to all shards concurrently. Sharded tables with automatic [primary key](../unique-ids.md) generation are sent to one shard only. | | [UPDATE and DELETE](update.md) | Statements are sent to all shards concurrently. Sharding key updates are partially supported. | | [DDL statements, e.g., CREATE, ALTER, DROP](ddl.md) | DDL is sent to all shards concurrently, to make sure the schema is identical on all shards. | | [COPY command](copy.md) | Rows sent via COPY are automatically distributed between all shards using the configured [sharding function](../sharding-functions.md). | ### Under the hood -PgDog implements the PostgreSQL wire protocol, which is well documented and stable. The messages sent by Postgres clients and servers contain all the necessary information about data types, column names and executed statements, which PgDog can use to present multi-database results as a single stream of data. +PgDog implements the PostgreSQL wire protocol, which is well documented and stable. The messages sent by Postgres clients and servers contain all the necessary information about data types, column names, and executed statements, which PgDog can use to present multi-database results as a single stream of data. The following protocol messages are especially relevant: | Message | Description | |-|-| -| `DataRow` | Each `DataRow` message contains one tuple, for each row returned by the query. | +| `DataRow` | Each `DataRow` message contains one tuple for each row returned by the query. | | `RowDescription` | This message has the column names and data types returned by the query. | | `CommandComplete` | Indicates that the query has finished returning results. PgDog uses it to start sorting and aggregation. | @@ -54,7 +54,7 @@ The protocol has two formats for encoding tuples: text and binary. Text format i | `INTEGER` | `"2"` | `00 00 00 02` | | `VARCHAR` | `"three"` | `three` | -Since PgDog needs to process rows before sending them to the client, we implemented parsing both formats for most [data types](select.md#supported-data-types). +Since PgDog needs to process rows before sending them to the client, it implements parsing for both formats for most [data types](select.md#supported-data-types). ## Disabling cross-shard queries @@ -71,13 +71,13 @@ If you don't want PgDog to route cross-shard queries, e.g., because you have a [ crossShardDisabled: true ``` -When this setting is enabled and a query doesn't have a sharding key, instead of executing the query, PgDog will return an error and abort the transaction. +When this setting is enabled and a query doesn't have a sharding key, PgDog will return an error and abort the transaction instead of executing the query. ## Read more {{ next_steps_links([ - ("SELECT", "select.md", "Query data from all shards."), - ("INSERT", "insert.md", "Create rows that get routed to the correct shard."), - ("UPDATE and DELETE", "update.md", "Modify or remove rows in tables spanning multiple shards."), - ("DDL", "ddl.md", "Make schema changes across all shards concurrently."), + ("SELECT", "select.md", "Scatter/gather queries, sorting, aggregation, and supported SQL features."), + ("INSERT", "insert.md", "Omnisharded inserts, missing sharding keys, multiple tuples, and unique IDs."), + ("UPDATE and DELETE", "update.md", "Cross-shard writes, consistency, and sharding key updates."), + ("DDL", "ddl.md", "Cluster-wide schema changes, atomicity, and idempotent migrations."), ]) }} diff --git a/docs/features/sharding/cross-shard-queries/select.md b/docs/features/sharding/cross-shard-queries/select.md index 7b4bfe30..14e7c816 100644 --- a/docs/features/sharding/cross-shard-queries/select.md +++ b/docs/features/sharding/cross-shard-queries/select.md @@ -4,43 +4,44 @@ icon: material/table-search # Cross-shard SELECT -A cross-shard `SELECT` query doesn't have one or has several sharding keys, which requires it to be executed by all shards. PgDog can perform it in parallel, assembling the results from each shard automatically. This makes it a powerful scatter/gather engine, with data nodes powered by PostgreSQL. +A cross-shard SELECT query doesn't have one, or has multiple, sharding keys which requires it to be executed by multiple database shards. PgDog can perform this in parallel, assembling the results from each shard automatically. This makes it a powerful scatter/gather engine, with data nodes powered by PostgreSQL. ## How it works -When PgDog receives a `SELECT` query with no (or multiple) sharding keys, it connects to all databases and sends the query to all of them in parallel. +When PgDog receives a SELECT query with no (or multiple) sharding keys, it connects to all databases and sends the query to all of them in parallel. -If the result needs post-processing, e.g., to support [sorting](#sorting) or [aggregation](#aggregates), it will buffer the rows in memory and perform the necessary operations. Otherwise, PgDog will stream the rows directly to the client. +If the result needs post-processing, e.g., to support [sorting](#sorting) or [aggregation](#aggregates), it will buffer the rows in memory and perform the necessary operations. If not, it will stream the rows directly to the application. -!!! note "Predicate push-down" - PgDog pushes all filtering, sorting and aggregation statements to the database. If the query is correctly constructed, the shards will return very few rows, allowing searches of vast quantities of data without causing out-of-memory errors or latency issues in the proxy. +### Predicate push-down + +PgDog pushes all filtering, sorting and aggregation statements to the database. If the query is correctly constructed, the shards will return very few rows, allowing searches of vast quantities of data without causing out-of-memory errors or latency issues in the proxy. ## Supported features The SQL language allows for powerful data filtration and manipulation. While we aim to support most operations, currently, support for some cross-shard operations is limited as documented below: -| Operation | Supported | Limitations | +| Operation | Support | Limitations | |-|-|-| -| `SELECT` columns | :material-check: | None. | -| `ORDER BY` | :material-check: | Columns must be part of the returned tuples. See [sorting](#sorting). | -| `DISTINCT` / `DISTINCT BY`| :material-check: | Columns must be part of the returned tuples. | -| `GROUP BY` | :material-wrench: | Columns must be part of the returned tuples. See [aggregates](#aggregates). | -| `LIMIT` | :material-check: | None. | +| SELECT columns | :material-check: | | +| `ORDER BY` | Partial support | Columns must be part of the returned tuples. See [sorting](#sorting). | +| `DISTINCT` / `DISTINCT BY`| Partial support | Columns must be part of the returned tuples. | +| `GROUP BY` | Partial support | Columns must be part of the returned tuples. See [aggregates](#aggregates). | +| `LIMIT` | :material-check: | | | `OFFSET` | :material-check: | Rows are filtered in-memory, so paginating becomes linearly more expensive with the number of pages. | -| CTEs | :material-wrench: | CTE must refer to data located on the same shard. | -| Window functions | :material-close: | Not currently supported. | -| Subqueries | :material-wrench: | Subqueries must refer to data located on the same shard. | +| CTEs | Partial support | CTE queries must refer to data located on the same shard, e.g., same sharding keys or [omnisharded](../omnishards.md) tables. | +| Window functions | :material-close: | Not currently supported, but is on the roadmap. | +| Subqueries | Partial support | Just like CTEs, subqueries must refer to data located on the same shard, e.g., same sharding keys or [omnisharded](../omnishards.md) tables. | ## Sorting -If the query contains an `ORDER BY` clause, PgDog can sort the rows returned from all shards automatically. This works by buffering data returned from all servers and sorting it in memory. +If the query contains an `ORDER BY` clause, PgDog can sort the rows returned from all shards. This works by buffering data returned from all servers and sorting it in memory. Currently, two forms of the `ORDER BY` SQL syntax are supported: | Syntax | Example | Notes | |-|-|-| | Order by column name | `ORDER BY id, email` | The column must be present in the returned tuples. | -| Order by column position | `ORDER BY 1, 2` | The column is referenced by its position in the returned tuples. | +| Order by column position | `ORDER BY 1, 2` | | Sorting by multiple columns is supported, including opposing sorting directions, for example: @@ -51,9 +52,12 @@ ORDER BY created_at DESC ``` -Note that columns in the `ORDER BY` clause are retrieved from the table. PgDog cannot sort by columns it doesn't receive from the databases. +Note that columns in the `ORDER BY` clause are retrieved from the table. PgDog cannot sort by columns it doesn't receive from the database shards. + +### Sorting by functions -### Functions +!!! warning "Not currently supported" + PgDog doesn't currently support sorting rows by the result of a SQL function. PgDog currently doesn't support sorting results using a function, for example: @@ -61,7 +65,7 @@ PgDog currently doesn't support sorting results using a function, for example: SELECT email FROM users ORDER BY coalesce(email, '') ``` -To make this work, we need to implement all SQL functions inside PgDog. This is on the roadmap, but not currently a priority since the query can be easily rewritten to execute the function inside the database: +To make this work, we need to implement a lot of the SQL functions inside PgDog. This is on the roadmap, but not currently a top priority since the query can be easily rewritten to execute the function inside the database: ```postgresql SELECT @@ -85,7 +89,7 @@ FROM users ORDER BY ### ORMs -ORMs like SQLAlchemy or ActiveRecord, more often than not, will write queries that work with PgDog out of the box. This is because they tend to fetch entire rows and use fully-qualified names in all parts of the statement, including the `ORDER BY` clause. +ORMs like SQLAlchemy, ActiveRecord, Prisma, etc., more often than not, will generate queries that work with PgDog out of the box. This is because they tend to fetch entire rows and use fully-qualified names in all parts of the statement, including the `ORDER BY` clause. For example, this is what a [`first`](https://apidock.com/rails/ActiveRecord/FinderMethods/first) Rails/ActiveRecord query looks like: @@ -101,14 +105,14 @@ Aggregates are transformative functions: instead of returning rows as-is, they r If an aggregate function is supported (see list of supported functions below), this is handled by PgDog automatically: -| Aggregate functions | Supported | Notes | +| Aggregate functions | Support | Notes | |-|-|-| -| `count`, `count(*)` | :material-check: | Works for most [data types](#supported-data-types). | -| `max`, `min`, `avg`, `sum` | :material-check: | Works for most [data types](#supported-data-types). | -| `stddev`, `variance` | :material-check: | Works for most [data types](#supported-data-types).| +| `count()`, `count(*)` | :material-check: | Works for most [data types](#supported-data-types). | +| `max()`, `min()`, `avg()`, `sum()` | :material-check: | Works for most [data types](#supported-data-types). | +| `stddev()`, `variance()` | :material-check: | Works for most [data types](#supported-data-types). Results are [approximated](#rewriting-queries). | | `percentile_disc`, `percentile_cont` | :material-close: | Not currently supported and very expensive to calculate on large datasets. | -| `*_agg` | :material-close: | Not currently supported. | -| `json_*` | :material-close: | Not currently supported. | +| `*_agg` | :material-close: | Not currently supported, but is on the roadmap. | +| `json_*` | :material-close: | Not currently supported, but is on the roadmap. | Aggregate functions have to appear in the target clause of the statement (`SELECT [...]`), and can also be combined with sorting, for example: @@ -119,18 +123,21 @@ GROUP BY 2 ORDER BY 1 DESC ``` -#### `HAVING` clause +#### HAVING clause + +!!! warning "Not currently supported" + The `HAVING` clause is not currently supported but is on the roadmap. The `HAVING` clause requires additional filtering of the results and is not currently supported. See [#695](https://github.com/pgdogdev/pgdog/issues/695) for more details. -### Rewriting queries +## Rewriting queries For some aggregate functions to work as expected, each shard may need to return columns and intermediate calculations not present in the original query. -For example, to get an average of a column, we need to fetch the row `count`, multiply it by the `avg` of the column on each shard, and divide it by the total `count` of rows on all shards. +For example, to get an average of a column, we need to fetch the row count from each shard, multiply it by the average of the column on each shard, and divide it by the total count of rows on all shards. -If the `count` function isn't present in the query, PgDog will automatically rewrite the query to add it. This allows queries, like the following example, to just work without modifications: +If the `count()` function is needed to compute an aggregate but isn't present in the query, PgDog will automatically rewrite the query to add it. This allows queries, like the following example, to just work without modifications: === "Original" ```postgresql @@ -145,13 +152,13 @@ PgDog automatically removes the `count` column from the returned rows, so applic The following aggregate functions take advantage of this feature: -- `avg` -- `stddev` -- `variance` - -#### Configuration +| Function | Description | +|-|-| +| `avg()` | Calculate the average of a column across multiple shards. | +| `stddev()` | Uses an approximation of actual standard deviation. | +| `variance()` | Same as `stddev()`, the result is approximated. | -This feature is **enabled** by default and requires no additional configuration. +This feature is **enabled** by default for all cross-shard SELECT queries and requires no additional configuration. ## Supported data types @@ -168,5 +175,5 @@ The following table lists the data types supported by PgDog for ordering and agg | `UUID` | :material-check-circle-outline: | :material-check-circle-outline: | :material-check-circle-outline: | :material-check-circle-outline: | | `VECTOR` | Only by L2 | :material-check-circle-outline: | :material-check-circle-outline: | :material-check-circle-outline: | -!!! note "pgvector data types" +!!! note "pgvector" `VECTOR` type doesn't have a fixed OID in Postgres because it comes from an extension (`pgvector`). We infer it from the `<->` operator used in the `ORDER BY` clause. From f88da3e4209b72f5b15292ff612a348bc0e26fe4 Mon Sep 17 00:00:00 2001 From: Lev Kokotov Date: Tue, 30 Jun 2026 12:29:08 -0700 Subject: [PATCH 08/12] save --- .../sharding/cross-shard-queries/select.md | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/docs/features/sharding/cross-shard-queries/select.md b/docs/features/sharding/cross-shard-queries/select.md index 14e7c816..28aedf2c 100644 --- a/docs/features/sharding/cross-shard-queries/select.md +++ b/docs/features/sharding/cross-shard-queries/select.md @@ -4,46 +4,46 @@ icon: material/table-search # Cross-shard SELECT -A cross-shard SELECT query doesn't have one, or has multiple, sharding keys which requires it to be executed by multiple database shards. PgDog can perform this in parallel, assembling the results from each shard automatically. This makes it a powerful scatter/gather engine, with data nodes powered by PostgreSQL. +A cross-shard SELECT query has either no sharding key or multiple sharding keys, which requires it to be executed by multiple database shards. PgDog can perform this in parallel, assembling the results from each shard automatically. This makes it a powerful scatter/gather engine, with data nodes powered by regular PostgreSQL. ## How it works -When PgDog receives a SELECT query with no (or multiple) sharding keys, it connects to all databases and sends the query to all of them in parallel. +When PgDog receives a SELECT query with no sharding key, or with multiple sharding keys, it connects to all databases and sends the query to all of them in parallel. -If the result needs post-processing, e.g., to support [sorting](#sorting) or [aggregation](#aggregates), it will buffer the rows in memory and perform the necessary operations. If not, it will stream the rows directly to the application. +If the result needs post-processing, e.g., to support [sorting](#sorting) or [aggregation](#aggregates), PgDog will buffer the rows in memory and perform the necessary operations. Otherwise, it will stream the rows directly to the application. ### Predicate push-down -PgDog pushes all filtering, sorting and aggregation statements to the database. If the query is correctly constructed, the shards will return very few rows, allowing searches of vast quantities of data without causing out-of-memory errors or latency issues in the proxy. +PgDog pushes all filtering, sorting, and aggregation statements to the database. If the query is correctly constructed, the shards will return very few rows, allowing searches over vast quantities of data without causing out-of-memory errors or latency issues in the proxy. ## Supported features -The SQL language allows for powerful data filtration and manipulation. While we aim to support most operations, currently, support for some cross-shard operations is limited as documented below: +SQL allows powerful data filtering and manipulation. While we aim to support most operations, support for some cross-shard operations is currently limited as documented below: | Operation | Support | Limitations | |-|-|-| -| SELECT columns | :material-check: | | +| `SELECT` columns | :material-check: | | | `ORDER BY` | Partial support | Columns must be part of the returned tuples. See [sorting](#sorting). | -| `DISTINCT` / `DISTINCT BY`| Partial support | Columns must be part of the returned tuples. | +| `DISTINCT` / `DISTINCT BY` | Partial support | Columns must be part of the returned tuples. | | `GROUP BY` | Partial support | Columns must be part of the returned tuples. See [aggregates](#aggregates). | | `LIMIT` | :material-check: | | -| `OFFSET` | :material-check: | Rows are filtered in-memory, so paginating becomes linearly more expensive with the number of pages. | -| CTEs | Partial support | CTE queries must refer to data located on the same shard, e.g., same sharding keys or [omnisharded](../omnishards.md) tables. | -| Window functions | :material-close: | Not currently supported, but is on the roadmap. | -| Subqueries | Partial support | Just like CTEs, subqueries must refer to data located on the same shard, e.g., same sharding keys or [omnisharded](../omnishards.md) tables. | +| `OFFSET` | :material-check: | Rows are filtered in memory, so pagination becomes linearly more expensive with the number of pages. | +| CTEs | Partial support | CTE queries must refer to data located on the same shard, e.g., the same sharding keys or [omnisharded](../omnishards.md) tables. | +| Window functions | :material-close: | Not currently supported, but on the roadmap. | +| Subqueries | Partial support | Just like CTEs, subqueries must refer to data located on the same shard, e.g., the same sharding keys or [omnisharded](../omnishards.md) tables. | ## Sorting -If the query contains an `ORDER BY` clause, PgDog can sort the rows returned from all shards. This works by buffering data returned from all servers and sorting it in memory. +If the query contains an `ORDER BY` clause, PgDog can sort the rows returned from all shards. This works by buffering the data returned from all servers and sorting it in memory. Currently, two forms of the `ORDER BY` SQL syntax are supported: | Syntax | Example | Notes | |-|-|-| | Order by column name | `ORDER BY id, email` | The column must be present in the returned tuples. | -| Order by column position | `ORDER BY 1, 2` | | +| Order by column position | `ORDER BY 1, 2` | | -Sorting by multiple columns is supported, including opposing sorting directions, for example: +Sorting by multiple columns is supported, including opposing sort directions, for example: ```postgresql SELECT id, email, created_at FROM users @@ -65,7 +65,7 @@ PgDog currently doesn't support sorting results using a function, for example: SELECT email FROM users ORDER BY coalesce(email, '') ``` -To make this work, we need to implement a lot of the SQL functions inside PgDog. This is on the roadmap, but not currently a top priority since the query can be easily rewritten to execute the function inside the database: +To make this work, we need to implement many SQL functions inside PgDog. This is on the roadmap, but it is not currently a top priority since the query can be easily rewritten to execute the function inside the database: ```postgresql SELECT @@ -89,7 +89,7 @@ FROM users ORDER BY ### ORMs -ORMs like SQLAlchemy, ActiveRecord, Prisma, etc., more often than not, will generate queries that work with PgDog out of the box. This is because they tend to fetch entire rows and use fully-qualified names in all parts of the statement, including the `ORDER BY` clause. +ORMs like SQLAlchemy, ActiveRecord, Prisma, etc., will often generate queries that work with PgDog out of the box. This is because they tend to fetch entire rows and use fully qualified names in all parts of the statement, including the `ORDER BY` clause. For example, this is what a [`first`](https://apidock.com/rails/ActiveRecord/FinderMethods/first) Rails/ActiveRecord query looks like: @@ -101,7 +101,7 @@ The `users.id` column is present in the returned row, so PgDog can read it and s ## Aggregates -Aggregates are transformative functions: instead of returning rows as-is, they return calculated summaries, like a sum or a count. Many aggregate functions are cumulative: the final value can be calculated from partial results returned by each shard. +Aggregates are transformative functions: instead of returning rows as-is, they return calculated summaries, like a sum or a count. Many aggregate functions are cumulative: the final value can be calculated from the partial results returned by each shard. If an aggregate function is supported (see list of supported functions below), this is handled by PgDog automatically: @@ -111,10 +111,10 @@ If an aggregate function is supported (see list of supported functions below), t | `max()`, `min()`, `avg()`, `sum()` | :material-check: | Works for most [data types](#supported-data-types). | | `stddev()`, `variance()` | :material-check: | Works for most [data types](#supported-data-types). Results are [approximated](#rewriting-queries). | | `percentile_disc`, `percentile_cont` | :material-close: | Not currently supported and very expensive to calculate on large datasets. | -| `*_agg` | :material-close: | Not currently supported, but is on the roadmap. | -| `json_*` | :material-close: | Not currently supported, but is on the roadmap. | +| `*_agg` | :material-close: | Not currently supported, but on the roadmap. | +| `json_*` | :material-close: | Not currently supported, but on the roadmap. | -Aggregate functions have to appear in the target clause of the statement (`SELECT [...]`), and can also be combined with sorting, for example: +Aggregate functions must appear in the target clause of the statement (`SELECT [...]`) and can also be combined with sorting, for example: ```postgresql SELECT COUNT(*), is_admin @@ -133,11 +133,11 @@ The `HAVING` clause requires additional filtering of the results and is not curr ## Rewriting queries -For some aggregate functions to work as expected, each shard may need to return columns and intermediate calculations not present in the original query. +For some aggregate functions to work as expected, each shard may need to return columns and intermediate calculations that are not present in the original query. -For example, to get an average of a column, we need to fetch the row count from each shard, multiply it by the average of the column on each shard, and divide it by the total count of rows on all shards. +For example, to get the average of a column, we need to fetch the row count from each shard, multiply it by the average of the column on each shard, and divide it by the total count of rows on all shards. -If the `count()` function is needed to compute an aggregate but isn't present in the query, PgDog will automatically rewrite the query to add it. This allows queries, like the following example, to just work without modifications: +If the `count()` function is needed to compute an aggregate but isn't present in the query, PgDog will automatically rewrite the query to add it. This allows queries like the following example to work without modification: === "Original" ```postgresql @@ -154,15 +154,15 @@ The following aggregate functions take advantage of this feature: | Function | Description | |-|-| -| `avg()` | Calculate the average of a column across multiple shards. | -| `stddev()` | Uses an approximation of actual standard deviation. | +| `avg()` | Calculates the average of a column across multiple shards. | +| `stddev()` | Uses an approximation of the actual standard deviation. | | `variance()` | Same as `stddev()`, the result is approximated. | This feature is **enabled** by default for all cross-shard SELECT queries and requires no additional configuration. ## Supported data types -The following table lists the data types supported by PgDog for ordering and aggregation. Since Postgres clients can request results in either text or binary format, each one must be handled separately: +The following table lists the data types supported by PgDog for ordering and aggregation. Since Postgres clients can request results in either text or binary format, each format must be handled separately: | Data type | Sorting | Aggregation | Text format | Binary format | |-|-|-|-|-| @@ -176,4 +176,4 @@ The following table lists the data types supported by PgDog for ordering and agg | `VECTOR` | Only by L2 | :material-check-circle-outline: | :material-check-circle-outline: | :material-check-circle-outline: | !!! note "pgvector" - `VECTOR` type doesn't have a fixed OID in Postgres because it comes from an extension (`pgvector`). We infer it from the `<->` operator used in the `ORDER BY` clause. + The `VECTOR` type doesn't have a fixed OID in Postgres because it comes from an extension (`pgvector`). We infer it from the `<->` operator used in the `ORDER BY` clause. From eb91588f51be1ee3d9a63faa39c3b2717d71d377 Mon Sep 17 00:00:00 2001 From: Lev Kokotov Date: Tue, 30 Jun 2026 13:53:32 -0700 Subject: [PATCH 09/12] continue --- .../sharding/cross-shard-queries/insert.md | 89 ++++++++++--------- docs/features/sharding/sharding-functions.md | 4 +- 2 files changed, 49 insertions(+), 44 deletions(-) diff --git a/docs/features/sharding/cross-shard-queries/insert.md b/docs/features/sharding/cross-shard-queries/insert.md index a93fc793..fcf5ed53 100644 --- a/docs/features/sharding/cross-shard-queries/insert.md +++ b/docs/features/sharding/cross-shard-queries/insert.md @@ -4,65 +4,62 @@ icon: material/table-plus # Cross-shard INSERT -If an `INSERT` statement specifies only one sharding key, it's sent [directly](../query-routing.md#insert) to one of the shards. Otherwise, it becomes a cross-shard `INSERT` statement. +If an INSERT statement specifies only one sharding key, it's sent [directly](../query-routing.md#insert) to one of the shards. Otherwise, it becomes a cross-shard INSERT statement. ## How it works -Cross-shard `INSERT` statements fall into one of three categories, each one handled differently: +Cross-shard INSERT statements fall into one of three categories, each one handled differently: -1. `INSERT` targeting [omnisharded tables](#omnisharded-tables) -2. `INSERT` targeting a [sharded table](#sharded-tables), with no sharding key specified -3. `INSERT` with [multiple tuples](#multiple-tuples), each destined for a different shard +| Statement | Description | +|-|-| +| [Omnisharded](#omnisharded-insert) table INSERT | Executed concurrently on all shards. | +| [Sharded](#sharded-tables) table INSERT with one tuple | Sent to one of the shards only, depending on [primary key](#primary-key-injection) generation strategy. | +| [Sharded](#sharded-tables) table INSERT with [multiple tuples](#multiple-tuples) | Rewritten into separate statements and sent separately to the matching shards. | -By design, applications using PgDog don't need to concern themselves with this and can use the database normally. However, there are some trade-offs when using cross-shard queries, documented below. +Applications using PgDog don't need to concern themselves with implementation details and can use the database normally. However, there are some trade-offs when using cross-shard queries which are documented below. -## Omnisharded tables +## Omnisharded tables INSERT -For queries that target [omnisharded](../omnishards.md) tables, the statement is sent to all shards concurrently. This ensures that the data is identical on all shards, for example: +For queries that target [omnisharded](../omnishards.md) tables, the statement is sent to all shards concurrently. This ensures that the data is identical on all shards. This is common for tables that don't have a sharding key or which contain small amounts of data used in joins, for example: ```postgresql -INSERT INTO request_logs - (client_ip, request_path, response_code, created_at) -VALUES - ($1, $2, $3, $4) +INSERT INTO cities (id, city_name, country_code, created_at) +VALUES ($1, $2, $3, now()) ``` -An identical row will be created on each shard. [Direct-to-shard](../query-routing.md#select) queries can then either fetch them directly or join with other sharded or omnisharded tables. +An identical row will be created on all shards. [Direct-to-shard](../query-routing.md#select) queries can then either fetch them directly or join them with other sharded or omnisharded tables. -### Consistency +### Omnisharded consistency Unless [two-phase commit](../2pc.md) is enabled, inserts into omnisharded tables are not guaranteed to be atomic. It is possible for the statement to succeed on some of the shards and not others. If you don't want to or can't enable 2pc, consider sending cross-shard inserts inside a transaction: ```postgresql BEGIN; -INSERT INTO request_logs - (client_ip, request_path, response_code, created_at) -VALUES - ($1, $2, $3, $4); +INSERT INTO cities (id, city_name, country_code, created_at) +VALUES ($1, $2, $3, now()) -- You will receive an ack or an error from all shards here. COMMIT; ``` This gives you a much higher chance of recording rows on all shards, since you will know if your statement violated some constraint (e.g., unique index or `NOT NULL` check) before committing the transaction. -### Primary keys +!!! warning "Two-phase commit" + Enabling [two-phase commit](../2pc.md) is highly recommended. It's been tested and works well in production. + +### Primary keys in omnisharded tables -It's common practice to use `BIGSERIAL` columns as primary keys. These are powered by a sequence to ensure non-recurring values are automatically generated for each new row. +It is common practice to use `BIGSERIAL` (or `SERIAL`) columns as primary keys. These are powered by a sequence to ensure non-recurring values are automatically generated for each new row. Sharded databases can't use sequences directly because they are not aware of other shards and will produce duplicate values across databases. To circumvent this, PgDog provides a way to generate [unique integers](../unique-ids.md) in the proxy using a distributed and shard-aware algorithm. -To use unique IDs as primary keys (or in any other column) in omnisharded tables, you can call the `pgdog.unique_id()` function in the `VALUES` clause. For example: +To use unique IDs as primary keys (or in any other column) in omnisharded tables, you can call the `pgdog.unique_id()` function in the `VALUES` clause, for example: ```postgresql -INSERT INTO ip_logs - (id, client_ip, created_at) -VALUES - (pgdog.unique_id(), $1, now()); +INSERT INTO cities (id, city_name, country_code, created_at) +VALUES (pgdog.unique_id(), $1, $2, now()); ``` -The function is evaluated inside PgDog which places the value it returns directly into the query. This works for all queries, including prepared statements. - -Each call to `pgdog.unique_id()` generates a unique value, so it's possible to use it multiple times inside the same query and get different numbers, for example: +The function is evaluated inside PgDog which replaces the value it returns directly into the query. This works for all queries, including prepared statements. Each call to `pgdog.unique_id()` generates a unique value, so it's possible to use it multiple times inside the same query and get different numbers, for example: === "Query" ```postgresql @@ -78,25 +75,23 @@ Each call to `pgdog.unique_id()` generates a unique value, so it's possible to u (1 row) ``` -This function can be used with any tables, not just omnisharded ones, or independently of any tables at all. PgDog can also [automatically inject](#primary-key-injection) the function call into insert queries so this feature works with ORMs like ActiveRecord out of the box. +This function can be used with any tables, not just omnisharded ones, or independently of any tables at all. PgDog can also [automatically inject](#primary-key-injection) the function call into INSERT queries, so this feature works with ORMs like ActiveRecord, Prisma, etc., out of the box. -## Sharded tables +## Sharded tables INSERT -`INSERT` statements targeting sharded tables will commonly provide the sharding key. A notable exception to this rule is tables that shard on the primary key, which is often database-generated, e.g., using a sequence. +INSERT statements targeting sharded tables will commonly provide the sharding key. A notable exception to this rule is tables that shard on the primary key, which is often database-generated, e.g., using a sequence. The simplest way to work around this is to use the `pgdog.unique_id()` function to create a unique identifier on the fly, for example: ```postgresql -INSERT INTO users - (id, email, created_at) -VALUES - (pgdog.unique_id(), $1, $2) +INSERT INTO users (id, email, created_at) +VALUES (pgdog.unique_id(), $1, $2) RETURNING *; ``` -However, if you prefer to use sequences instead, you can rely on [database-generated](../sequences.md) primary keys. +However, if you prefer to use sequences instead, you can rely on [database-generated](../sequences.md) primary keys. This also requires no modifications to your queries and creates primary key values with smaller gaps. -Statements that don't include the primary key in the `INSERT` tuple will be sent to one of the shards, using the same round robin algorithm used for [omnisharded](#omnisharded-tables) tables. The shard will then generate the primary key value using PgDog's [sharded sequences](../schema_management/functions.md#pgdognext_id_seq). +Statements that don't include the primary key in the `INSERT` tuple will be sent to one of the shards, using the same round robin algorithm used for [omnisharded](#omnisharded-tables) tables. The shard will then generate the primary key value using PgDog's [sharded sequences](../sequences.md). For example, assuming the table `users` is sharded on the primary key `id`, omitting it from the `INSERT` statement will send it to only one of the shards: @@ -104,21 +99,27 @@ For example, assuming the table `users` is sharded on the primary key `id`, omit INSERT INTO users (email, created_at) VALUES ($1, $2) RETURNING *; ``` -## Primary key injection +!!! note "Sharded sequences" + For sharded sequences to work correctly, they have to be installed into the database first. + Read more about this [here](../sequences.md). + +## Primary key generation It's common for ORMs to not specify the primary key during inserts at all, or use a `DEFAULT` placeholder, for example: ```postgresql -INSERT INTO "users" ("email", "created_at") VALUES ($1, $2) +INSERT INTO users (email, created_at) VALUES ($1, $2) RETURNING id; ``` -This presents a problem to sharded databases because the underlying sequence cannot be used reliably. PgDog can automatically inject the `"id"` column (or any other `PRIMARY KEY` column) into the query generated with its [unique ID](../unique-ids.md) generator, rewriting the query to: +PgDog can automatically inject the `id` column (or any other `PRIMARY KEY` column) into the query generated with its [unique ID](../unique-ids.md) generator by rewriting the query, for example: ```postgresql -INSERT INTO "users" ("id", "email", "created_at") VALUES (pgdog.unique_id(), $1, $2) +INSERT INTO users (id, email, created_at) VALUES (pgdog.unique_id(), $1, $2) ``` -This works for regular queries and prepared statements alike. This feature is **disabled** by default and can be enabled in [`pgdog.toml`](../../../configuration/pgdog.toml/rewrite.md): +This works for regular queries and prepared statements alike and is a great fit for both [omnisharded](#omnisharded-tables-insert) and [sharded](#sharded-tables-insert) tables. + +This feature is **disabled** by default and can be enabled in [`pgdog.toml`](../../../configuration/pgdog.toml/rewrite.md): === "pgdog.toml" ```toml @@ -135,7 +136,11 @@ This works for regular queries and prepared statements alike. This feature is ** ### Composite primary keys +!!! warning "Not currently supported" + Composite primary keys are not currently supported for primary key generation inside PgDog. + Primary key injection only works for `BIGINT` primary key columns. Composite primary keys or other data types are not currently supported, but are on the [roadmap](../../../roadmap.md). + ## Multiple tuples In order to create multiple rows at once, the PostgreSQL query syntax supports sending multiple tuples in one statement. For example: diff --git a/docs/features/sharding/sharding-functions.md b/docs/features/sharding/sharding-functions.md index 98d8c241..c84afddd 100644 --- a/docs/features/sharding/sharding-functions.md +++ b/docs/features/sharding/sharding-functions.md @@ -72,14 +72,14 @@ To match a specific table/column combination, you can specify the table name as ```toml [[sharded_tables]] database = "prod" - table = "users" + name = "users" column = "company_id" ``` === "Helm chart" ```yaml shardedTables: - database: prod - table: users + name: users column: company_id ``` From acd446b2d8319dd348b4c988fc4238e7d203ce18 Mon Sep 17 00:00:00 2001 From: Lev Kokotov Date: Tue, 30 Jun 2026 13:55:44 -0700 Subject: [PATCH 10/12] tres commas --- docs/features/sharding/cross-shard-queries/insert.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/features/sharding/cross-shard-queries/insert.md b/docs/features/sharding/cross-shard-queries/insert.md index fcf5ed53..cd46e367 100644 --- a/docs/features/sharding/cross-shard-queries/insert.md +++ b/docs/features/sharding/cross-shard-queries/insert.md @@ -36,7 +36,7 @@ Unless [two-phase commit](../2pc.md) is enabled, inserts into omnisharded tables ```postgresql BEGIN; INSERT INTO cities (id, city_name, country_code, created_at) -VALUES ($1, $2, $3, now()) +VALUES ($1, $2, $3, now()); -- You will receive an ack or an error from all shards here. COMMIT; ``` From 1e7cf2d4cc8bdb6c941b6e877e9f7fcde960a596 Mon Sep 17 00:00:00 2001 From: Lev Kokotov Date: Tue, 30 Jun 2026 16:26:22 -0700 Subject: [PATCH 11/12] save --- .../sharding/cross-shard-queries/insert.md | 141 +++++++++++------- 1 file changed, 88 insertions(+), 53 deletions(-) diff --git a/docs/features/sharding/cross-shard-queries/insert.md b/docs/features/sharding/cross-shard-queries/insert.md index cd46e367..62d3f35c 100644 --- a/docs/features/sharding/cross-shard-queries/insert.md +++ b/docs/features/sharding/cross-shard-queries/insert.md @@ -4,62 +4,71 @@ icon: material/table-plus # Cross-shard INSERT -If an INSERT statement specifies only one sharding key, it's sent [directly](../query-routing.md#insert) to one of the shards. Otherwise, it becomes a cross-shard INSERT statement. +An INSERT statement that doesn't specify a sharding key, has multiple sharding keys, or is targetting an [omnisharded](../omnishards.md) table, is a cross-shard statement and requires special handling, as described below. ## How it works -Cross-shard INSERT statements fall into one of three categories, each one handled differently: +Cross-shard INSERT statements fall into one of three categories, each one being handled differently: -| Statement | Description | +| Statement | Handling | |-|-| -| [Omnisharded](#omnisharded-insert) table INSERT | Executed concurrently on all shards. | -| [Sharded](#sharded-tables) table INSERT with one tuple | Sent to one of the shards only, depending on [primary key](#primary-key-injection) generation strategy. | -| [Sharded](#sharded-tables) table INSERT with [multiple tuples](#multiple-tuples) | Rewritten into separate statements and sent separately to the matching shards. | +| INSERT into an [omnisharded](#omnisharded-tables) table | Sent concurrently to all shards. | +| INSERT a single tuple into a [sharded](#sharded-tables) table | Sent to one of the shards only, depending on [primary key](#primary-key-injection) generation strategy. | +| INSERT [multiple tuples](#multiple-tuples) into a [sharded](#sharded-tables) table | Rewritten into separate statements and sent separately to the matching shards. | Applications using PgDog don't need to concern themselves with implementation details and can use the database normally. However, there are some trade-offs when using cross-shard queries which are documented below. -## Omnisharded tables INSERT +## Omnisharded tables -For queries that target [omnisharded](../omnishards.md) tables, the statement is sent to all shards concurrently. This ensures that the data is identical on all shards. This is common for tables that don't have a sharding key or which contain small amounts of data used in joins, for example: +For queries that target [omnisharded](../omnishards.md) tables, the statement is sent to all shards concurrently. This ensures that the data is identical on all shards, for example: ```postgresql INSERT INTO cities (id, city_name, country_code, created_at) VALUES ($1, $2, $3, now()) ``` -An identical row will be created on all shards. [Direct-to-shard](../query-routing.md#select) queries can then either fetch them directly or join them with other sharded or omnisharded tables. +This is a common pattern for tables that don't have a sharding key, or tables that contain small amounts of data. The same row will be created on all shards and queries can then either fetch it directly or join it with other sharded and omnisharded tables. ### Omnisharded consistency -Unless [two-phase commit](../2pc.md) is enabled, inserts into omnisharded tables are not guaranteed to be atomic. It is possible for the statement to succeed on some of the shards and not others. If you don't want to or can't enable 2pc, consider sending cross-shard inserts inside a transaction: +Unless [two-phase commit](../2pc.md) is enabled, inserts into omnisharded tables are not guaranteed to be atomic. It is possible for the statement to succeed on some of the shards and not others. + +If you don't want to or can't enable two-phase commit on your database shards, consider sending cross-shard inserts inside a transaction or write idempontent statements, for example: ```postgresql BEGIN; INSERT INTO cities (id, city_name, country_code, created_at) -VALUES ($1, $2, $3, now()); +VALUES ($1, $2, $3, now()) +ON CONFLICT (city_name) DO NOTHING; -- You will receive an ack or an error from all shards here. COMMIT; ``` -This gives you a much higher chance of recording rows on all shards, since you will know if your statement violated some constraint (e.g., unique index or `NOT NULL` check) before committing the transaction. +This gives you a much higher chance of writing rows on all shards, since you will know if your statement violated a constraint (e.g., unique index or `NOT NULL` check) before committing the transaction. !!! warning "Two-phase commit" Enabling [two-phase commit](../2pc.md) is highly recommended. It's been tested and works well in production. ### Primary keys in omnisharded tables -It is common practice to use `BIGSERIAL` (or `SERIAL`) columns as primary keys. These are powered by a sequence to ensure non-recurring values are automatically generated for each new row. +While UUID primary keys are common and are easily generated by the application, it is still a common practice to use `BIGSERIAL` (or `SERIAL`) columns to uniquely identify rows in databases. + +These are typically powered by a sequence to ensure non-recurring values are automatically generated for each new row. Howeer, sharded databases can't use sequences directly because they are not aware of other shards and will produce duplicate values across databases. + +To work around this, PgDog provides a way to generate [unique integers](../unique-ids.md) in the proxy using a distributed and shard-aware algorithm. Since the integer is generated inside PgDog before sending the query to Postgres, its value will be the same for all rows sent to each shard. -Sharded databases can't use sequences directly because they are not aware of other shards and will produce duplicate values across databases. To circumvent this, PgDog provides a way to generate [unique integers](../unique-ids.md) in the proxy using a distributed and shard-aware algorithm. +### Manual primary key generation -To use unique IDs as primary keys (or in any other column) in omnisharded tables, you can call the `pgdog.unique_id()` function in the `VALUES` clause, for example: +To use unique IDs as primary keys (or in any other column) in omnisharded tables, you can call the `pgdog.unique_id()` function directly in the `VALUES` clause of an INSERT statement, for example: ```postgresql INSERT INTO cities (id, city_name, country_code, created_at) VALUES (pgdog.unique_id(), $1, $2, now()); ``` -The function is evaluated inside PgDog which replaces the value it returns directly into the query. This works for all queries, including prepared statements. Each call to `pgdog.unique_id()` generates a unique value, so it's possible to use it multiple times inside the same query and get different numbers, for example: +The function is evaluated inside PgDog, replacing the value it generates directly into the query. This works for all queries, including prepared statements. + +Each call to `pgdog.unique_id()` generates a unique value, so it's possible to use it multiple times inside the same query and get different numbers, for example: === "Query" ```postgresql @@ -75,9 +84,52 @@ The function is evaluated inside PgDog which replaces the value it returns direc (1 row) ``` -This function can be used with any tables, not just omnisharded ones, or independently of any tables at all. PgDog can also [automatically inject](#primary-key-injection) the function call into INSERT queries, so this feature works with ORMs like ActiveRecord, Prisma, etc., out of the box. +This function can be used with any tables, not just omnisharded ones, or independently of any tables at all. + + +### Automatic primary key generation + +If you're using an ORM like ActiveRecord, Prisma, SQLAlchemy, etc., it's often not easy or possible to modify how it generates its INSERT statements. Thankfully the SQL standard specifies a couple ways for the client to make the database generate the primary key automatically, which PgDog can intercept and handle. + +#### How it works + +It's common for some ORMs to omit columns which the database is expected to generate values for. Since PgDog has knowledge of the [database schema](../schema_management/index.md), it can detect this scenario and inject the call to `pgdog.unique_id()` automatically, for example: + +=== "Original query" + ```postgresql + INSERT INTO cities (city_name, country_code, created_at) + VALUES ($1, $2, now()) + ``` +=== "Rewritten query" + ```postgresql + INSERT INTO cities (id, city_name, country_code, created_at) + VALUES ($3, $1, $2, now()) + ``` + + The value of parameter `$3` is automatically set by PgDog to the value returned by the [unique ID](../unique-ids.md) generator. + +PgDog can also [automatically inject](#primary-key-injection) the function call into INSERT queries, so this feature works with ORMs like ActiveRecord, Prisma, etc., out of the box. + +An alternative way to write that query can is to use the `DEFAULT` keyword, which explicitely tells the database to use the configured default for the column. PgDog can handle that scenario as well and will inject its generated primary key into the row. + +#### Configuration + +This primary key generation feature is still relatively new and **disabled** by default. To enable it, configure it in [`pgdog.toml`](../../configuration/pgdog.toml/rewrite.md): + +=== "pgdog.toml" + ```toml + [rewrite] + enabled = true + primary_key = "rewrite" + ``` +=== "Helm chart" + ```yaml + rewrite: + enabled: true + primaryKey: rewrite + ``` -## Sharded tables INSERT +## Sharded tables INSERT statements targeting sharded tables will commonly provide the sharding key. A notable exception to this rule is tables that shard on the primary key, which is often database-generated, e.g., using a sequence. @@ -89,52 +141,35 @@ VALUES (pgdog.unique_id(), $1, $2) RETURNING *; ``` -However, if you prefer to use sequences instead, you can rely on [database-generated](../sequences.md) primary keys. This also requires no modifications to your queries and creates primary key values with smaller gaps. +PgDog will inject a unique integer into the query and send it to the corresponding shard as a [direct-to-shard](../query-routing.md) statement. -Statements that don't include the primary key in the `INSERT` tuple will be sent to one of the shards, using the same round robin algorithm used for [omnisharded](#omnisharded-tables) tables. The shard will then generate the primary key value using PgDog's [sharded sequences](../sequences.md). +### Primary keys -For example, assuming the table `users` is sharded on the primary key `id`, omitting it from the `INSERT` statement will send it to only one of the shards: +For sharded tables that have `BIGINT` (or `INTEGER`) primary keys, you can rely on the [unique ID](../unique-ids.md) generator, same as for [omnisharded](#primary-keys-in-omnisharded-tables) tables. -```postgresql -INSERT INTO users (email, created_at) VALUES ($1, $2) RETURNING *; -``` +However, since our algorithm produces pretty large numbers, this may not always be suitable for all applications, especially the ones that pass those IDs directly to a JavaScript/TypeScript frontend which can't handle large integers. For this reason, we created [sharded sequences](../sequences.md). + +### Sharded sequences -!!! note "Sharded sequences" +!!! note "Installation required" For sharded sequences to work correctly, they have to be installed into the database first. Read more about this [here](../sequences.md). -## Primary key generation +Sharded sequences will apply a hashing function to a PostgreSQL sequence, creating unique and monotonically-increasing values, with small gaps in-between. They are great for generating primary keys for sharded tables, since they will create cluster-unique values and require no special handling or query rewriting inside PgDog. -It's common for ORMs to not specify the primary key during inserts at all, or use a `DEFAULT` placeholder, for example: +For tables using sharded sequences for primary key generation and which use the primary key for sharding, PgDog will send the query to only one shard (using round robin) and let the database generate the sharding key automatically, for example: ```postgresql -INSERT INTO users (email, created_at) VALUES ($1, $2) RETURNING id; +INSERT INTO users (email, created_at) VALUES ($1, $2) +RETURNING id; ``` -PgDog can automatically inject the `id` column (or any other `PRIMARY KEY` column) into the query generated with its [unique ID](../unique-ids.md) generator by rewriting the query, for example: +The `id` column will be generated by the database (and not PgDog), will be globally unique, and will match the shard its generated on, as guaranteed by the [sharded sequence](../sequences.md) implementation. -```postgresql -INSERT INTO users (id, email, created_at) VALUES (pgdog.unique_id(), $1, $2) -``` +!!! warning "Sharded tables only" + Make sure to **never** use sharded sequences with **omnisharded** tables. They are not guaranteed to generate the same value on all shards, even with [two-phase commit](../2pc.md), and could cause primary key drift across shards. -This works for regular queries and prepared statements alike and is a great fit for both [omnisharded](#omnisharded-tables-insert) and [sharded](#sharded-tables-insert) tables. - -This feature is **disabled** by default and can be enabled in [`pgdog.toml`](../../../configuration/pgdog.toml/rewrite.md): - -=== "pgdog.toml" - ```toml - [rewrite] - enabled = true - primary_key = "rewrite" - ``` -=== "Helm chart" - ```yaml - rewrite: - enabled: true - primaryKey: rewrite - ``` - -### Composite primary keys +## Composite primary keys !!! warning "Not currently supported" Composite primary keys are not currently supported for primary key generation inside PgDog. @@ -172,7 +207,7 @@ In sharded databases, however, the individual tuples are likely to belong on dif This works for all queries, including prepared statements. PgDog will rewrite all Postgres protocol messages (e.g., `Bind`, `Describe`, etc.) without the application having to change its queries. -Since this feature has additional overhead by using multiple shards for each query, it is **disabled** by default and can be enabled in [`pgdog.toml`](../../../configuration/pgdog.toml/rewrite.md): +This feature is relatively new and is **disabled** by default. It can be enabled in [`pgdog.toml`](../../../configuration/pgdog.toml/rewrite.md): === "pgdog.toml" ```toml @@ -201,6 +236,6 @@ If a transaction isn't started and a multi-tuple statement is sent by the applic Requiring transactions ensures that if one of the `INSERT` statements fails, e.g., because of a unique constraint violation, the transaction can be rolled back, leaving the database in a consistent state. -!!! note "Consistency guarantees" +!!! warning "Two-phase commit" - Much like [omnisharded](#omnisharded-tables) table inserts, it's best to enable [2pc](../2pc.md) before attempting cross-shard multi-tuple inserts. This feature increases the likelihood that cross-shard transactions are atomic. + Much like [omnisharded](#omnisharded-tables) table inserts, it's best to enable [two-phase commit](../2pc.md) before attempting cross-shard multi-tuple inserts. This feature increases the likelihood that cross-shard transactions are atomic. From 37caf904d34a6e0c631e071928807d46f49c628f Mon Sep 17 00:00:00 2001 From: Lev Kokotov Date: Tue, 30 Jun 2026 16:33:09 -0700 Subject: [PATCH 12/12] save --- .../sharding/cross-shard-queries/insert.md | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/features/sharding/cross-shard-queries/insert.md b/docs/features/sharding/cross-shard-queries/insert.md index 62d3f35c..656d21fa 100644 --- a/docs/features/sharding/cross-shard-queries/insert.md +++ b/docs/features/sharding/cross-shard-queries/insert.md @@ -4,7 +4,7 @@ icon: material/table-plus # Cross-shard INSERT -An INSERT statement that doesn't specify a sharding key, has multiple sharding keys, or is targetting an [omnisharded](../omnishards.md) table, is a cross-shard statement and requires special handling, as described below. +An INSERT statement that doesn't specify a sharding key, has multiple sharding keys, or targets an [omnisharded](../omnishards.md) table is a cross-shard statement and requires special handling, as described below. ## How it works @@ -13,8 +13,8 @@ Cross-shard INSERT statements fall into one of three categories, each one being | Statement | Handling | |-|-| | INSERT into an [omnisharded](#omnisharded-tables) table | Sent concurrently to all shards. | -| INSERT a single tuple into a [sharded](#sharded-tables) table | Sent to one of the shards only, depending on [primary key](#primary-key-injection) generation strategy. | -| INSERT [multiple tuples](#multiple-tuples) into a [sharded](#sharded-tables) table | Rewritten into separate statements and sent separately to the matching shards. | +| INSERT a single tuple into a [sharded](#sharded-tables) table | Sent to one shard only, depending on the [primary key](#primary-keys) generation strategy. | +| INSERT [multiple tuples](#multiple-tuples) into a [sharded](#sharded-tables) table | Rewritten into separate statements and sent separately to the matching shards. | Applications using PgDog don't need to concern themselves with implementation details and can use the database normally. However, there are some trade-offs when using cross-shard queries which are documented below. @@ -33,7 +33,7 @@ This is a common pattern for tables that don't have a sharding key, or tables th Unless [two-phase commit](../2pc.md) is enabled, inserts into omnisharded tables are not guaranteed to be atomic. It is possible for the statement to succeed on some of the shards and not others. -If you don't want to or can't enable two-phase commit on your database shards, consider sending cross-shard inserts inside a transaction or write idempontent statements, for example: +If you don't want to or can't enable two-phase commit on your database shards, consider sending cross-shard inserts inside a transaction or writing idempotent statements, for example: ```postgresql BEGIN; @@ -51,9 +51,9 @@ This gives you a much higher chance of writing rows on all shards, since you wil ### Primary keys in omnisharded tables -While UUID primary keys are common and are easily generated by the application, it is still a common practice to use `BIGSERIAL` (or `SERIAL`) columns to uniquely identify rows in databases. +While UUID primary keys are common and are easily generated by the application, it is still common to use `BIGSERIAL` (or `SERIAL`) columns to uniquely identify rows in databases. -These are typically powered by a sequence to ensure non-recurring values are automatically generated for each new row. Howeer, sharded databases can't use sequences directly because they are not aware of other shards and will produce duplicate values across databases. +These are typically powered by a sequence to ensure non-recurring values are automatically generated for each new row. However, sharded databases can't use sequences directly because they are not aware of other shards and will produce duplicate values across databases. To work around this, PgDog provides a way to generate [unique integers](../unique-ids.md) in the proxy using a distributed and shard-aware algorithm. Since the integer is generated inside PgDog before sending the query to Postgres, its value will be the same for all rows sent to each shard. @@ -84,16 +84,16 @@ Each call to `pgdog.unique_id()` generates a unique value, so it's possible to u (1 row) ``` -This function can be used with any tables, not just omnisharded ones, or independently of any tables at all. +This function can be used with any table, not just omnisharded ones, or independently of tables altogether. ### Automatic primary key generation -If you're using an ORM like ActiveRecord, Prisma, SQLAlchemy, etc., it's often not easy or possible to modify how it generates its INSERT statements. Thankfully the SQL standard specifies a couple ways for the client to make the database generate the primary key automatically, which PgDog can intercept and handle. +If you're using an ORM like ActiveRecord, Prisma, SQLAlchemy, etc., it's often not easy or possible to modify how it generates its INSERT statements. Thankfully, the SQL standard specifies a couple of ways for the client to make the database generate the primary key automatically, which PgDog can intercept and handle. #### How it works -It's common for some ORMs to omit columns which the database is expected to generate values for. Since PgDog has knowledge of the [database schema](../schema_management/index.md), it can detect this scenario and inject the call to `pgdog.unique_id()` automatically, for example: +It's common for some ORMs to omit columns that the database is expected to generate values for. Since PgDog has knowledge of the [database schema](../schema_management/index.md), it can detect this scenario and inject the call to `pgdog.unique_id()` automatically, for example: === "Original query" ```postgresql @@ -108,13 +108,13 @@ It's common for some ORMs to omit columns which the database is expected to gene The value of parameter `$3` is automatically set by PgDog to the value returned by the [unique ID](../unique-ids.md) generator. -PgDog can also [automatically inject](#primary-key-injection) the function call into INSERT queries, so this feature works with ORMs like ActiveRecord, Prisma, etc., out of the box. +PgDog can also [automatically inject](#automatic-primary-key-generation) the function call into INSERT queries, so this feature works with ORMs like ActiveRecord, Prisma, etc., out of the box. -An alternative way to write that query can is to use the `DEFAULT` keyword, which explicitely tells the database to use the configured default for the column. PgDog can handle that scenario as well and will inject its generated primary key into the row. +Another way to write that query is to use the `DEFAULT` keyword, which explicitly tells the database to use the configured default for the column. PgDog can handle that scenario as well and will inject its generated primary key into the row. #### Configuration -This primary key generation feature is still relatively new and **disabled** by default. To enable it, configure it in [`pgdog.toml`](../../configuration/pgdog.toml/rewrite.md): +This primary key generation feature is still relatively new and **disabled** by default. To enable it, configure it in [`pgdog.toml`](../../../configuration/pgdog.toml/rewrite.md): === "pgdog.toml" ```toml @@ -141,13 +141,13 @@ VALUES (pgdog.unique_id(), $1, $2) RETURNING *; ``` -PgDog will inject a unique integer into the query and send it to the corresponding shard as a [direct-to-shard](../query-routing.md) statement. +PgDog will inject a unique integer into the query and send it to the corresponding shard as a [direct-to-shard](../query-routing.md) statement. ### Primary keys -For sharded tables that have `BIGINT` (or `INTEGER`) primary keys, you can rely on the [unique ID](../unique-ids.md) generator, same as for [omnisharded](#primary-keys-in-omnisharded-tables) tables. +For sharded tables that have `BIGINT` (or `INTEGER`) primary keys, you can rely on the [unique ID](../unique-ids.md) generator, as you can with [omnisharded](#primary-keys-in-omnisharded-tables) tables. -However, since our algorithm produces pretty large numbers, this may not always be suitable for all applications, especially the ones that pass those IDs directly to a JavaScript/TypeScript frontend which can't handle large integers. For this reason, we created [sharded sequences](../sequences.md). +However, since our algorithm produces large numbers, this may not always be suitable for all applications, especially those that pass IDs directly to a JavaScript/TypeScript frontend that can't handle large integers. For this reason, we created [sharded sequences](../sequences.md). ### Sharded sequences @@ -155,16 +155,16 @@ However, since our algorithm produces pretty large numbers, this may not always For sharded sequences to work correctly, they have to be installed into the database first. Read more about this [here](../sequences.md). -Sharded sequences will apply a hashing function to a PostgreSQL sequence, creating unique and monotonically-increasing values, with small gaps in-between. They are great for generating primary keys for sharded tables, since they will create cluster-unique values and require no special handling or query rewriting inside PgDog. +Sharded sequences apply a hashing function to a PostgreSQL sequence, creating unique and monotonically increasing values with small gaps between them. They are useful for generating primary keys for sharded tables, since they create cluster-unique values and require no special handling or query rewriting inside PgDog. -For tables using sharded sequences for primary key generation and which use the primary key for sharding, PgDog will send the query to only one shard (using round robin) and let the database generate the sharding key automatically, for example: +For tables that use sharded sequences for primary key generation and use the primary key for sharding, PgDog sends the query to only one shard (using round-robin routing) and lets the database generate the sharding key automatically, for example: ```postgresql INSERT INTO users (email, created_at) VALUES ($1, $2) RETURNING id; ``` -The `id` column will be generated by the database (and not PgDog), will be globally unique, and will match the shard its generated on, as guaranteed by the [sharded sequence](../sequences.md) implementation. +The `id` column will be generated by the database (and not PgDog), globally unique, and matched to the shard it's generated on, as guaranteed by the [sharded sequence](../sequences.md) implementation. !!! warning "Sharded tables only" Make sure to **never** use sharded sequences with **omnisharded** tables. They are not guaranteed to generate the same value on all shards, even with [two-phase commit](../2pc.md), and could cause primary key drift across shards. @@ -188,7 +188,7 @@ VALUES ($4, $5, $6); ``` -In sharded databases, however, the individual tuples are likely to belong on different shards. To make this work, PgDog can automatically rewrite the statement and send each tuple to the right shard. Using the example above, the result of that operation produces two single-tuple statements: +In sharded databases, however, the individual tuples are likely to belong on different shards. To make this work, PgDog can automatically rewrite the statement and send each tuple to the right shard. Using the example above, that operation produces two single-tuple statements: === "Statement 1" ```postgresql

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 literal 81350 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≧uzYa4))p3x8E1C`B>?gq09*v$(mbRbZQ;VPPN=!R`yXDbbl~ zCnP0>TMg$mFD@d*>2 zcWN@>aZQa- z5^&!jRnsf`C+{c(Q5h`f77E6H|NcE#Umsi`$R+GS?!oJ}X>gz4$wJo{=b;+N>p&a@ zwi-W~k)O}v;psVSI%q+KH252tiHsggeQ8f$XK2xN&N%=*#RmaeJ^CxNWwv;0OAE-P zjpR25L4KxxaXbvqxrrU}k@|oMLf14Mb4+dtbVo5;;dR3*Z;-~8184;B6W#?PM> z?rAX*6|#*lF(a$55kpK;K?0CT>NwJc#nyc(uBsZxtA3cR#vop(844!LIkxVVfM+}- z#u4KB`cvsY|2kMv5-bp+pmEAe=5(j0W_6Cx3eC3CD#=tpDe70yB3g{(5zKs8U z&S9l;&sN^}VOSuLe|S<-68r-s_c(PSAmNOSjSVa;EOh2mb^5fwzrVP)7WU!>maQ~F z?%zrwu0_cM_%i1(T~JV*`;1zblFEVF1+||9UXGE9%7SD)@2<_jW&S&ER%M1ek`rxZ*f?2jc?tYo zze0x@Ur}&NOswfu4nyuU0y$8uUzSdL7M9UVEpU?ntCYc}!bMJhV*z34gF37!-3#c~ zI{ZN3gK0v-l^${Bk8VSCp7MjNI3*=zrSgl@r=Xx9uy$s$A<*9Vd4~!Q&Q7zU#w7-M zdHH4#VT>&;8E8O>m@USm3d$^?*J3c(MrqjRFr@Fq12x}tVJm4!E2(D=DJxJpZqD~Z z1D~NYGX2)v#31kiC0k~cFB-L8ovIT7Hmh~)Iap5VWNB%scW>gmjYCWy$TWa5<-oG4 zqmWLVDG!f2f>cN=A}vh?s;WT=>Q(V?(5B>Rs4;79^8lE+LdUjMVqj@$3Akst2*Jl5 zM9VYJ#ake=xhIi8ocI>PBMfjQ;Q%E|QDd+fiA(GJ(%c`Yxh-soU9zPJ-1nJQQ%!Uc zR|#8KK5WS7_g5X};f*qv+)~Q2{V9hEow{1WZ0F(6ATQnrmGqI9a4o3w@+^ExIS@DP zCqCy;aU7S1eK0*cGBT2$&ulZ~f)y_C__8dOR8&;-PMDcM+RjJ%Fzsx3^$m(kk#V-z zuhm+2a?eJ?9y?JWC&UF>4@?h7NJt19XoQ_rL$Qkw&A6mZ`%mDNb!(nD@gc4gV)ee$ zY$2C5Ebz}I8uPQUQN-JRZXp;O9VLtqK3>e@6Lrc(q8!{}OkIQOaT2HW@t|JsIEfvE zT3La_4If^I=6lUC?nN~B+(1Uy5zY|t{y@*)#UKa2)PyhRnu0YMH8nM)!oYh6^l%|l zoDm05#$aRblrHAN;~G#%09=4*0BX@@5bmp61)geaYXj#AED~q~T$lilfEPUgMgSkd zA6MiMS&)Htc5b|m0#mAlm{8_Wmtd~=z}Q{@8BaJ=g2|d2%z5CgL#%NEV|v9c+&YiU zk4A9gF|vwFLlKYV9SjwX6@f-=1yriciPy0@x^1Q%9b4Mp^zUNeD@~klVk!pG2r(2;b#!!i-NSCCc@>;mkMeh*65Tx- zs_BZrSZkwlDYS<&2obo1a+r7NgasN?L|)CNMo35?SPCr%DeF~UO8Nq=zq1FW)?5DF z(1XaUj1Q16#eEvp{aODoF}$05QQMSs<;Oh(#?ZDCx-&b1{ii2Mq1M zxm2T(34k;>ajghlAby3infi zGCwH$s_bE&dIql%YVDHQ(9m#BEnOQ8svU~pMl*Xn`c=D20oP-4fGYNhm=`VOap!ew z{tJRDF1(i~GJr!Z9soTX?&s`Gz!+gCi@Q29dMQXh8#qMh3y{u@bZER{|G>-op|}rm zaYz18zeM>hU20Ie9ro31b`u4O=hZR=jYF8>*cCv z!?A=xYH6B&&NG`5t+V9O(NPgRv;b)ih1=)hB;kR#dw<4#j>5KI?TF*h=)Aw`g*XH^ zdzt0#w?N+N_XpDbyGCMgxNaJ#B}`oD5Xb(WR>Gy06v$U^|6oLM%$5*P-#G@jERFPb zFBo?6obI8*eN^Pp3@j`%?_f{qH_HOR*_%Z=GNLO<$g@qZF|y8lnhtTt)@lC!{^0&AJ9rLtxc?_U+so&}e71eSsWc5N&3jf)A5bexj+QHc62O-aWb2F@X+VHC(h;Yu`%P?(WZ)P^H`ALZ` zUdRG0Cn(i&i4a-_C`m-0& z*pmKp2xU&VJof7ZLhW32eF9QapQ)UNVBhX0WrJs>BY#km5rcdnz(-;PgH>oz2W`qMGCsW{Ca_b=W{Kc9Ub=>0r+l)uD*NnApEKo!s2s^sHNja zwGP6bd{W}nE|{Lm#}d7dI)nfvG$lnvMgQEInPzWAN`V8g%5Lth6I_b$tFj0mKcvi& zEop9M79K~hIk+)ABaaR)@B!jtS5n&sQ#MAm@YQMM`(=R_mHg{PR~Am%F=FH53QL%C z`c_w00p}q6>no7v9EIwor*?t+0Bn1=I79V_Mk0WxwgGK3_B>dxxr2T5N)}+c3il@n zYfmONS`H80#Kb`9(vqc`q2n;;WbzI{h*8_j~`-dZ#I5+Ch)9ui)??VfXHUgWf5=(qMTng9b|ngEM0^gbJ>70UJl*M@+36OEfR}j@zNa(qwW7;a zLn9(ut@3N|%4{bpH^y?c%cdIxZf_keB)5jJ)RtR`mT@4?V_|2vIU2aAX*SZ`ajziC zd$Zxj)_THFZ6u=Sr6IIz02{pvMeR~$t3JwzAP=4BN} zp^+GNbJYYSv|ITX$N4)+0-&zCFW~a9va)g-?ACs5ti)|0(REpQcPLkTYkwS8wo8~Y z-dW+eFyGv3p5#swP9{PM63A>=)%ctTlPamK_!-MG)Cbq-m#tvLe%tl{1j zfzhL#g#{sD`{|}?M}~v7aeTN$fB*gs>ZLtik8bZ2V~=36B^5B5^EeL{N~J8~L+{W9=Z(bzQQ`Skt@p`v zoO#kSr=Re@H3i}9B%Q1lb;q9zx~~5WO5lODfD4=fXUwh~2I>M=ADt=}o579Vj+6XZ zQY-yoi3wE>fW?CSg4*`;Ozlx8EbsWFOm)NvAFi+l7y#~a03y5{@T6Dnioml9ojhM1 zZTmy=8<_Vq^FiH|{`?oHXFmwIuGbC*w}z7>l&S1JZfR|uIX&9h0;S`mtHd%@gy3C} z70TBriggI2?0kPq1%wlHykE4?om{tZR(G}rYXxdj_a)zogG*vPFc6dq*1hnYJtQwL z?^wO9${rPg_7_~2j@)H&7LxA|F}pRg1g>z|-^R;J&~~z#5Nt`)X%#LB{JKN&{*5!R ze9Jhju4b|1Ha>IHLb5MuhC-spuZ5G{e#MzY*U1VNouQwV&Wy}D<#*uf@r~?!(|@C% zw-)b4NV5^p)9#S;+aP%tPrmr|0&88MtYmA2h=fF!n>#-P2zTs4z;gaDHZ?$1z^ z1OUkH!2$e3b$pna6X+s_r{uaalnZob%zL~sNx;>1a%RJO z!*gpuRk71^eL>{HU8mfRf^xmNc4wh`%2i=mPoQ&i8=%AMzkd%&|?r3G@$ z&U*#@puS*HNaS~(LhArX7Xb-LSYT#rUx2>@J=nPY@<7(f^m3tb>-0h0#aZ>!*kteh zQE&g^Ew7Hr$w_gMgCHE*>7s7o?AD=fk&Ei3M`MSi-GV!Es>YH)^>cZ1QGZDQg>b`4}Cps{T=gMMSd$BAQ(^7^oi;P(LF#w?qF=1*H>f zQ-F+V%}Dkc+w~N-m|JQbsTfhuuREP%S@8v1FIhZU9WUGPUwFwqbGS7l-`X2^)LXiL ztYP{5HL@4rhWA=~;_J#@OYP;M>BYBHl3;STr`i6lcM%>Zi>|HG zz`as_Iq(;!?&^3xT9Sbf^^%-+0i+X6HAB~{8XlYcavT8nu>vjiyHZ`0x2V0!&q&W&R1|J z4_NyIZv9Kg0|bm!o!>dO?^?Jq16R#~16b9|g*{}=v-t?fd8g}64LqEJfPIkrE3_P6 zaSG_Zd$*06fp+=Vtru9rP{a|-u!-of8npD#bjGR2igY#Q6tuvA$$I540AUsdcM2O^d z4;tCKbHGC=Ae>hsrhqHq^*#4G9ZfzP{d}+oCVc2VxvF4_Ab23M%fP1pSi0_djJ^*c zaQybbm7Yv5!W{^Rp~N0=wkQ;+jN7CmcnWZTEv!%AdJiTJBqRYAHF>ySR(Dok5ga%I zaJBUOEMQbadEczBo$0 zaBo}bLR8QO%>YH7=-$S>&-=@>JPeUFK>okNQV8=GOI z0SbsibFXy%K6@6QUZ=Z!42U=RyViaxS;ap$(vee6vd48ar{w_-$y5}xfE~cPqf9Qq zJF_6_F38I2?oxkqARRN8nTbi0SOdSMk*Q0e5*_agL=z1lh>s^#hGo+ti=+$_;oxEz zG0*#x#8W!TCkTZdfw*o=o((z}=jl`!eKsKBETTLCHKs@i65Zn#`=nG(gpD6Vr1}q4 zX{H{b_wXKCGZGRq_@07SD~<>%6HdI(2e?PblfX?F zQr|*IN?IFBEp1p~59glFj-7F?%Y#hFW}ghV+VyyMX^LAI0ZishrqV;=0i8M-8aVAR z!>nKXFtU+7Prr^-BTolv_6K69#r=s4g1WlXW0L7NGU-8q2(W}^vzFk0SWq6WQmx$c zj{x+;7iK{eBYgl`2`M~e=xd9MizADr_^4c@y(aN9Bo%l|8VsTw>hN^vam(iB=I0Ad zXhhaE`2IB$0edS)%I7fq6JRde*jv7mO#oWaSf8vpxp-J=g!*e3bVt;kbxxhi`-;uR z5TAhH%}hyISyd%}p9yASk~(VROa;<@P;Pqv3SN6HNBc)C%bfu|3mw;ba==y=_CY5{ zf(2zHVA;d~n^Id_`yG(z5$`#Kgh=2yp-gEaGiYygZClI1>A!?w3o8DAc<=&TUaT)L z5YDHFoH>DRh6F*amVp5^I1>skEx}tFj?9cWRPiF6gtkH2TTalR2Y5eFrpF7q)PT5n zjJ8a}g)2#gR0F1>KB-H-3^dsk#lO>q0>%W~$bF#S4_K`D!~fyHExF!u#-eO$}t+WXhNH@Kw_Z^Z_D6P|Teq;hr9npVNrMv${I-GsT%w%k*YxEG`}YtXiW7|^4jiGvPM zhZZZkr33sgd!_n|?Lc=9kA}zOq7hP}HrAI-jMc>1n({>0pb;n~Bcqit&AM{$W(u}) zXdpfuABWbgBO511uE3FyVbGIl%(MY#EZVHW28>TckZJRfRmtK9qnsU=%D-}O$=pLv1C$<6 zdYguJ(1D=>{3oE}TeQ0HY&hf6p}&FOfZ4X3A-QaU5zrpnDvBkvdqyp-7wCL54cmzR zVBC+6hz(zYXZk}g5)y}0)q|0sr*}7hIJhrf>tW}@&emc|goL(sLYwUs_+0{OPz(CWVwB%!2E81BJf>`EX&G9P>kSCTRtC_Q zyDwv-MHo_ivNa&9WHDin+n|>2tHa(%?lfCzC@v~eWt}htJqXKe#cB+>2MoQHmjY}7 zU3<(nuk*E$-g*vUoZdo|$Hpk?(L)2zp*GH0JF;aFfY>YdK5+q!k=AZ^5;=fy3;}9Q zmMH9fTs976MrsS**WPRy{N>fv(6f_+;gqbW>BKM(4}L%t0n9|;eDk%)pT0_PjS1To z{hT!f*l@I0Z|sMSQw)+pDE?USG;Jz4(0`=8gtMlrn!TVm|`vB1f zbm)0UFVa+jK3Pe4m>G5XS00pylhX;bE(1wyTU$Fk%xwcC9w0UWqEg!j+z6cNO3BU5 zO{)_LV|5NfWEJBG1d+iC>$`%8ykSx%{ z3%WwW!!p5L0@ptc044CT40>>N){b3R%e>c{|CRH6XlYb5bC0xgc9=QqW&u+#ShSP2A&I7C921KUC#qu*K7c42hg=o6;9VZUHZ$iaAY6OA|xj!p80^T zS%6)8eM<|Gj;ub20`0ioMc4i~W`0s&dbCuZ^;su+^M*>hfPJo~O%RCTUos$mHf!)6 zN~y?MviC$$)Y4!b;|#@Q=6E*0TsBtLo0D+kWvt2kqq=@H}MwJ%`vZg6=B) z1G8XnCA2K`ae7lpN9sS#9=wo_oVAOj4gg?0dWGA3N1U-4mVxKRnJ~V*RRbqk>4I)Z zTOgf!_Fy&$?UwQB;AZoKKVc#Gq47Q-w}A4pX*xrR&gHSk-pzlH<<7w zsVIT;^?m}y?i`!3EaAU{oj@eD&^6HxTH?Y17h?qYhP<7V1<FFh0(XB7 zPZ}a_R@Nd=snSG%N^MArecA^W03x{1N%n)5Zf$XX4vw8VVybEQ$tx~Ug!(vZ;Bv#q z_e=&AqB*>M7^|cev_(HGA#z5z{mH|M1@QX@l0b%?W?f?5dxIJUEX>CQe#)5+E>F= z)6*)+fVdjQuRcH(aj3UtE$jPQI<_52XxMvE!}EvCspozNJ9KlX7~}%Gog8`*l50w9SUy9ea)=q1oa=VakrxFt*;J$9NiG<@(O$W4mKm5U%U!6qVM(l_sKsilDIjtF$ z{8>c4f2>slI8@D(<49`0`+(hWJhs%|@We=F0k;8IO&Ih3d|0+T6;O7|h6rLvuGpp5 zFHH$AsRkks534M!Sc9%az=;^ZFB;9n!kMC@r!5s^JbEMt2 zQ`-?F3(1{{8e?p(5r95L5z#K+b^$Cq6{Vhq+ZSFz!P8nY9*9;Dlgpn*|M=qX`^6hf zp($L^GNzMgUDVP^*84jkwf6`8!eXEhh?VOvwtrwDsjWTkoeTrNp3u#FCJ!gaW=^qv*>Hyr{79(#ci7fk(K1QRFI8X!F7KytS^o zC-tk}OLldvG&D82+l(TdS1D!b-!${Hc}uaB5__`fnq$57512@xO_OL!q9(Hm=5lll zMSW;oXz%&8$OThmmYjcr+3WC``jrDE!m3Yx0r&1PN}@U!h(nX69&_y4b=2LJ-s(O< zy~*A7`rB{O;AxKJBVonf$}G^8lp}-&S>%&LbaO%=TnyL_W)IuHEY)hQ*l`>%B`Ux) z-#crF{bcC<4E1JeC&IzrIFHHoL4|xwP`;%1AdrtFrU#DZxz451C%Co?3PmukucxuI5QdYDn`tzsX$eE8oQ3^tA1zn*_73HOLkbC0?@3~fT!w0mwV=U$|xKq}Piyo+<3+^19=4u_ZSNY_JZt7kKZc4Gl%%2Wd0X* z|NT$(|NnvGr$s5ND4R|tBaz6;NJdFy=LiW|8QGhXk&NtY;n;`5IkGF2^|U#%6S8M! z!sqrtulM)z{rm-=e$j<<9*_I|cE9c0^>({s6-d05#>S0z9F3f&w1xirub1FK=#{{B zOa{A4cuC9r@(5*hAe@Q#X=8s=<`GVB&Cbnjv*YB}2Io8%N~+-8zE_B9CA3d2f9uNC zYJqZC!kMrqSb{?K8)NOzM%*z`A)%PdCCoSn_T-ji8=?fxtUA1YbOZ25zcJIcYdx)) zmS4X&gfPq@Wt$vHE2^?aRq75rC{(3f+g`%}3MJ}mtZj&15+DDmpXfDTH%C*7MyEzL zaAB1ml-gdLO}rPQeNPmysXUgPe1aU5;buv*XQBEj{hf?7K+Ns`h7h;+7LCAxXzZ= zjx1jFGk76uq$qRQ#j1flqF%_^337qcRJyyN9!RpzgG$$x2tAKEKZAanuy^xQa11S- zWiWPU=W+W#YP9xTYGjBwIh+-ca67X@+w~~QJ0|PjNqAG3(0%&`fJr${+SAl+n4y8e z!R_LhZi9c{-hb8qH-DtK(EN{9Dwi5D98U2>*LuF73)oH{$YvP1RTlhQbpDSoD3+_K z5M5|Q_wCFwJqi_kV?X>sr5IdlY!|$iD0E`Pme=1i+W2l@U6bfs_>~hQ*KdG&*}VCG zpPV{+OO`XL3zK}8J>m|oUp~{e=-y-wJ}EIizT6$HD0tx%ldX&!jr}f`AW`XIH2gP$=qy z{}dW28wfNdiOFqz%CcodrV)Sl{K+;@A9s|JPp@**od`76rpI>v1?^+4F`b#KRZult>0xd@ zm2W_2ZGi)`vh-r@T4Ny#H@3evjtB1nrss&o|5Tz#=F-)XQZ9@+k7{G#w*)o^x$6eW zjoP*L?SxtDjLb~Q%PaRmYVkxBKwQ>ym&BNj4-{x;re4*ws*Y6cE+!s-DTD4!vC744 znQ0T#E&D>FR3B$=oeXrmm(|7M5UQ76ZDyaFg{cUZ1$5sU z87Q#oolb5lU0Fm|M=Ps*Q-(o^w1M(@ZauL}*G4QsU#|HExDV?&W_;6Kcp@}AWOYFy zo4$pn5@h5t!qINNMM_i5J&CSb#l*IUeCzK6+{;3%;+A!z7E5-yLXFe{*8xb?m;ncQ zo<`Bj=-*5Hrs9w++<+MicGG}v9k7nHitTRJm$Q^mVUG!y0RDF3gJ34VL5MJqM*NpFsqy( z_@FY7s1F&Rn8xMFaAR#J+0h`oE-;ve&C6xm*>07g%wX_s@|`xzO}X@ND<|h4z)Szn z++I=a2qHQ7ENgyh;lR9_Fx?3`%f7*R&lkCev$d&X6|t(63jL?;cGB?8kw@=UR=tin zkR4F>w1+%aR;Hql#V$FyBH^;L9;b2OEn${WO6b|6UCaxf%9R4Yl85?#qH(-x>gz$1 zrdIkM^2yJ$?+TPS%p0se(4C@Q%+KsSvEjaLn!O@^>ZJ^r!q3K7bwWc%wEGsz>UFtm zbSKKrq=7m(^z7pslfDv}FNx7Y?C6p&r(T1pmt0aJK^2P;|CuZswi7iA`MR76*;=2g zL1DPm@SQdi3bJ@*BM^2==H}a0!yer;0>qDZ;|Z4X1FY1sYlC!Tz7kLFRa-}vHywL; z{D3(hT@V*GMC?pavwDU0_zHtv&Ygj7<1}^e<3P5z|IX^;4f@}@mvf#JU$W4&*m^&| z>e5G;4-63QC8CLlEvop31<)UO-CB4_x5W`iZIc`k z5MUM;wk_-5~S!WO}R&akTc;yHALLiQDF2hQoxgTkhB zw;4Y@hc@R}Qme}P2`vR#kL1M*-Cmb#_3`uZK?XRme>EM;&{f@{pG~9j4MjqxKAM~`aR3% zk!w<>-R*vrl{dMi8zUPR7IWj*8?(4!+bv@{Kd+p@)CT1~!p?+-j16({c^pPciHIS zEH8l*hBdLL z{7IEQ!rFiqHs=;30{;Wj7F$d5!zuJ>`BN~LorebdneOzG`O2vBJxe-w!v(iOzvfz! zsP?|>EZSgxRw0{qZ~$dKOfGF)g0@$5toihA{OZ>&rqmie2D?A(zy6Bb?c@i}_+@J2 zR>FyYLj4Skjwv<%pUm4ge_F^gpu750hZh7+d#Cdmyt%>kkQ}zt2pzV*42s9s5s60V zz6p96t6-;YQ-^`oCMWS3%x#V&W4_xF6jZR=}x?r@wq~y8~nQk=grA20g{$gN6#(lv@U-SO=*# z0RzN)d!)drmd+v2WQt=2kl!VI4b3V}?w@P*gUv|R$QG>HjZzX=hdUqL11jYUY3n)4 zvPL&KqZXA`xX{)Cx4us5-LdS`-DzU9>IJpn{P~mWjdWqsl&uzJ&I?IXL{oeNk!y3h z01b06{&tpE8u5!r3JMD5MaHd2W}b|H&@leng!_8Byw2U6JRK}jlr{(3-l$G} zxH>ycSJ}Q=@ix1>DqD!JX<7QA`GUm0W8aF_?jwxji6#(hF>d2|x4;p+2L2jV*oJC} z1@0;=Im@z7wuBoikw-Y!MVPf3;tP`eQ=rTq0UcZ0!6!SK0|TCz;!GfnR_VbNUOIaC zpc@560%t&F=(uLs=~!@rk%($RlHj!i?@-w({-#H;JagnfFyFFU@1UY^Me0avB81Zr z_k0IV5(F0v*kt}h&4&^7izh=I^RHkd&FH=*f+LU!p(4mt{@0Pk`y~P)m++eCq&PRSxl3Qo!P-mZ(({&n(aTO;`Jcj z;;x8Cb#7>%1ny@ItfQawUb#t1LUNvl>^28Y`1bbpXNN(rfj-&v)^AQ}6u4rLrWo6~F1Fv3%Y0Q9b zJH{kZwIsaWs8*>!=^s}?dS#^l9%OIcn{16nPfbrpY;SvtxUbusMLFyYWe=OAIUnj+ zS#i+T*NxQD6moA~h~g-OEwe$~#_{2AZW ztYpRn3Aa^6O)V{BJ3BREcehR%r9w71>6Q>ICGwH;{>!qUP*S0Mcds%XJ^aYe;6eE5 zyUAk0!W?0@(y0Pfse2iwr>B=@dai2g=y0ni5^e#ByjG^VbY^>n4(~T{0VnD<7v^1| z274MKbG|>X7P`(OSpWVY6qgOf ziAzsmoa zcxr299Cgs@%1S)|4UL?g-*Bk})Xn|DDkn==n%vPJY6j;ruk{H@Dx+_#=`#j{7nkEW3no_a{gFcl55O9edN($0T3E6;FTg&xpE^# zZwMkOH3lAF!npwZo8I=;>M2(J5f4BKOaO4IOP9%!!>7 z;9^>#SO5(ZQ9pXJ5@1cpr~c+b3j8H_Sn0=S|IPhfOke}ClHud>MU&+zKam@z73 z&wwkp0gbt4ou2#h>#BLYM&-;|WcTL3)PtJ?>#&vm$q#8}AAwLr$Ha^Q7S=7vQ;RdI z%5`PxV(@p?J^qkV&JkkTs#o?zOKwdn8{6Bf>v?TCP*ZE`>PB^SX&|Za(enAK+?BV- zkd55a*dzF=s-Oa2pyMjQWq`wTc2id~PL}&jC)JXDk;!8g-#rQ#-ckfB`KTPgcWX;s zTKe?>sI=%gB8>#ykzg2%xv-DZn`4!Z%C&L!2etz)t`4RTRXPo|V)T>Z0i^ z%fpm9 zchcXgGB)&kOm9eNXyf|2aH3yQ$%hXduU@^vUu%Kz_SBeF`d+Bhs?mFeiS}(c4XP~a zREWgsu$>Wi&sPC|S#c|)Zu6CEYXZ>$k1-)9Uz0IKISXE zB)Rij5-$+S0zDajfhxm0(PeEZV!K9pAXT?UrMtED_1`J2>hNwoH(c~D18QxXq*JJr zyFCOC+{{{v8*V(?hwKfzJ7Dg>fz5wW`sI?)l>I?$L;wmT|g@Jv4 zYJzN*WtU%4rW3Ml7?X!kWWZtqR7W4=VtIx+?hV3BnWnR5Y*Zg$JPfy?%)T_%PDk#k z0r7K+XHYgh1o1R{h^ECFG^LyjIjGUe5N?i3gM@BWj^+M03NYX}XAUg1udjbNK}o4)X+kHbLc6bw zQ_eZK?lbX(6|!@6?Fi?G52XM|uPb`|yU$2%Xd~b~@Q<%p|L-d!_ILh$MGs7D4)L+O z`-4B5o0FFwQbMQH-RUsb+*|+Fg6;dfr?8~fkZ6SZrH1)cettB-ir*G_d%(c~y>bL! zl^SyVqs;{I-%fRliGmuT2ftTiGO~#nFAnKFJ2XKxut#(hs;nVaK?p!veE7?)Y|s&< zfrJDR=zVQV(aJrX_3AaGw^M#!IQbGv2bgSfwdsSw8aHJf1t5cPYR^>nVhVisG=_Kc z<37i{_E`{Ad|vF)6bgtTU`w$5{nhnNb^Ti%T+e5%RhDQ&V;TbBDf8-h!~NG1I;a1= z_Np0<+w&qL3rj|XH#;2@Q=W6VYT&;7ZJuS~kwZ*DYglTO)y({SroT74F!)SeS5EC& z$`l+`Nc7%Ep2A0%=;%`5BU!^vulDR>tHe=x?sJF&nqYZ*FF*-J@#}woVmT^raT9s^ z|0RcoZC<3UoZbDnI}}vx586mo>+G-jkgRZ-&q!8VE> zFipX57wxka&kf;ThP@>lT3QCM%_+FZ02d?{GlfvM~| z_B}fxKs!9~iEWo0C&0?*$&$@%3-@OoJW zGMTAs@JEax7;l#A&TOpi3kMPpbWRS}_!pLzYIl3&Xuf7Y`EmlH5IjU1!2wWQx!ps4 z>zMoj`{(a|#|mcSlaNHVcC^D)VAM&l9^SvsGFkG1Hb$X}tD~Z#%5r~r>mllvo15EV zsNji|dEDdgg?Yu6eM1~r#j{jLTE*F+{Q20`^$&wCD9Tpn7iqIEcMoKX=kn!-r6qpm z1D!u$w33@dc8ZZy98@lmN>jjtRJQ~6+&DZW!neq~5XK3<2@|(=iQPNYt?zaB7Mc3{ zii%5=tP=gdw}MrDAV2V&D5|h_aKaHYokfiEL1I2~DdArFy)Utz<-9kzv{dN6wbH%W zE2pyiE`@Bd7ilQhmqgK=$g-Ok!14JwNFCyMdY7YC*H*gq8v&s*ar9#vH58V3*|4@W zQU$i$x9@fsRT=|1MB&5i`yYnDM!ewtQTzC>U%&c+IZpEKEX)%a=J3|bz=!xrzomBt zs--x-NJ|Vx2=LKqQ92wf)r@-qGoT>ii9(XBf|t$hx`CGJ>U- zTBDrTQbcl{vezFqdN3BS|3s}LQaU>SfBw~^gr7mhQ<(H~sge}jEc#(nClBi?7%p_( zYr7))7bKj~v5J@5>`-ivw4?Lw-S}hGmrs5izsb3?K)J&P7(gt*CgTX*LqojaLgk6v zKT>w%a!dqo^adO-Xg zZns@cy6%F8uE1(gYP>jWlvjTZV%znugy-zkiZ$G z_ih!cKFCotsGxMmU|kWcJL|Pkl1$|1tlIu#u>rl4 zcLX^_2VsiHfCjj3AYafDt)nH(Rmk{Slj%$6J(vr}JPsXsIm8!-t^>_jUZhp}?n=%I z7{f6DSn@-|NB0&S%$QU4CUeJJ>bXkiMQMbYkWN`$$Wd2!nn*zD# zdJXH+6ly|L(7isO{SG|1{HVO!DZ~N(_{n)~z-es2X$U8_?DA(h8;(T&^qDiq6xvqx zDxA-PONDeQ0UXXnwcBI!&mXeti*Cm1j6c9N)w_Vw9S3nKAf8v`g}qaStcvcE(FZWR zTwXhCUi#f-P!|L?hj^#%Pr9kj;6wYTPv7TH!aWq-j01PD_~cJ_;F~BEhp!C{dY5jb z*y?K7OQZfA=h3BnWd&Kz-cO!BDq#bsNLLF7O*s$m#?;t?eLEu6`OPAu;co& z+}pB_KJB2@q5p=$BJ!t{0Gf`Oj_x&x^PJh#r0qV^LH4M;3fbP~A^Kcu)ZbPG*MH3( zNqQh8Kt}0B05{cv)kqA?z(DYd@Wb|s{*FV-r>uZF@Oq#_o-lmpIm^!ryS1SY@W_{p z;d<4cx=E5=dbm=?@T6N%D_v#*5^o2CmkNWDs-&9%0N4Ocj>s0_mEb_kWQ)=+xGnzl z{X41b6^;a%`uaoN1c;UX&JJzkAYJi+b8|nRK}G#prPFU$k33viTWbUjiUeny82wJ& zOm!J(06TXwSPp{CHxzOML?Y1$NPRY{9*GdPH|K>a9(9K98F?w;z_MNI%T#erJ_Nod zzsejLNTU@6he}URZ{{lH+e{!3*a1YEB;ipuK51786Zb}eF?)Xtw6CCdjh#1(yl`OU zuCX(v1m7!cc-X*YY4qiFkbC_blfQnk8*nz5+jDR&@q@3+9CeSQvv7Rh-4YM7q1oIs z@GRg98F;8Vm33?##-gz`?WO`;lIx!+(+dhhmF5pXhUhi)3~Cnk8~e$KeEv6*{?3 zz64Hi?o;em++U8L4NcSDa+3N}>_O~7kdWNUSq&_Fhi5;HKI#jUQbossUi$01`=CSUqMDM{Ro9e#jEc3dMBCjcohfPn%f zdkJr|&g?l~%c##P#U~Njk}{c?pN}aSbiFg^I*pU|E-fr`XOCOpAcAaLb>u;He-gL^x4Vz`T6fuD_>uo0XORcLT7+5OQWXr z#s>!}`uU1a-BjT{h{UR>iAOKegm3MtpTzodr3o-id2q;Add|{HHh**e*RRLJtD5T5bMpH7$w;0twJi(jlFrHX z>ZRW!k3A=l=g_W>Y$n3)?-!{X2_-xLzI1Ug!}W^W%p3-eg~NiJ*9X3)rzQWkEh8N0 zD80*^;uUJS0MV%jBQl)Hd`L}woFsKlS%@Unb5Ak08XuK!3)wx}GG)l{f>eSmoDPfW z_)+#OyWEq#*I&$d4#0_8S^=8-{FAGO{bFJBHSvFVaEDQLsu}Lh?7q zcP^gb+1Ea0s9_G#W4kb6k)ei3j`s~FcQl!Y!A?j(Jgb#fN2ge+dLGquPcQr>yveBwX z)dvKX2dKI#2X?%y;~91+ZgJ3XmE~7g??mmC&-Qx_@O8Q|WA;NRQJP_nvIA#1y_E=+ zl>lu^Q#}P-X8IoEqrQC2XLl-+ck@l*K&zjA=>?Um7#{H4?SqmIwUTgcGZQgL0NLud zFQ_#jsEiP;Ovor?m*fh(?PW%JUz6EWH_UKq18{0mnJNmw8l~cQzy`N^?tk$neDMtE z_zAu?1tD`>kv%mEHS52p{zc&cT;Tw`l^(`DzAuxb@jAa1Mt~IWC-zM3UZhRPf-v;z zvQcHN#ukMsvTH*d+y7o{3EI07d9m2>!v|S4%XBU73X`Fv;`i;sHCbUYc(bWKX8L{< zJH6{Ml=rHA0J3i!O=zv5pMm=&w8`k$fgN({`tJk}?kI%;Yz)fVhGxO`X8Uw^K_le( zas{1kwx3e8JeHyj(f~z1^XbsX6QEXlPa&wu6yr;c3XFd5+0YTH?jI%Lc~D9*)F$4A z8p-l$ZIzr2x%z zqygaoxtw6jH}s^i+ueLj9Hi}U<5p^ua<3H=i=gT*J30X=R2S-cS1VQ+JaKiI$(!Xb z^12)_g{|yf1>BzbrZ^;?G~Er}Qzj!-2jAI2YYi)cmP$~-YC?^u9T_AE^Vqzkub<5( z_9{Xe!(E8Nek_ z-5bG7OJ=BMCuLW_E2qFyg}I_JF!4gmV$Lu9;`-+Chfpp+=w8p&l*Mv{P7-Bmhe&-& zkHoUx_e(ehIL^I00tN@GH1Z9&q8jc;#9bbcyV!A@$3b0d#(6{S4}07NVww2a?mz^~G*)sVT%lGvLN&kpNpY z$IM|eM!#W+jDWf}*u?0I%;O5#(!!w89g2GmG0_0K5U)ITS?W}eCW`e*!+^jn> zfUB^6Gm(j>aO(@KTT{RTD(s0i@i_#_7nxQhlLG#GA^o-%uedSoq1Z=AgNiv6Gr#w& za&H2frU;GR#l(7ayY0XPUfrB)Y&2na1~(xOA^t+T^px3^WAe|o49j#; zxS#GjNqOy0IAax;5}6+UMWr+$I?4MnB_=g#$Hc-^zw_Ifch@2T18|RH)GtO)doj;{ zN`evsU-*?M%g>-0l7g|hqG22r0&i58xpuu}AaB{3V7a;GR^^9cFcm{ma63QzGuY?tUqt-IEhbD)r~I5XBz@^ z40vcmP9oXs=JgK4F4eBdQ@{I#((p#OY$b%C^KKD0@l<1*d1#+>6u=RF+=}Bp82b55a zA0wc_S__W^cy(%$U;tq38QAcH8;X%`=rY`@&}N|A4M$vgoa7Q833zPada=hgSVe);e2w--Lj{aj})dxa*^33 zI^3?@Oa_Ip`8)=eEFvZ3bKF(+(1Ss&DErf(4<{Z%7-SCGv#}6xnPrm+J!Hj2IiI|VuHW6X zIq^^LZQ6ePRk;cHV9C`7tJ}#y3c<1!(gVK87^zxR{=o4cqUePgyMyP1E#DD>r-CeC4b9|kJ!d#w-_Y`z< zmyHWT@YK(uZMZHUhf1UWSnr?Qb6aa3i$A~0y?oY`#DNVY40LxpRSf*G0*JZV;^9)z z*MP6dtiNuOo2KLNC-w)(@#Z96LDl5%!kfiI_tu6MZjY~J#34xa=PZX1c2NX&Y5kSp z@ci_Nn)|PRnh8D&`SHU22!I<2{pwbjX^X1H--C@xzL`$%)K;COIUO?EJ!fZT+=t!r z?6D3X5alltQ306QWj|H(!QTmrLkzc)mnd!uO?Ub*A+MkEecdVK`Qsz+y&-rzb*Z+Y zT?P>`6cZ1TS7*ShA6xc$UOJpM@ldHQ#*x6Qf*Q20aY3txChM`o)0?aLE0_ zKJQ8@(A+DvJ(O6iF2eRk0n7hWyIReHxeF7+!~{qP0Fd6`bg+bsB8Gdj<;UxXmcRDd?AmnYQPT9W|0gSc3vFd2tG6Ejt81qH8 zjJLS0HD))vgH13raXTJu>;WkA=Q^d?cnQO}$Hf{Rp%LJ(P8^X}rl=$drWzj^xbknXuerSfMcM7K&cJU!3TnDViV zTtINpTg&E@GlPb;Ar$~jBhH|@5WCvgqx9d#;`ZgofJ%9(sf;!5TQwfi7|XGEmftnE zt7)4%$am$%D|U`6nNYemt@MH|yN%$N`_T7vu1cc|mJ313F}EKgEuT6I!wJT|Ct4 z4*jMXsyRuV*&7rTe4gK@4YmH$-=0j~etG7oX}H%$j90ev=Gn4|DBfG)jbk!0Mvopz z!;l`SOm#Xb2>DeYHzOl+o+Y#q@>COV_+gUtSs|-_s<45Fe}=YahagJv4w*Cn({uXh zVXNp^J(>wuED2+V84F-|j-!8W>wS?1C@8f{+Gj@=0o&>XAC?}+$xI*+-qNkzPQ&le z)gQml?dhypHh(vE=bD-z_-hwt=&5ph)(e~BGIg#Cjg5`8eK5kiF5bF|6IzUUM1~ij z&DRz>$-+zEx+O?h1waF{O`+)-8}8c{CvMk3;vBGYUqE|fR)u1L4sV9e)$lz|uWGRP ztb(xfWf`fd_hn^V&`xOM;^LwWvvcGFG`>MD2;QmsKd~di>po0y<^aFL zAEtegh7aXs5qDL8AH22-6a4CZkDrMX)w8QE(b^1=1WXOguX_!HbQYx@-?>Vwjyril zdqLV}V&!w>_>@*w0H~_p?PEjp@GoQ&>^X^SE6xikA5a%!8a2dyN)zEKf;#Bu)!Q)Z zj3sU#x;{X&s*5DLVffHz<#W!I{eUE>2g23!>QYkFK``>F&d?x{Ed_y?0+#t=q^gs# z6DFRtl1K_3qNpUCn(mHKlF!wTcSuV!?g3Ko0@Q(EbU`#E|4%p!f>nd6I9bIM zTk~P3jH-Os*HJe1UJ@{~Dz(u{a2%S_k9YI%@;1Vi1jYb!zp!aP*Dvz&>my)lBTLJ> zFl^cp1yAS^nQ>j^1Tw3x9fKTvtW=G z`^H0a-jwH>tfPP-GXF{k<--kS^~5)CUPCsu5e|Qpb!U z5eU-5dGV3KMi?M2>S5r@C=8IR2w;}*%oRL80JmVAN0T2@1*7FQu9&v@J|H2iQcKr5 zpl$}1nz_vJas90d;vm1|bYvc!bf_e~0(pfl2OBOVp@>{BVw9ujq%-IsS?(*AxagUj z?8aWwH$EU-8MPyFt!yXuWZo6TkQU}00UWpRhXW~knCTz@QH|ykU8A!ry{9mOy3ybx zQOD+W`q>nh!t~Hl$iK^WYcLkMRNoZ(vpEOo0{7J(6WKfFFcP5rSMAd^i|Wm9PJez? zbeqRoX>kfpx?kh-L}BW{vAfO^svRw8p-q(Lqx-8Q(_Xk{W6ue3Cp7Iq!E40dFPIfo z%*%C)8RT|kRaoIq1=_x1LNI&H_LrSV2(xwKL-l~LpaEe#`Oqib9065zvGgx z0_w!(E6yQT#Ee1j{)G|;n5z+ex9iVD+qu}pMBMjZFrX|fHug`nK1g{|f3??6)FB3F zUFV0H-pD9Pvnjo`OS7tPClC%@Zj-0oZ0MUuqvPY_WlNGF#XPzN%u|(S@Y7S6Zt)}jT3%&jziP=5=;O+6a4Akki{m9hf|*}v0Ge^>a z-VQBtr+dhW$lyc%FBmB3!3v>V;4*e%M78hF@8q3JtRBlM^??n*z(C(9;I%Ghg*gp; zgOZSYt}K-2px>m>#I+zl|Fm8V_!EIQ9&ts5!<4L;N)J%H(8N3j7cwmMm?TG?*s9pl zYq47+&Bj}`SgPeB#9&4(LBD+xG~FvB!{b)j{sRIVB!gWVh2srZz&5ZLLH({6VLj$b z66;)io9K-Q&}2)2%jx9Qr54b|Bv;^bWJVTvj^6LeIXB5ytfquYrcq(N$!|~|(+y!3 zlWVyaE9rfCWuRAb#WH&l2G?ZA zVV`~m#XAajAc5$V*`7|-bOo5sC{#fs{;qlLIQ3lfGx(C;>>UZJQ6f^cDB8HG{S+z= zWS}+U&7+bp9~~Y&N}b3XcFpKnAwcnmL*$LFo?digOm1={p`zjeU0rk^5#GQ>Vltbf z9>DZcM$aWAio*N@>EXY_S>@NlB){8HK9Bq<;h62g;ZVNWF*G!^T*c+kTH_(PesfiI zO9i@IIA5fV5iX!@Hz3x{eOgO5}W&2C*h1b5IuD&4~a5qMOJNi8L+mxeaI>c--iFE5bX^tJFG(VUn-^mOa$D89Yib0EIDDiS*pVl^+%FZ)tCrehZ>P;Ut zFK?ZB0d*{e(T9#>-8DGT{N=$Vt>Y>-Z!C+YYQ-h`vBxpx1cdj3hil5pbQ{AD*58~NFSta!ZKIUsc z1P%{k15?6X)?7YkCbG?`bO$F6B?<=DUv`{UrZYP|$LCXQVX}P`UfAEy4|#*-4lr-Q z;gIdCh02MdD+(OKFzj4mUHeY;d^b2%+#dKChb&0{4XJxr!z8a1$UXPEx*uEMLQtF|f zO#V0c@IEi8w~(e|GrDc7wCxJ%ZS=-sxAI|LWjo+S~H_?5o3F&xQgE_#d^(ZKL9eIlX=nlippHy#l zyNw0?=3-6tdw+u$g-Q;dAXBvKd5mbm<=<`cto6vGK&|LVVPMNPC!L))Y3(yy+w)aT zqmn8`{p-f?5RMN#_|aEhIxqypxTLFL{OGpaLDWY$yjpjmdBET%yUZ{PZ*s4!GD`pH zP6sIJz;8lDM`~cC-cSbf#^$^BP8^hAqhV4Dt*5yNqa+vv@JvyuLU3N1yKwnDcTk^n;M8NSKd6Pqf_rCmDX#ojQ2}L+(lTqg9bir zM-X>SwqR!!>_djL1vIyKL8Dn=2vzTG=-=BsJ>czQ)VB)VV{@&iCa4&}X^g-~8e%`& zW4!)!B#*-I#%0q}r6a{K7c=q%{gz>frsh4(INUceiadgH*W*u%61A0=#-443wlwUz z7pUDxx~=0tw&Vi1Mv-7cBAK1b)C8$TXLTzNnDO{@g67~SzeJ%fng|GDM#NLN2%Shl zHYtZl*N^C0h*wuudWa+{sa5(Pic-MNL2K42=!nFs2eI4`^KuNVJ2pP=!V~?%yZFN2 zj&Bs8%^q)=bvp=djU-lvFyBf1dtV9bpxh>`@3Er6lS~e&D-;sO-dwhqn$pi)gaKn3 z^AYt%da<96k=B9=knq63VA~7efPoY;H) zqi!tpdW^fsqL^UhQxtWEo7^jKq}b8NRr}(k_5d`*s{><)sADfVjd*Q!d)333Z7-_u zYagNfE@tkvW#K!QX^T%fb%$F6mwLr>XLCp^QKFA9TedR@E=3P6(T7R;x^ zu3$Ug%p~3CBYyNRL$KVFPrVm!o&r78tKLGAzCGz+fgkej)Svv2Y~HDqpgGwjG<1n9 z10XDt^QDx3)u!}5*xUfM)G9dN=GuL5C0S!I-=xb)Y<%XuvSP43}5PEuI*_xHY0C%@b; z`sim)wekrg6~*C@Ynp!w&PN=>{5Zon z@a0pgWB;q(?20qx89N`nvK-&ix@E zHNy)5>CV5d4%wx)O@zN!Uj5FC=l#0M=@#53ZJ6`{4L0yYurIhwi0@!*f^Qiigp*R{a`ur9SHeji=v7On{ zmb++b80xH`T|{NU_Y0X~ufJHE5Ff8o_~6cJef-?~TF*$S^vJgdhKJV1W*RgiTVRuy zVD|KDWWw+L4z*m}L6En1scTJ7IB3e~DEyO8_)4#VGq5`9W-2@EOY9vNZgvBlKYQhI zK2MHrP=71t-@TV1k3t`FE-V0AXJRASe9*>{b`1!*Z)fB6;v6{B;*xZYbFn3#2x>mP%NtTpL@?)@F_}LPMB-a**yUEyba~L3qv>8 z0_w!kw&q9T%`_Cm&zvAhPD7IGV+@k0EG2UK*Ue2$#_A)+S}z|rvecc<9c|Q_rF$vE zpYH}!dtc32tTM!BKeKnd70*ot0Y(J$d0vq0Q7}_$AlTyT@s1(o?N_@$z38;FXXS(2 z*zPZhHRLb-=Wy=_-0!gjo4mX!818`r5b@}2`2*V(4M+XR_W7P+_o{BqRlB^*Y`_#|-HwJ^a(-NN!>X1(!W zlzP}b4gnT2-&N=zTaBs+Ehc6dYtI7&XmjE&a0-CJlNoHu+h@Fs?&EcH!g)0+W8xkQ z4Kaj5o~jV$8rtJWk<+*uv3nYML(+W;_{6w44F5-QxUQ|)+sW2em4aDRy?wO^CN7IL z4iZO4N5d^0oSYhgk)wfCw64pgsn9br-cj}y6cH&sulOHDjGD)UM9LKaUc;5SlT~&2 z#LgT3k61j{4MgD1&@#)ZQtav#2Pv4lX;|MgfJUG=vfNsLBZzt61fz_Dx@Dc5N@fPi zg|@C2=~I^K>1^mx-uJ3MbaC@;2UG7mgPJ?_f>5iKB4_D;lbp=D=-{|`Jwbs8H^*maHzxGrymG^? z=T2j|4@tIzU17JgrI}e6j0;O3r4tnuJx_Ji=z)-+Al^u&i$FqH-qv?uD zN*P|17EiA^vQgbHtTLYx`9&t5&4LR)fDvYzGw?VI%{gm7{4D#5>ZkHky&AL6>n2~3 zKYvo2KjfB2vQsE+!vzOh)3*_{<>lqZFg(xDJ)EJ&DEWu>r6&Ur>4nd4XFt_2PiSp# z|6Cu@_^#gupz3RRjvNdgy zy5)}b5GQt2j3kT&F;cQzf8+FD`@jGXczhYQr812t<(h0C+Nkf61>M|w1x^FaUzEgKI;)Jd>Qe1LJ$(0L7BDEduBtZ~ zlRBU5B{vd4iEeI?A3_O#cz=ylD7r{F{+i{ZvH^#`6p7-R!gjwDzX{-b?&zsw%oAcn zCks1IIUf(!mf<&PbNRbi+hKScUW0ft&Nqy-ZwQyok=_N%Xza!stPnQ2q!y`q1xwR0 z3&p+Y&GjR{W9B{A%KwIYlWjn!mg>SPxxLC*I`J}&V5yPTdBeNwdab&RHf~eva`w1( z3uyUB{AGpuLjozE4+V@b4dmllx-t5YJ073p346%*LD^zJCo7of+RqpC6x%6Fk%P)@ z;V$a^hXwfaB&Y0ZHH<0vV5}{UonZta#Z69{A<{Sa{<)ju+fJuh48v7W-&mj42cOL0 zb}Ge^a&;cRv>;aRrOHsnj*86EQWq%;%hMJG_|=znS!Qu-d0&@%QBzKENTPK12TXlj>F&q$mP@3Wg!x9k@fqZ0b(5)cgl4dh-tkL02 zy#k^6vdrKtmd_yEQX4O7hTp=hVM%Um68GCuNxBmfLNIFXyf`W7xqIa>EXkV-N=HwG znOFjAM`qEsfh=&v^98ggZpDiFN|Am9#v+;M8ktikpvIpo?`F3WJ0i^6rXgj3ceL?Q zXrFqmOU@812c@1m$S^=soadN42;P0W;kRPB{4rEo4y4XepkYclZVjZc5E5= zBy7pM)8NI#X1Ijbj<~d}xGs|(Jm3Wm?CJ7qxEwtrgFQLm7CMZs#L{g*zZ{?pfwy3O zX+#TOP!ANIxyL7Y;QHhW(2zIiTd#fK53WxGPpTJ$dyBV$B; z{cUJtEDH#D(nq)pE3)vMfvZw^knSxJkyy_VPT=aFYn#X9bQ#X>Zf&g6uA%S}b=aee zUIft)J0+R9x81wEOL@SIetpYxadXSKhnTNhK5-9qd$(}C z@&*18unHU1cWb(DrccgZ5w(tyFJd+o%jaRF>3hymT-;q;JBR% z8^~_NOwT-P*#P}9%9cDLJYEBaLGby(XWo*fL-by);w+)}qXqLL3qh{*FUu#>`z_{- z2+w(UYJK)}DBa|C`S`2CfKK_>RPIAQVK#JSy#xcLuXO0+EtWww1^nZ+J6>MZ$`;~N zQ$zCfe9wItx#e$Rn1Mh#J0j-VoDxw#HQ}UJS36E+9UQ-) z{hkAji#B#BC1r{>UJ0zTn-e=v`QO(_RSB$mnKVEBRB&8IPm*{gj_9h%No%Lu6(@K! zaICk~U9DC-+SmfOR!VvYGySyNb3?ap!3?J#{x!w$Yg}AhVa?DY)21K?`j7~TZIMXQ zZ*ODmlVrXmYFc!D)DBD+2jrhg{b;^*-u8k^&(^v`hk%aS))TsKF$0?#Zc&Bsd!jTA4GcalJ71?%NaD;xD)nUdl!T zUs);qc{4798SMk@nxe`@t4Xl>{%-gfb^V(hE)nJ@t_t5l(>=>GD{zgNwxsPE8k)Cb zs;$(2Kf^@^cj~c(ny72O`(`cy!m4bF8_<%qo6&L^FzG|DPa^ch`JRj(t#-m(H{SY+UeAvoavOl9vIw=I`DhO9mVmrN z1iqkdXkH`q6bg9i9RcAfR9>7amo@gSSsX508}BS3_NCZT4CLwIW6KWxdJnz(_v`XU zi;FVf6#YL`U3Way`~N>$x(%*EvMN!wva+dc*^Y7SLOAx!)-5BF%#*#>u`&+XbtNKX zhfrDBA!PqvAI^RJen0~0cN0i?7+BZc;p1)820g=l-Oid0U zETHkb&d5SY0Biu*XU{lTsVQ!rxhne9O%f++xZmkJI^)}qaj)9zd`p4d6?RgY-T8I` zA^>cV1Eo|IjNTs11;YpBd3iG|o~I91ST#g1v-NxDrk%V>4?e{9Eu3B3O7E`>SSuT| zxC@$o0SwU^hw zrRC&#-(4zx&rgieFGYvFKSX1;jfFoy;R)T-OsPpgYUENjI|hOR(*-L*R)nwzBT?W$ zBe5X9e@kV9HghxkD}gg#M|xdhJETCUKX$TJo+_Zq31S zY*N5;WJ0+Bk~S4{$C?brta6zS4j>c-NVjS42mE`3mu&GNY3A3Mm7$A`kY{F(o13ccTX=W2pZRzz44}6d)B5iM%-r;Q0iS$e(-BmHf+5rmxN`+<;;-q3JYH6BRe{OxXwJZZ`bT1; z;HnvIO0&>5QZX)679l^OINR))nD(5d2uwRn!Yk{N(G5Bu6KGW^PRc+z(J<~k7iplFC=U` zxxMA(_B)%sTeOh%Pgib#wG!K;>fV@-q=_=iz=ZA6+}w6-u*=0jiiDIDKLVr~Enrcf zJSj&~KnMs3n1+2&@27nQ?D_vH1VOo0#C`n3S)k)YfKinDN{-~N0#xStKm#3ojj}*g z#%=z~m9ak`ZvD)q-K_&?OB*O0^i}&7!N5hCpkcn`2KHi7TCG=1`X@DGhAtGYIk9s$ zOxCOAIrR3a-VHSUqlt?`XR5m=K-{tVNUSVU?8^`QpHCa!HKmLDzS>d0Nxp#&{zx8* zzpsN3nAcgymDNjSG^oo1krk8XzZ>TNzKY^1e;1adc2tbyu%eEq;=!Kq` z?SpbJFr@?;LaHG!ez*d{CT(DP#|1o<7)1S~6ug~83PVPqRs?7tq&V+1)6GIb;W1y* zJS%b8JOm^zU*C^4KN})nJcrk1KIbtwa!s`SUeU)YX=K;u+=pci>LUYJ~$?B7&ZiH4KHhnHr_}t zs+S*;XnXg-#OKBcx0(p>80SFdiSqOVOhSBoHDJ!yeu9pB1kT8l?V(US90sr}VA0nG z8jCY;*!iKp%~Ss;9ZWIg!HF@MOpfk20sz&eh7AWcUeM!ZXIh-?8l0fLe9-_M5^5}Q zrtw~2n$=^ex5WfT!^QeHN2MqzvU($JbJm5oMY6O$-0p@+{J3Dd9DbV{?O9~tqtlAX z6dp=!BU3o~*uMb`Z@d~}3j(6$nZI_H2yAW#XBP>9YvjGse`pE?NW&ky0%wR)PUw_L z-K5Z_<6n(8*1I%Ov+YnM+?jtU+4g1;49}x37(Ke}ySJLs*049%(27{oJrC)ERMAJU z!h9f79D;b(BD5TsJP(n6VF?&n3uXgpYAJQaymw{p_B8@k3yu_V%62tqX^e7@jkAs}07Z1pHp;7p zW)TEIJI=1qbynCVrj)!*9o`leB9O_rl^d@Kt*y9$*sPaI#h*)SK=_RKZZ8uIiPao|36nOt(m zVQU4v;>^JdvJ`v~Jho5J5ZDc?xec+tbs=e4 zawreMI5Oi$H({agw~lPq!y@)>Byx)`br#Q|5BFoICzI6sc7<1NsOBy-Tj8;4Aq<9IA6)J0*0eu{JHrZ5<-J*I zQ17h=D6*1t9}vyO8&ta}a2r;a|FDfN-JP6&FzbP~PSH+>B?D1Df^gZdu`U_p;=uPy zfP<+FGq!+G~9O))Qc02PE-*hj2Xfi$D(*c z5APtfW37#zj%3%M0J7ls>rkuS@`dl8uS&)t+lQ}&@r{Ka5;tnieAJsAM{hlENan*` zl{)@f1pj(`7k1a*ST{CC?Wooz`a2RSw_(somR}Q_2pj8-F312{QSa3&Fu+yT5y!7KQ{U zC#gpNyQ*f{^V&;}LQZD!p;dZ>)X(K^-Y^WT_^R7rRM}V^nodZ`` zgc3jHskP6VQg{7uJg*wOH)_TT^QN7D|Ll6s-VNyiFw5W=>i^ytGzqi_rc#XQjZ6is)QEhcr-J(w;=OB9nf)pW80$}ymxwR27AutAWOjUoN}b4 z%)o^1;w}PA@ox94gj(eaSl4CpNUnc*Fn4Y=wnx=>CF-9_O(Z_)*Wx`>r<-QmZ03j` zHMehwC(kUJ@*v6e(TYruKw=vU%v`7HMRoKKLC?$zxl&l5W!qB!G z@YpjBE^yOQ81Pk&AhrVN|? zMc4vZ(2?2e#cD$Fp0x(sF&y+G)vnmBO~?-xesfb7Mm9)b%1@qD=n6(=Ta7f+%|)Xk zrXa9kcDP>FfXcl9hLw?){P9HvwQdXX^pd_}h9rP~)pPp!(+$SaV6|&L5EG>aQbvG;h&1qKySiOz4gZDBziX6v+!% z=P^g#5fpcRuht?Hx6Tv2_-6bC%Lel8XvZoTzTjT>GP!?!WwOm_=g;!EdBUb_)FXtIAtrc)qc_06Uu z8kY=@r6${qRD%qZe8-xg%pPql7%JsXq`JVfcyOqeHL7fs*RV{f{ zwpcEG?VZ|7Fo$b9g)g{UCRF>?PuF+58kC3-yYcQx1@%to#@^KXDYs$G&J_iVz*uB3 zo#v^%44TTqjqU$!Y{;0`S<@XH<~FbEfFgDaAR8ya|Lme9@SlvASKBW*OgV3^Og?WD zb({YdplPmqXy0ai1{;~qh>Tu!KW-;44tN)%tn4r;}ng~ z51_>3z-^1AFCl+2nYvPIFs6uO@C1A4p-4;aZI}tkNVAwWNrZa4Q25J!9v$UI7}Ut7 zybd-ej>BM8)y9aaMgpT`-z}@n<#0cPu4cU#^J{YIKL0f@1w0dS9rHj_%5A!P$JzV? zSCf{!AAa;qLbit{#wD;#`gBqj8l|{!J!#dquM^naH<-&#KeZRw1KR*h zh8k$aHl!7+q4hxO#PZ}pSR>&rv^$I3cuQ)0V-Y1{Rnsf~AM zb@J02N}mksa()QSZ6z{387?!+a9yE?$IIn{d43TmCo6kOTgE~)Z*Fyyz0^4CL@{8< zV_*X)*7IBVQgU^C1zK%&5rj#x>NH3YhC=oJbw{K32!wPf|Dm42K{f!$sT$WKQ(D~9 zMd5f(%l$`NKSFsd40Q5ZJK!1N8ekVv%Itt_A#h@-zK<@*`aSUe{rkw5zhO~Y0T*U9 zNRWLvZNp%bdLUDt>I=nS$F@>WX)~>mdvmx`3giqT%tpnyj=N1TVBi^w5RN@xr&tu( z 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 Date: Tue, 30 Jun 2026 12:26:05 -0700 Subject: [PATCH 07/12] save --- .../sharding/cross-shard-queries/index.md | 24 +++--- .../sharding/cross-shard-queries/select.md | 81 ++++++++++--------- 2 files changed, 56 insertions(+), 49 deletions(-) diff --git a/docs/features/sharding/cross-shard-queries/index.md b/docs/features/sharding/cross-shard-queries/index.md index 8306e5af..2e409c40 100644 --- a/docs/features/sharding/cross-shard-queries/index.md +++ b/docs/features/sharding/cross-shard-queries/index.md @@ -4,7 +4,7 @@ icon: material/multicast # Cross-shard queries -If a client can't or doesn't specify a sharding key in the query, PgDog will send that query to all shards concurrently and combine the results automatically. To the client, this looks like the query was executed by a single database. +If a client can't specify a sharding key, or doesn't specify one in the query, PgDog will send that query to all shards concurrently and combine the results automatically. To the client, this looks like the query was executed by a single database.