AnyEvent-Pg-Pool-Multiserver

 view release on metacpan or  search on metacpan

example/ex.pl  view on Meta::CPAN

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;
use v5.10;

use lib 'lib';

use AnyEvent;
use AnyEvent::Pg::Pool::Multiserver;

my $servers = [
  {
    id   => 1,
    name => 'remote 1',
    conn => 'host=remote1 port=5432 dbname=mydb user=myuser password=mypass',
  },
  {
    id   => 2,
    name => 'remote 2',
    conn => 'host=remote2 port=5432 dbname=mydb user=myuser password=mypass',
  },
];
my $pool = AnyEvent::Pg::Pool::Multiserver->new( servers => $servers, local => 1 );

my $cv;

$cv = AE::cv;

# multi-server request

$pool->selectall_arrayref(
  query  => 'SELECT val FROM ( SELECT 1 AS val ) tmp WHERE tmp.val = $1;',
  args   => [ 1 ],
  cb     => sub {
    my $results = shift;
    my $errors  = shift;

    if ( $errors ) {
      foreach my $srv ( @$errors ) {
        say "err $srv->{error} with $srv->{server_name} $srv->{server_id}";
      }
    }

    if ( $results ) {
      foreach my $val ( @$results ) {
        say "server_id=$val->{_server_id} value=$val->{val}";
      }
    }

    $cv->send;
  },
);

$cv->recv;

$cv = AE::cv;

# single-server request

$pool->selectall_arrayref(
  query     => 'SELECT val FROM ( SELECT 1 AS val ) tmp WHERE tmp.val = $1;',
  args      => [ 1 ],
  server_id => 1,



( run in 1.083 second using v1.01-cache-2.11-cpan-39bf76dae61 )