Подтвердить что ты не робот

Хорошая библиотека соединителей C/С++ для PostgreSQL

Мое приложение - коммерческое приложение GIS С++, и я ищу надежный/простой в использовании коннектор для Postgresq. (Боковое примечание: я также планирую использовать PostGIS)

Есть ли у кого-нибудь рекомендации, основанные на вашем опыте? Плюс был бы, если бы вы опробовали различные.

Я посмотрел:

ИЗМЕНИТЬ Кроме того, кто-нибудь знает, какой хороший инструмент для графического интерфейса администратора? Я вижу список сообщества здесь. Но их так много! Я развиваюсь в Windows и не плачу за коммерческие инструменты. Кто-то из другого сообщения Stackoverflow предложил Maestro.

4b9b3361

Ответ 1

libpq ++ - один из них обеспечивает очень хороший коннектор для PostgreSQL

SQLAPI ++ - это библиотека С++ для доступа к нескольким базам данных SQL (Oracle, SQL Server, DB2, Sybase, Informix, InterBase, SQLBase, MySQL, PostgreSQL и ODBC, SQLite).

Абстрактный коннектор базы данных - это библиотека C/С++ для подключения к нескольким базам данных (MySQL, mSQL, PostgreSQL, Interbase, Informix, BDE, ODBC). Он работает в Linux, UNIX, BeOS и Windows, а динамический загрузчик драйверов для ОС ELF находится в разработке

Navicat - отличный инструмент для графического интерфейса PostgrSQL

Ответ 2

Взгляните на SOCI. Является открытым исходным кодом lib под лицензией Boost Software (одна из самых не ограничивающих лицензий вообще).

Эта библиотека разработана специально для С++ с идеей общего программирования и безопасности типов.

Сайт SOCI

С уважением,
Ованес

Ответ 3

Я написал обертку вокруг libpq для наших нужд. Я долгое время был Zeoslib (http://sourceforge.net/projects/zeoslib/), но они были созваны с проблемами, которые я использовал, не поддерживали кэшированные наборы данных и простые медленно.

libpq очень, очень быстро.

Я просто загружаю версию Postgres для Windows, копирую все библиотеки DLL в каталог lib и экспортирую вызовы, соответственно .h и link.

Я понимаю, что это очень низкий уровень, но я не могу особо подчеркнуть увеличение производительности, которое я реализую в результате.

Наше приложение представляет собой бизнес-приложение учета/ERP-приложения с довольно большой базой для установки с довольно значительным одновременным множеством пользователей (60, 100 соединений)... Это послужило нам очень хорошо... Вы можете ответить, если вы хотите узнать больше о том, как мы обертываем libpq и обрабатываем кешированные обновления.

UPDATE:  

Из запроса здесь приведены шаги, чтобы обернуть libpq или использовать его непосредственно под окнами.

Сначала, чтобы установить уровень, я использую Embarcadero RAD XE в эти дни, поэтому следующие команды - это инструменты командной строки, которые поставляются с RAD XE. Вы также должны убедиться, что ваши средства командной строки находятся в переменной среды PATH, если это еще не сделано. Если вы используете Visual Studio, вам придется выработать эквивалентные команды. В основном я создаю .lib файл из .LLL

TEST.C - это минималистский тестовый код, который я написал, чтобы убедиться, что я понял, как использовать libpq, а также проверить мой успех.

1.  Put all the DLLs into a directory and copy the include directory.  

Вам не нужно устанавливать PostgreSQL с помощью сборки MSI для получения этих DLL, хотя это тоже сработает. Я скопировал DLL из двоичной сборки. Файлы .H также были взяты из двоичной сборки. Поэтому мой каталог выглядит так:

  include\
     libpq-fe.h
     postgres_ext.h
  libeay32.dll
  libiconv-2.dll
  libintl-8.dll
  libpq.dll
  ssleay32.dll
  zlib1.dll



2.  Create an import library against LIBPQ.DLL as follows:
    implib -c -a libpq.lib libpq.dll

должен теперь иметь файл libpq.lib в том же каталоге, что и ваши DLL.

3.  build the test program (or any program) as follows:
    bcc32 test.c -l libpq.lib

test.c

#include <stdio.h>
#include "include/libpq-fe.h"


char *db       = "mydatabasename";
char *dbserver = "hostname";
char *uname    = "username";
char *pass     = "password";

char *SQL      = "select * from public.auditlog;";
// char *SQL      = "select userid, stationid from public.auditlog";

char     buff[200];
PGconn   *dbconn;
PGresult *res;

void main(void)
{
int nFields, i, j;

  printf("Attempting to Connect to Database Server:\n");
  printf("Database: %s\n", db);
  printf("Server  : %s\n", dbserver);

  sprintf(buff, "dbname=%s host=%s port=5432 user=%s password=%s",
                 db, dbserver, uname, pass);

  dbconn = PQconnectdb(buff);

  if( PQstatus(dbconn) != CONNECTION_OK )
    printf("Connection Failed: %s\n", PQerrorMessage(dbconn) );
  else
  {
    printf("Connected Successfully!\n");

    sprintf(buff, "BEGIN; DECLARE my_portal CURSOR FOR %s", SQL);

    res = PQexec(dbconn, buff);
    if( PQresultStatus(res) != PGRES_COMMAND_OK )
    {
      printf("Error executing SQL!: %s\n", PQerrorMessage(dbconn) );
      PQclear(res);
    }
    else
    {
      PQclear(res);
      res = PQexec(dbconn, "FETCH ALL in my_portal" );

      if( PQresultStatus(res) != PGRES_TUPLES_OK )
      {
        printf("ERROR, Fetch All Failed: %s", PQerrorMessage(dbconn) );
        PQclear(res);
      }
      else
      {
        nFields = PQnfields(res);

        // Print out the field names
        for(i=0; i<nFields; i++ )
          printf("%-15s", PQfname(res, i) );

        printf("\n");

        // Print out the rows
        for(i=0; i<PQntuples(res); i++)
        {
          for(j=0; j<nFields; j++)
            printf("%-15s", PQgetvalue(res, i, j) );

          printf("\n");
        }

        res = PQexec(dbconn, "END" );
        PQclear(res);
      }
    }

  }


  PQfinish(dbconn);
}

Теперь для доступа к системе PostgreSQL я просто копирую файл libpq.lib в любой новый проект RAD-XE и добавляю libpq.lib к проекту. Я завернул libpq в драйвер переноса базы данных, который отделяет мой код доступа к базе данных.

Следующий снимок экрана показывает проект RAD-XE под названием ptidb, который, в свою очередь, использует libpq для поддержки PostgreSQL. Я также поддерживаю SQLite, кроме SQLite. Я просто компилирую базу данных напрямую.

Затем я просто отправляю DLL, перечисленные выше, вместе с моим окончательным продуктом, удостоверяясь, что библиотеки DLL завершаются в том же каталоге, что и мой продукт.

Это должно вас заставить. Если вы также заинтересованы в обертке С++, позвольте мне знать, и я отправлю еще одно обновление с некоторыми из них.

enter image description here