una - Buena biblioteca de conectores C/C++ para PostgreSQL
parametros para bibliotecas escolares (3)
Mi aplicación es una aplicación comercial GIS C ++, y estoy buscando un conector robusto / fácil de usar para Postgresq. (Nota: También planeo usar PostGIS)
¿Alguien tiene alguna recomendación basada en su experiencia? Una ventaja sería si has probado varios.
He mirado a
EDITAR También, ¿alguien sabe qué es una buena herramienta GUI de administración? Veo una lista de la comunidad here . ¡Pero hay tantos! Estoy desarrollando en Windows, y no me importa pagar por herramientas comerciales. Alguien en otro post de Stackoverflow sugirió Maestro .
Echa un vistazo a la sociedad. Es una biblioteca de código abierto bajo la licencia de software de Boost (una de las licencias más no restrictivas).
Esta biblioteca está diseñada especialmente para C ++ con la idea de programación genérica y seguridad de tipos en mente.
Saludos,
Ovanes
Escribí un envoltorio alrededor de libpq para nuestras necesidades. Pasé mucho tiempo en Zeoslib ( http://sourceforge.net/projects/zeoslib/ ), pero estaban saturados de problemas. Los usé por última vez, no admití conjuntos de datos almacenados en caché y simplemente lentos.
libpq es muy, muy rápido.
Simplemente descargo la versión para Windows de Postgres, copio todas las DLL a un directorio lib y exporto las llamadas, incluyo el .h y el enlace correspondiente.
Me doy cuenta de que este es un nivel muy bajo, pero no puedo enfatizar lo suficiente el aumento de rendimiento que estoy logrando como resultado.
Nuestra aplicación es una aplicación de negocios de tipo contabilidad / ERP con una base de instalación bastante grande, con una base de usuarios concurrente bastante significativa (60, 100 conexiones) ... Esto nos ha servido muy bien ... Puede responder si desea más detalles sobre cómo envolvemos libpq y manejamos las actualizaciones en caché.
UPDATE:
A partir de una solicitud, aquí están los pasos para ajustar libpq o hacer uso de él directamente en Windows.
Primero, para establecer el nivel, uso Embarcadero RAD XE en estos días por lo que los comandos que siguen son las herramientas de línea de comandos que se envían con RAD XE. También debe asegurarse de que sus herramientas de línea de comandos estén en la variable de entorno PATH, si no lo están ya. Si usa Visual Studio, tendrá que trabajar los comandos equivalentes. Básicamente estoy creando un archivo .lib de un .DLL
TEST.C es un código de prueba minimalista que escribí para asegurarme de que entendía cómo usar libpq y también para probar mi éxito.
1. Put all the DLLs into a directory and copy the include directory.
No es necesario instalar PostgreSQL usando la compilación MSI para obtener estos DLL, aunque eso también funcionaría. Copié los archivos DLL de la compilación binaria. Los archivos .H también fueron tomados de la compilación binaria también. Así que mi directorio se ve así:
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
ahora debería tener un archivo libpq.lib en el mismo directorio que su DLL.
3. build the test program (or any program) as follows:
bcc32 test.c -l libpq.lib
prueba.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);
}
Ahora, para acceder a un sistema PostgreSQL, simplemente copio el archivo libpq.lib en cualquier nuevo proyecto RAD-XE y añado libpq.lib al proyecto. He envuelto el libpq en un controlador de transporte de base de datos que de alguna manera separa el código de acceso a mi base de datos.
La siguiente captura de pantalla muestra un proyecto RAD-XE llamado ptidb que, a su vez, usa libpq para proporcionar soporte de PostgreSQL. También admito SQLite, excepto que con SQLite simplemente compilo la base de datos directamente.
Luego simplemente envío las DLL, enumeradas anteriormente, junto con mi producto final asegurándome de que las DLL terminen en el mismo directorio que mi producto.
Esto debería ponerte en marcha. Si también estás interesado en el ajuste de C ++ que hago, avísame y publicaré otra actualización con algo de eso.
libpq++ es un conector muy bueno para PostgreSQL
SQLAPI++ es una biblioteca de C ++ para acceder a múltiples bases de datos SQL (Oracle, SQL Server, DB2, Sybase, Informix, InterBase, SQLBase, MySQL, PostgreSQL y ODBC, SQLite).
Abstract Database Connector es una biblioteca C / C ++ para realizar conexiones a varias bases de datos (MySQL, mSQL, PostgreSQL, Interbase, Informix, BDE, ODBC). Se ejecuta en Linux, UNIX, BeOS y Windows, y se está desarrollando un cargador dinámico de controladores para sistemas operativos ELF.
Navicat es una herramienta agradable de GUI para PostgrSQL