---
name: "App::Info::RDBMS::PostgreSQL"
section: "3pm"
platform: "linux"
package: "libapp-info-perl"
version: "0.57-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/App::Info::RDBMS::PostgreSQL"
---

# App::Info::RDBMS::PostgreSQL(3pm)

Information about PostgreSQL

## NAME

App::Info::RDBMS::PostgreSQL - Information about PostgreSQL

## SYNOPSIS

```
  use App::Info::RDBMS::PostgreSQL;
  my $pg = App::Info::RDBMS::PostgreSQL->new;
  if ($pg->installed) {
      print "App name: ", $pg->name, "\n";
      print "Version:  ", $pg->version, "\n";
      print "Bin dir:  ", $pg->bin_dir, "\n";
  } else {
      print "PostgreSQL is not installed. :-(\n";
  }
```

## DESCRIPTION

App::Info::RDBMS::PostgreSQL supplies information about the PostgreSQL database server installed on the local system. It implements all of the methods defined by App::Info::RDBMS. Methods that trigger events will trigger them only the first time they're called (See App::Info for documentation on handling events). To start over (after, say, someone has installed PostgreSQL) construct a new App::Info::RDBMS::PostgreSQL object to aggregate new meta data.

Some of the methods trigger the same events. This is due to cross-calling of shared subroutines. However, any one event should be triggered no more than once. For example, although the info event "Executing \`pg\_config --version\`" is documented for the methods `"name()"`, `"version()"`, `"major_version()"`, `"minor_version()"`, and `"patch_version()"`, rest assured that it will only be triggered once, by whichever of those four methods is called first.

## INTERFACE

### Constructor

*new*

```
  my $pg = App::Info::RDBMS::PostgreSQL->new(@params);
```

Returns an App::Info::RDBMS::PostgreSQL object. See App::Info for a complete description of argument parameters.

When it called, `"new()"` searches the file system for an executable named for the list returned by `"search_exe_names()"`, usually *pg\_config*, in the list of directories returned by `"search_bin_dirs()"`. If found, *pg\_config* will be called by the object methods below to gather the data necessary for each. If *pg\_config* cannot be found, then PostgreSQL is assumed not to be installed, and each of the object methods will return `"undef"`.

`"new()"` also takes a number of optional parameters in addition to those documented for App::Info. These parameters allow you to specify alternate names for PostgreSQL executables (other than *pg\_config*, which you specify via the `"search_exe_names"` parameter). These parameters are:

- search\_postgres\_names

  - search\_createdb\_names

  - search\_createlang\_names

  - search\_createuser\_names

  - search\_dropd\_names

  - search\_droplang\_names

  - search\_dropuser\_names

  - search\_initdb\_names

  - search\_pg\_dump\_names

  - search\_pg\_dumpall\_names

  - search\_pg\_restore\_names

  - search\_postmaster\_names

  - search\_psql\_names

  - search\_vacuumdb\_names

  **Events:**

- info

  Looking for pg\_config

- confirm

  Path to pg\_config?

- unknown

  Path to pg\_config?

### Class Method

*key\_name*

```
  my $key_name = App::Info::RDBMS::PostgreSQL->key_name;
```

Returns the unique key name that describes this class. The value returned is the string "PostgreSQL".

### Object Methods

*installed*

```
  print "PostgreSQL is ", ($pg->installed ? '' : 'not '), "installed.\n";
```

Returns true if PostgreSQL is installed, and false if it is not. App::Info::RDBMS::PostgreSQL determines whether PostgreSQL is installed based on the presence or absence of the *pg\_config* application on the file system as found when `"new()"` constructed the object. If PostgreSQL does not appear to be installed, then all of the other object methods will return empty values.

*name*

```
  my $name = $pg->name;
```

Returns the name of the application. App::Info::RDBMS::PostgreSQL parses the name from the system call ``"`pg_config --version`"``.

**Events:**

- info

  Executing \`pg\_config --version\`

- error

  Failed to find PostgreSQL version with \`pg\_config --version\`

  Unable to parse name from string

  Unable to parse version from string

  Failed to parse PostgreSQL version parts from string

- unknown

  Enter a valid PostgreSQL name

*version*

```
  my $version = $pg->version;
```

Returns the PostgreSQL version number. App::Info::RDBMS::PostgreSQL parses the version number from the system call ``"`pg_config --version`"``.

**Events:**

- info

  Executing \`pg\_config --version\`

- error

  Failed to find PostgreSQL version with \`pg\_config --version\`

  Unable to parse name from string

  Unable to parse version from string

  Failed to parse PostgreSQL version parts from string

- unknown

  Enter a valid PostgreSQL version number

*major version*

```
  my $major_version = $pg->major_version;
```

Returns the PostgreSQL major version number. App::Info::RDBMS::PostgreSQL parses the major version number from the system call ``"`pg_config --version`"``. For example, if `"version()"` returns "7.1.2", then this method returns "7".

**Events:**

- info

  Executing \`pg\_config --version\`

- error

  Failed to find PostgreSQL version with \`pg\_config --version\`

  Unable to parse name from string

  Unable to parse version from string

  Failed to parse PostgreSQL version parts from string

- unknown

  Enter a valid PostgreSQL major version number

*minor version*

```
  my $minor_version = $pg->minor_version;
```

Returns the PostgreSQL minor version number. App::Info::RDBMS::PostgreSQL parses the minor version number from the system call ``"`pg_config --version`"``. For example, if `"version()"` returns "7.1.2", then this method returns "2".

**Events:**

- info

  Executing \`pg\_config --version\`

- error

  Failed to find PostgreSQL version with \`pg\_config --version\`

  Unable to parse name from string

  Unable to parse version from string

  Failed to parse PostgreSQL version parts from string

- unknown

  Enter a valid PostgreSQL minor version number

*patch version*

```
  my $patch_version = $pg->patch_version;
```

Returns the PostgreSQL patch version number. App::Info::RDBMS::PostgreSQL parses the patch version number from the system call ``"`pg_config --version`"``. For example, if `"version()"` returns "7.1.2", then this method returns "1".

**Events:**

- info

  Executing \`pg\_config --version\`

- error

  Failed to find PostgreSQL version with \`pg\_config --version\`

  Unable to parse name from string

  Unable to parse version from string

  Failed to parse PostgreSQL version parts from string

- unknown

  Enter a valid PostgreSQL minor version number

*executable*

```
  my $exe = $pg->executable;
```

Returns the full path to the PostgreSQL server executable, which is named *postgres*.  This method does not use the executable names returned by `"search_exe_names()"`; those executable names are used to search for *pg\_config* only (in `"new()"`).

When it called, `"executable()"` checks for an executable named *postgres* in the directory returned by `"bin_dir()"`.

Note that `"executable()"` is simply an alias for `"postgres()"`.

**Events:**

- info

  Looking for postgres executable

- confirm

  Path to postgres executable?

- unknown

  Path to postgres executable?

*bin\_dir*

```
  my $bin_dir = $pg->bin_dir;
```

Returns the PostgreSQL binary directory path. App::Info::RDBMS::PostgreSQL gathers the path from the system call ``"`pg_config --bindir`"``.

**Events:**

- info

  Executing \`pg\_config --bindir\`

- error

  Cannot find bin directory

- unknown

  Enter a valid PostgreSQL bin directory

*inc\_dir*

```
  my $inc_dir = $pg->inc_dir;
```

Returns the PostgreSQL include directory path. App::Info::RDBMS::PostgreSQL gathers the path from the system call ``"`pg_config --includedir`"``.

**Events:**

- info

  Executing \`pg\_config --includedir\`

- error

  Cannot find include directory

- unknown

  Enter a valid PostgreSQL include directory

*lib\_dir*

```
  my $lib_dir = $pg->lib_dir;
```

Returns the PostgreSQL library directory path. App::Info::RDBMS::PostgreSQL gathers the path from the system call ``"`pg_config --libdir`"``.

**Events:**

- info

  Executing \`pg\_config --libdir\`

- error

  Cannot find library directory

- unknown

  Enter a valid PostgreSQL library directory

*so\_lib\_dir*

```
  my $so_lib_dir = $pg->so_lib_dir;
```

Returns the PostgreSQL shared object library directory path. App::Info::RDBMS::PostgreSQL gathers the path from the system call ``"`pg_config --pkglibdir`"``.

**Events:**

- info

  Executing \`pg\_config --pkglibdir\`

- error

  Cannot find shared object library directory

- unknown

  Enter a valid PostgreSQL shared object library directory

*configure options*

```
  my $configure = $pg->configure;
```

Returns the options with which the PostgreSQL server was configured. App::Info::RDBMS::PostgreSQL gathers the configure data from the system call ``"`pg_config --configure`"``.

**Events:**

- info

  Executing \`pg\_config --configure\`

- error

  Cannot find configure information

- unknown

  Enter PostgreSQL configuration options

*home\_url*

```
  my $home_url = $pg->home_url;
```

Returns the PostgreSQL home page URL.

*download\_url*

```
  my $download_url = $pg->download_url;
```

Returns the PostgreSQL download URL.

*search\_exe\_names*

```
  my @search_exe_names = $app->search_exe_names;
```

Returns a list of possible names for *pg\_config* executable. By default, only *pg\_config* is returned (or *pg\_config.exe* on Win32).

Note that this method is not used to search for the PostgreSQL server executable, only *pg\_config*.

*search\_bin\_dirs*

```
  my @search_bin_dirs = $app->search_bin_dirs;
```

Returns a list of possible directories in which to search an executable. Used by the `"new()"` constructor to find an executable to execute and collect application info. The found directory will also be returned by the `"bin_dir"` method.

The list of directories by default consists of the path as defined by `"File::Spec->path"`, as well as the following directories:

- $ENV{POSTGRES\_HOME}/bin (if $ENV{POSTGRES\_HOME} exists)

  - $ENV{POSTGRES\_LIB}/../bin (if $ENV{POSTGRES\_LIB} exists)

  - /usr/local/pgsql/bin

  - /usr/local/postgres/bin

  - /opt/pgsql/bin

  - /usr/local/bin

  - /usr/local/sbin

  - /usr/bin

  - /usr/sbin

  - /bin

  - C:\\Program Files\\PostgreSQL\\bin

  ### Other Executable Methods

These methods function just like the `"executable()"` method, except that they return different executables. PostgreSQL comes with a fair number of them; we provide these methods to provide a path to a subset of them. Each method, when called, checks for an executable in the directory returned by `"bin_dir()"`. The name of the executable must be one of the names returned by the corresponding `"search_*_names"` method.

The available executable methods are:

- postgres

  - createdb

  - createlang

  - createuser

  - dropdb

  - droplang

  - dropuser

  - initdb

  - pg\_dump

  - pg\_dumpall

  - pg\_restore

  - postmaster

  - psql

  - vacuumdb

  And the corresponding search names methods are:

- search\_postgres\_names

  - search\_createdb\_names

  - search\_createlang\_names

  - search\_createuser\_names

  - search\_dropd\_names

  - search\_droplang\_names

  - search\_dropuser\_names

  - search\_initdb\_names

  - search\_pg\_dump\_names

  - search\_pg\_dumpall\_names

  - search\_pg\_restore\_names

  - search\_postmaster\_names

  - search\_psql\_names

  - search\_vacuumdb\_names

  **Events:**

- info

  Looking for executable

- confirm

  Path to executable?

- unknown

  Path to executable?

## SUPPORT

This module is stored in an open GitHub repository \<http://github.com/theory/app-info/\>. Feel free to fork and contribute!

Please file bug reports via GitHub Issues \<http://github.com/theory/app-info/issues/\> or by sending mail to bug-App-Info@rt.cpan.org \<mailto:bug-App-Info@rt.cpan.org\>.

## AUTHOR

David E. Wheeler \<david@justatheory.com\> based on code by Sam Tregar \<sam@tregar.com\>.

## SEE ALSO

App::Info documents the event handling interface.

App::Info::RDBMS is the App::Info::RDBMS::PostgreSQL parent class.

DBD::Pg is the DBI driver for connecting to PostgreSQL databases.

\<http://www.postgresql.org/\> is the PostgreSQL home page.

## COPYRIGHT AND LICENSE

Copyright (c) 2002-2011, David E. Wheeler. Some Rights Reserved.

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