NAME
DBD::Patroni - DBI driver for PostgreSQL with Patroni cluster support
SYNOPSIS
use DBI;
# Standard DBI connection with patroni_url in DSN
my $dbh = DBI->connect(
"dbi:Patroni:dbname=mydb;patroni_url=http://patroni1:8008/cluster,http://patroni2:8008/cluster",
$user, $password
);
# Or with attributes
my $dbh = DBI->connect(
"dbi:Patroni:dbname=mydb",
$user, $password,
{
patroni_url => "http://patroni1:8008/cluster",
patroni_lb => "round_robin",
}
);
# SELECT queries go to replica
my $sth = $dbh->prepare("SELECT * FROM users WHERE id = ?");
$sth->execute(1);
# INSERT/UPDATE/DELETE queries go to leader
$dbh->do("INSERT INTO users (name) VALUES (?)", undef, "John");
$dbh->disconnect;
DESCRIPTION
DBD::Patroni is a DBI driver that wraps DBD::Pg and provides automatic routing of queries to the appropriate node in a Patroni-managed PostgreSQL cluster.
Features
Standard DBI interface - use DBI->connect("dbi:Patroni:...")
Automatic leader discovery via Patroni REST API
Read queries (SELECT) routed to replicas
Write queries (INSERT, UPDATE, DELETE) routed to leader
Configurable load balancing for replicas
Automatic failover with retry on connection errors
CONNECTION
my $dbh = DBI->connect($dsn, $user, $pass, \%attr);
The DSN format is:
dbi:Patroni:dbname=...;patroni_url=...;[other_pg_options]
All standard DBD::Pg connection parameters are supported.
Patroni-specific parameters can be in the DSN or attributes hash. Attributes hash takes precedence.
CONNECTION ATTRIBUTES
- patroni_url (required)
-
Comma-separated list of Patroni REST API endpoints.
- patroni_lb
-
Load balancing mode:
round_robin(default),random, orleader_only. - patroni_timeout
-
HTTP timeout in seconds for Patroni API calls. Default: 3
QUERY ROUTING
SELECT and WITH...SELECT go to replica
All other queries go to leader
FAILOVER
On connection failure, DBD::Patroni will:
- 1. Query Patroni API to discover current leader
- 2. Reconnect to new leader/replica
- 3. Retry the failed operation
SEE ALSO
AUTHOR
Xavier Guimard
LICENSE
Same as Perl itself.