Skip to main content

PostgreSQL in the core

About

Postgres native support was added in FreeSWITCH 1.2.5.

Dependencies

libpq and the associated dev packages are required

CentOS

yum install libpq-devel

Debian

sudo apt-get install libpq-dev

Configure

If you have installed a later version of PostgreSQL from a source other then your distro's repositories, and its installed to a non-standard location such as /usr/pgsql-9.5 you will need to adjust your PATH and/or PKG_CONFIG_PATH environment variables to properly locate either pg_config or libpq.pc

export PKG_CONFIG_PATH=/usr/pgsql-9.5/lib/pkgconfig
export PATH=/usr/pgsql-9.3/bin:$PATH
./configure --enable-core-pgsql-support

Adjust your PKG_CONFIG_PATH and PATH as required for your platform.

conf/autoload_configs/switch.conf.xml

<!-- to use a numeric IP address (no DNS names!): -->
<param name="core-db-dsn" value="pgsql://hostaddr=127.0.0.1 dbname=freeswitch user=freeswitch password='' options='-c client_min_messages=NOTICE' application_name='freeswitch'" />

<!-- OR to use a resolvable DNS hostname (not a numeric i.p. address): -->
<param name="core-db-dsn" value="pgsql://host=localhost dbname=freeswitch user=freeswitch password='' options='-c client_min_messages=NOTICE' application_name='freeswitch'" />

<!-- to disable SSL encyption need to add sslmode=disable -->
<param name="core-db-dsn" value="pgsql://host=localhost dbname=freeswitch user=freeswitch password='' options='-c client_min_messages=NOTICE' application_name='freeswitch' sslmode=disable" />

host vs hostaddr

'hostaddr' ONLY takes a numeric ip address and will not resolve a hostname. Use 'host' for a DNS hostname. If you specify both 'host' and 'hostaddr' settings, 'hostaddr' takes precedence.

PostgreSQL

For PostgreSQL, FS strips the 'pgsql://' from the DSN and passes the remainder of the string directly to libpq's PQconnectdb() for connection to the database. See the libpq docs for further information on creating a proper connections string.

Database Tables

Once you have PostgreSQL configured in the core, you can connect to the database and ensure you have tables, like the following.

PostgreSQL tables

freeswitch=# \dt
List of relations
Schema | Name | Type | Owner
--------+---------------+-------+------------
public | aliases | table | freeswitch
public | calls | table | freeswitch
public | channels | table | freeswitch
public | complete | table | freeswitch
public | interfaces | table | freeswitch
public | nat | table | freeswitch
public | recovery | table | freeswitch
public | registrations | table | freeswitch
public | tasks | table | freeswitch
(9 rows)