The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Pg::ServiceFile - Basic PostgreSQL connection service file interface

SYNOPSIS

    use Pg::ServiceFile;

    # Uses $ENV{PGSERVICEFILE} or user's `~/.pg_service.conf` file
    my $pgservice = Pg::ServiceFile->new();

    # Use a specific service file - `pg_config --sysconfdir`/pg_service.conf
    my $pgservice = Pg::ServiceFile->new(file => '/etc/postgresql-common/pg_service.conf');

    # Print all the service names
    say $_ for @{$pgservice->names};

    # Get the username for a specific service name
    say $pgservice->services->{foo}->{user};

DESCRIPTION

Pg::ServiceFile is a partially complete interface to the PostgreSQL connection service file. It's complete in the fact that it reads the $ENV{PGSERVICEFILE} or the user service file ~/.pg_service.conf as standard, but will not automatically retrieve and merge the system-wide service file or check PGSYSCONFDIR.

If you know the connection service file you want to use, and just want the data as a HASH reference, you can use the simpler module Config::Pg::ServiceFile which has less dependencies and features.

ATTRIBUTES

Pg::ServiceFile implements the following attributes.

data

    my $pgservice = Pg::ServiceFile->new(data => <<~'PGSERVICEFILE');
        [foo]
        host=localhost
        port=5432
        user=foo
        dbname=db_foo
        password=password
    PGSERVICEFILE

    my $pgservice = Pg::ServiceFile->new(file => '~/.pg_service.conf');
    say $pgservice->data;

The connection service file data. This is the contents of "file", or the data that has been passed in directly during instantiation.

file

    my $pgservice = Pg::ServiceFile->new();
    say $pgservice->file; # ~/.pg_service.conf (if it exists)

    my $pgservice = Pg::ServiceFile->new(file => '~/myservice.conf');
    say $pgservice->file; # ~/myservice.conf

Defaults to $ENV{PGSERVICEFILE} or ~/.pg_service.conf, but can be any valid connection service file.

name

    local $ENV{PGSERVICE} = 'foo';

    my $pgservice = Pg::ServiceFile->new();
    say $pgservice->name; # foo
    say $pgservice->service->{dbname}; # db_foo

The value of $ENV{PGSERVICE} if it exists, or whatever is set during instantiation. It does not check to see if a corresponding service entry exists in the service "file", but "service" will return the relevant data if it does.

names

    my $pgservice = Pg::ServiceFile->new();
    say $_ for @{$pgservice->names};

Returns the names of all the connection services from the service "file".

service

    my $pgservice = Pg::ServiceFile->new(name => 'foo');
    say $pgservice->service->{dbname}; # db_foo

If "name" has been set via $ENV{PGSERVICE} or on instantiation, returns the corresponding connection service. See "name".

services

    my $pgservice = Pg::ServiceFile->new();
    while (my ($name, $service) = each %{$pgservice->services}) {
        say "[$name] $service->{dbname} at $service->{host}";
    }

Returns a HASH of all of the connection services from "file".

CREDITS

    Erik Rijkers

AUTHOR

Paul Williams <kwakwa@cpan.org>

COPYRIGHT

Copyright 2018- Paul Williams

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

Config::Pg::ServiceFile, https://www.postgresql.org/docs/current/static/libpq-pgservice.html.