Routing hints aka virtual parameters
The SPQR router supports runtime hints and behavior configuration parameters. They behave differently depending on how users apply them in their work. There are two main ways to work with virtual parameters:-
Comment in the SQL statement:
-
Via SET-RESET interface:
- SQL comment = affects only one query
- SET statement = affects the whole session (unless a transaction is active)
Example
List of hints
__spqr__target_session_attrs
Thetarget-session-attrs
parameter in PostgreSQL is used to specify the desired session state when connecting to a database. It is particularly useful in scenarios with multiple servers and failover configurations, where you want to ensure your session connects to the server with the desired role or state.
target_session_attrs
and __spqr__target_session_attrs
are both aliases for target-session-attrs
.
__spqr__target_session_attrs
, target_session_attrs
and __spqr__target_session_attrs
are aliases for target-session-attrs
.
Possible values for target-session-attrs
:
read-write
: Connects to a server in read-write mode, and fails if the primary is unavailable.smart-read-write
: Connects to a server in read-write mode, and fails if the primary is unavailable. Automatically routes read-only queries to standbys (with prefer-standby semantics), if query_routing: auto_route_ro_on_standby is set to true in configure file.read-only
: Connects only to read-only (in recovery) servers. Fails if none available.prefer-standby
orprefer-replica
: Prefers connecting to standby servers. If none are available, it connects to primary.any
: Connect to any available server, regardless of state.
__spqr__default_route_behaviour
Whether to explicitly block multishard queries. Overload for query_routing.default_route_behaviour.__spqr__execute_on
The__spqr__execute_on
parameter is used to specify the shard on which a query should be executed.
__spqr__reply_notice
Whether to show notice messages. Overload for query_routing.default_route_behaviour.__spqr__sharding_key
The__spqr__sharding_key
explicitly pass the sharding key to the SPQR Router.
__spqr__distribution
The__spqr__distribution
explicitly specify which distribution the SPQR router should use for query routing.
__spqr__distributed_relation
The__spqr__distributed_relation
is name of distributed relation in context of which query meant to be executed. Is takes effect when distribution contains both CITY and MURMUR hash based sharding
__spqr__auto_distribution
The__spqr__auto_distribution
parameter is used to automatically adding new table in SPQR metadata without going into the spqr-console.
__spqr__distribution_key
The__spqr__distribution_key
parameter is used to automatically add a new table to the SPQR metadata without having to go into the spqr console. This parameter can only be used with the __spqr__auto_distribution
hint.
__spqr__scatter_query
The__spqr__scatter_query
parameter is used to indicate that the query should be sent to all shards in the cluster.
__spqr__commit_strategy
The__spqr__commit_strategy
parameter is used to specify the commit strategy for a distributed transaction. Possible values are 1pc
and 2pc
. best-effort
is an alias for 1pc
.