Voipnotes
Услуги
  • 3CX Phone System
    • Купить IP АТС - 3CX Phone System
Ещё
    Задать вопрос
    +7 (499) 113-65-73
    Заказать звонок
    sale@voipnotes.ru
    г. Москва 2-й Михайловский проезд 9
    +7 (499) 113-65-73
    Заказать звонок
    Voipnotes
    Услуги
    • 3CX Phone System
      • Купить IP АТС - 3CX Phone System
      Voipnotes
      Услуги
      • 3CX Phone System
        • Купить IP АТС - 3CX Phone System
        Voipnotes
        Voipnotes
        • Услуги
          • Назад
          • Услуги
          • 3CX Phone System
            • Назад
            • 3CX Phone System
            • Купить IP АТС - 3CX Phone System
        • +7 (499) 113-65-73
        sale@voipnotes.ru
        г. Москва 2-й Михайловский проезд 9
        • Главная
        • Блог
        • Подключение Asterisk к PostgreSQL через драйвер ODBC

        Подключение Asterisk к PostgreSQL через драйвер ODBC

        29 Сентября 2015

        Ранее, мы рассматривали как подключить Asterisk к MySQL через драйвер ODBC, читать здесь. В этой статье мы расскажем, как сделать тоже самое, но с БД PostgreSQL. Теорию можно прочитать в прошлой статье, в этой статье перейдем сразу к практике.

        Исходные данные теже:

        - Сервер с Asterisk 13, на ОС Centos 6.5 (x86_64) / Ubuntu Server 14.10 (x86_64)

        - Сервер с PostgreSQL 9.4.

        Для установки драйвера на Red Hat подобных ОС, необходимо ввести следующую команду:

        yum install unixodbc unixodbc-devel libtool-ltdl libtool-ltdl-devel

        Для Debian подобных ОС, необходимо выполнить следующую команду:

        sudo apt-get install unixodbc unixodbc-dev odbc-postgresql

        Далее необходим отредактировать файл /etc/odbcinst.ini. В Centos он уже существует, в Ubuntu он существует, но файл пустой.

        nano /etc/odbcinst.ini

        Проверьте правильно ли указаны пути к драйверам ODBC.

        1) Для Centos x86_x64:

        [PostgreSQL]
        Description = ODBC for PostgreSQL
        Driver = /usr/lib/libodbcpsql.so
        Setup = /usr/lib/libodbcpsqlS.so
        FileUsage = 1

        Для Centos x64:

        [PostgreSQL]
        Description = ODBC for PostgreSQL
        Driver = /usr/lib64/libodbcpsql.so
        Setup = /usr/lib64/libodbcpsqlS.so
        FileUsage = 1

        2) Для Ubuntu:

        [PostgreSQL]
        Description = ODBC for PostgreSQL
        Driver = /usr/lib/x86_64-linux-gnu/odbc/psqlodbca.so
        Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcpsqlS.so
        FileUsage = 1

        Далее проверяем видит ли ODBC драйвер для PostgreSQL. Вводим команду

        odbcinst -q -d

        и должны увидеть следующее:

        odbcinst -q -d
        [PostgreSQL]

        После этого отредактируем файл /etc/odbc.ini, это файл используется для создания идентификатора для Asterisk. Т.е. Asterisk, в своей конфигурации, будет ссылается на название, указанное в этом файле.

        nano /etc/odbc.ini

        Для Centos и Ubuntu файл выглядит одинаково:

        [PostgreSQL-asteriskcdrdb]
        Description = PostgreSQL connection to 'asteriskcdrdb' database
        Driver = PostgreSQL
        Database = asteriskcdrdb
        Servername = localhost
        UserName = asteriskuser
        Password = your_password_from_database
        Port = 5432
        Protocol = 9.4
        ReadOnly = No
        RowVersioning = No
        ShowSystemTables = No
        ShowOidColumn = No
        FakeOidIndex = No
        ConnSettings =

        Т.е. в нашем примере, Asterisk в своих конфигурационных файлах будет использовать идентификатор [PostgreSQL-asteriskcdrdb].

        Если мы хотим подключиться к сторонней базе данных, т.е. установленной на другом сервере, нежели Asterisk, то в файле /etc/odbc.ini необходимо просто изменить строчку server=localhost на server=IPадресБД (в нашем примере 192.168.7.17)

        [PostgreSQL-asteriskcdrdb]
        Description = PostgreSQL connection to 'asteriskcdrdb' database
        Driver = PostgreSQL
        Database = asteriskcdrdb
        Servername = 192.168.7.17
        UserName = asteriskuser
        Password = your_password_from_database
        Port = 5432
        Protocol = 9.4
        ReadOnly = No
        RowVersioning = No
        ShowSystemTables = No
        ShowOidColumn = No
        FakeOidIndex = No
        ConnSettings =

        Далее необходимо проверить сможем ли мы подключиться к базе данных, используя утилитку ISQL. Введите следующую команду и вы должны увидеть схожий вывод.

        echo "select 1" | isql -v PostgreSQL-asteriskcdrdb
        +---------------------------------------+
        | Connected! |
        | |
        | sql-statement |
        | help [tablename] |
        | quit |
        | |
        +---------------------------------------+
        SQL> select 1
        +---------------------+
        | 1 |
        +---------------------+
        | 1 |
        +---------------------+
        SQLRowCount returns 1
        1 rows fetched
        SQL> [root@asterisk psql]#

        Теперь перейдем к настройкам PostgreSQL.

        1) Создадим базу данных asteriskcdrdb

        createdb asteriskcdrdb

        3) Переходим в базу данных

        psql asteriskcdrdb

        4) Создадим две таблицы CDR и CEL.

        CREATE TABLE cdr ( 
        calldate timestamptz ,
        clid varchar (80) ,
        src varchar (80) ,
        dst varchar (80) ,
        dcontext varchar (80) ,
        channel varchar (80) ,
        dstchannel varchar (80) ,
        lastapp varchar (80) ,
        lastdata varchar (80) ,
        duration int DEFAULT 0,
        billsec int DEFAULT 0,
        disposition varchar (45) ,
        amaflags int DEFAULT 0,
        accountcode varchar (20) ,
        uniqueid varchar (32) ,
        userfield varchar (255) ,
        did varchar(50) ,
        recordingfile varchar(255) ,
        cnum varchar(40) ,
        cnam varchar(40) ,
        outbound_cnum varchar(40) ,
        outbound_cnam varchar(40) ,
        dst_cnam varchar(40)
        );

        CREATE INDEX calldate
        ON cdr (calldate);
        CREATE INDEX dst
        ON cdr (dst);
        CREATE INDEX accountcode
        ON cdr (accountcode);
        CREATE INDEX uniqueid
        ON cdr (uniqueid);
        CREATE TABLE cel (
        id serial ,
        eventtype varchar(30) ,
        eventtime timestamp ,
        cid_name varchar(80) ,
        cid_num varchar(80) ,
        cid_ani varchar(80) ,
        cid_rdnis varchar(80) ,
        cid_dnid varchar(80) ,
        exten varchar(80) ,
        context varchar(80) ,
        channame varchar(80) ,
        src varchar(80) ,
        dst varchar(80) ,
        channel varchar(80) ,
        dstchannel varchar(80) ,
        appname varchar(80) ,
        appdata varchar(80) ,
        amaflags int ,
        accountcode varchar(20) ,
        uniqueid varchar(32) ,
        linkedid varchar(32) ,
        peer varchar(80) ,
        userdeftype varchar(255) ,
        eventextra varchar(255) ,
        userfield varchar(255) ,
        CONSTRAINT asterisk_cel_id_pk PRIMARY KEY (id) );

        CREATE INDEX uniqueid_index
        ON cel (uniqueid);
        CREATE INDEX linkedid_index
        ON cel (linkedid);

        5) Дадим права пользователю asterisk на работы с БД asteriskadcdb

        ALTER TABLE cdr OWNER TO asteriskuser;
        ALTER TABLE cel OWNER TO asteriskuser;
         

        Далее необходимо пересобрать Asterisk, выбрав модули связанные с odbc.

        $ cd /usr/src/asterisk/13
        $ ./configure
        $ make menuselect
        $ make install

        В файл /etc/asterisk/res_odbc.conf добавляем следующие строчки.

        [asteriskcdrdb]
        enabled=>yes
        dsn=>PostgreSQL-asteriskcdrdb
        pooling=>no
        limit=>1
        pre-connect=>yes
        username=>asteriskuser
        password=>your_password_from_database

        Параметр DSN отвечает за подключение Asterisk к базе данных, указанной в файле /etc/odbc.ini. Этот параметр говорит Asterisk, что необходимо открыть и поддерживать соединение с базой данных при загрузке модуля res_odbc.so.

        Перезапустим сервис Asterisk

        service asterisk restart

        Через CLI Asterisk проверим подключение к БД через драйвер ODBC/

        *CLI> odbc show

        ODBC DSN Settings
        -----------------

        Name: asteriskcdrdb
        DSN: PostgreSQL-asteriskcdrdb
        Last connection attempt: 1970-01-01 03:00:00
        Pooled: No
        Connected: Yes

        Далее отредактируем файлы, связанные с CDR и CEL.

        1) В файл /etc/asterisk/cdr_odbc.conf добавляем следующие строчки.

        [asteriskcdrdb]
        connection=asteriskcdrdb
        loguniqueid=yes
        table=cdr
        alias start => calldate

        2) В файл /etc/asterisk/cel_odbc.conf добавляем следующие строчки.

        [cel]
        connection=asteriskcdrdb
        loguniqueid=yes
        table=cel

        Как видно из двух статей, при помощи ODBC можно легко мигрировать между разными базами данных.

        Нужна консультация?

        Наши специалисты ответят на любой интересующий вопрос

        Задать вопрос
        Поделиться
        Назад к списку
        © 2021 Все права защищены.
        +7 (499) 113-65-73
        Заказать звонок
        sale@voipnotes.ru
        г. Москва 2-й Михайловский проезд 9
        Политика конфиденциальности
        Версия для печати
        © 2021 Все права защищены.
        Заказать звонок
        Написать сообщение