App-Sqitch
view release on metacpan or search on metacpan
lib/App/Sqitch/Engine/pg.pm view on Meta::CPAN
package App::Sqitch::Engine::pg;
use 5.010;
use Moo;
use utf8;
use Path::Class;
use DBI;
use Try::Tiny;
use App::Sqitch::X qw(hurl);
use Locale::TextDomain qw(App-Sqitch);
use App::Sqitch::Plan::Change;
use List::Util qw(first);
use App::Sqitch::Types qw(DBH ArrayRef);
use Type::Utils qw(enum);
use namespace::autoclean;
extends 'App::Sqitch::Engine';
our $VERSION = 'v1.6.1'; # VERSION
sub destination {
my $self = shift;
# Just use the target name if it doesn't look like a URI or if the URI
# includes the database name.
return $self->target->name if $self->target->name !~ /:/
|| $self->target->uri->dbname;
# Use the URI sans password, and with the database name added.
my $uri = $self->target->uri->clone;
$uri->password(undef) if $uri->password;
$uri->dbname(
$ENV{PGDATABASE}
|| $self->username
|| $ENV{PGUSER}
|| $self->sqitch->sysuser
);
return $uri->as_string;
}
# DBD::pg and psql use fallbacks consistently, thanks to libpq. These include
# environment variables, system info (username), the password file, and the
# connection service file. Best for us not to second-guess these values,
# though we admittedly try when setting the database name in the destination
# URI for unnamed targets a few lines up from here.
sub _def_user { }
sub _def_pass { }
has _psql => (
is => 'ro',
isa => ArrayRef,
lazy => 1,
default => sub {
my $self = shift;
my $uri = $self->uri;
my @ret = ( $self->client );
my %query_params = $uri->query_params;
my @conninfo;
# Use _port instead of port so it's empty if no port is in the URI.
# https://github.com/sqitchers/sqitch/issues/675
for my $spec (
[ user => $self->username ],
[ dbname => $uri->dbname ],
[ host => $uri->host ],
[ port => $uri->_port ],
map { [ $_ => $query_params{$_} ] }
sort keys %query_params,
( run in 0.873 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )