Skip to content

RETRY_STRATEGY ​

Also known as

retry_strategy_name, retry_strategy, retry (with or without @ prefix)

Assign a named retry strategy for handling transient database failures.

Syntax ​

code
@retry_strategy <strategy-name>
@retry <strategy-name>

Or using custom parameter syntax:

code
@retry_strategy = <strategy-name>
@retry = <strategy-name>

The strategy-name must match a strategy defined in CommandRetryOptions configuration.

Examples ​

Use Default Strategy ​

sql
sql
comment on function critical_operation() is
'HTTP POST
@retry_strategy default';

Use Named Strategy ​

sql
sql
comment on function important_query() is
'HTTP GET
@retry aggressive';

Combined with Timeout ​

sql
sql
comment on function long_running_task() is
'HTTP POST
@timeout 2min
@retry_strategy default';

Behavior ​

  • References a retry strategy defined in CommandRetryOptions.Strategies configuration.
  • Automatically retries on transient failures when PostgreSQL returns error codes defined in the strategy.
  • Strategy defines:
    • Retry count: Number of elements in RetrySequenceSeconds array
    • Retry delays: Wait time between retries in seconds
    • Error codes: PostgreSQL error codes that trigger retries

Common Retry Scenarios ​

Error TypePostgreSQL CodesDescription
Serialization40001, 40P01Transaction conflicts, deadlocks
Connection08000, 08003, 08006Connection issues
Resources53300Too many connections
System57P03Cannot connect now

Configuration Example ​

Define strategies in configuration:

json
json
{
  "CommandRetryOptions": {
    "Enabled": true,
    "DefaultStrategy": "default",
    "Strategies": {
      "default": {
        "RetrySequenceSeconds": [0, 1, 2, 5, 10],
        "ErrorCodes": ["40001", "40P01", "08000", "08003", "08006"]
      },
      "aggressive": {
        "RetrySequenceSeconds": [0, 0.5, 1, 2, 5, 10, 30],
        "ErrorCodes": ["40001", "40P01", "08000", "08003", "08006", "53300", "57P03"]
      },
      "minimal": {
        "RetrySequenceSeconds": [0, 1],
        "ErrorCodes": ["40001", "40P01"]
      }
    }
  }
}

Then use in annotations:

sql
sql
-- Use aggressive retry for critical operations
comment on function process_payment() is
'HTTP POST
@retry aggressive';

-- Use minimal retry for fast queries
comment on function quick_lookup() is
'HTTP GET
@retry minimal';

See Command Retry for complete configuration reference.

See Also ​

Comments