DBD-Patroni

 view release on metacpan or  search on metacpan

lib/DBD/Patroni.pm  view on Meta::CPAN

        "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;

=head1 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.

=head2 Features

=over 4

=item * Standard DBI interface - use DBI->connect("dbi:Patroni:...")

=item * Automatic leader discovery via Patroni REST API

=item * Read queries (SELECT) routed to replicas

=item * Write queries (INSERT, UPDATE, DELETE) routed to leader

=item * Configurable load balancing for replicas

=item * Automatic failover with retry on connection errors

=back

=head1 CONNECTION

    my $dbh = DBI->connect($dsn, $user, $pass, \%attr);

The DSN format is:

    dbi:Patroni:dbname=...;patroni_url=...;[other_pg_options]

All standard L<DBD::Pg> connection parameters are supported.

Patroni-specific parameters can be in the DSN or attributes hash.
Attributes hash takes precedence.

=head1 CONNECTION ATTRIBUTES

=over 4

=item patroni_url (required)

Comma-separated list of Patroni REST API endpoints.

=item patroni_lb

Load balancing mode: C<round_robin> (default), C<random>, or C<leader_only>.

=item patroni_timeout

HTTP timeout in seconds for Patroni API calls. Default: 3

=back

=head1 QUERY ROUTING

=over 4

=item * B<SELECT> and B<WITH...SELECT> go to replica

=item * All other queries go to leader

=back

=head1 FAILOVER

On connection failure, DBD::Patroni will:

=over 4

=item 1. Query Patroni API to discover current leader

=item 2. Reconnect to new leader/replica

=item 3. Retry the failed operation

=back

=head1 SEE ALSO

L<DBD::Pg>, L<DBI>

=head1 AUTHOR

Xavier Guimard

=head1 LICENSE

Same as Perl itself.

=cut



( run in 0.695 second using v1.01-cache-2.11-cpan-870870ed90f )