मैं हमारी जरूरतों के लिए libpq के चारों ओर एक आवरण लिखा था। मैं लंबे समय से ज़ोसलिब (http://sourceforge.net/projects/zeoslib/) था, लेकिन आखिरकार मैंने उन समस्याओं का सामना किया जो मैंने उन्हें इस्तेमाल किया था, कैश किए गए डेटासेट और सादा धीमी गति का समर्थन नहीं किया था।
libpq बहुत तेज़ है।
मैं बस पोस्टग्रेज़ के विंडोज संस्करण को डाउनलोड करता हूं, सभी डीएलएल को एक lib निर्देशिका में कॉपी करता हूं और कॉल निर्यात करता हूं, उसके अनुसार .h और लिंक शामिल करता हूं।
मुझे एहसास है कि यह बहुत कम स्तर है, लेकिन परिणामस्वरूप मैं प्रदर्शन में काफी वृद्धि नहीं कर सकता हूं।
हमारा आवेदन एक बड़े पैमाने पर स्थापित आधार के साथ एक लेखांकन/ईआरपी प्रकार का व्यवसाय अनुप्रयोग है, जिसमें काफी महत्वपूर्ण समवर्ती कई उपयोगकर्ता आधार (60, 100 कनेक्शन) हैं ... इसने हमें बहुत अच्छी सेवा दी है ... यदि आप वापस जवाब दे सकते हैं आप libpq को लपेटने और कैश किए गए अपडेट को संभालने के तरीके के बारे में अधिक जानकारी चाहते हैं।
UPDATE:
यहां एक अनुरोध से libpq को लपेटने या सीधे विंडोज़ के तहत इसका उपयोग करने के लिए कदम हैं।
सबसे पहले, स्तर सेट करने के लिए, मैं इन दिनों Embarcadero RAD XE का उपयोग करता हूं, इसलिए अनुसरण करने वाले आदेश कमांड लाइन टूल्स हैं जो रैड एक्सई के साथ शिप करते हैं। आपको यह सुनिश्चित करने की भी आवश्यकता है कि आपके कमांड लाइन टूल्स पाथ पर्यावरण चर में हैं यदि पहले से नहीं हैं। यदि विजुअल स्टूडियो का उपयोग करते हैं, तो आपको समकक्ष कमांड का काम करना होगा। असल में मैं एक .lib फ़ाइल बना रहा हूं। डीएलएल
टेस्ट.सी एक न्यूनतम परीक्षण कोड है जिसे मैंने यह सुनिश्चित करने के लिए लिखा है कि मुझे libpq का उपयोग करने और मेरी सफलता का परीक्षण करने के लिए भी समझ लिया गया है।
1. Put all the DLLs into a directory and copy the include directory.
आप हालांकि वह भी काम करेगा, एमएसआई इन DLLs प्राप्त करने के लिए निर्माण का उपयोग कर PostgreSQL स्थापित करने की आवश्यकता नहीं है। मैंने द्विआधारी निर्माण से डीएलएल की प्रतिलिपि बनाई। एच। फाइलों को बाइनरी बिल्ड से भी लिया गया था। तो मेरी निर्देशिका इस तरह दिखता है:
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
अब अपनी DLLs रूप में एक ही निर्देशिका में libpq.lib फ़ाइल होनी चाहिए।
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);
}
अब किसी भी नए रेड-XE परियोजना में एक PostgreSQL प्रणाली मैं बस libpq.lib फ़ाइल की प्रतिलिपि पहुँच सकते हैं और परियोजना के लिए libpq.lib जोड़ने के लिए। मैंने libpq को डेटाबेस ट्रांसपोर्ट ड्राइवर में लपेट लिया है जो कि मेरे डेटाबेस एक्सेस कोड को अलग करता है।
निम्नलिखित स्क्रीन शॉट एक RAID-XE प्रोजेक्ट दिखाता है जिसे ptidb कहा जाता है, बदले में, PostgreSQL समर्थन प्रदान करने के लिए libpq का उपयोग करता है। मैं SQLite को छोड़कर SQLite का समर्थन भी करता हूं, बस डेटाबेस को सीधे संकलित करता हूं।
तब मैं बस अपने अंतिम उत्पाद के साथ डीएलएल को सूचीबद्ध करता हूं, यह सुनिश्चित करता हूं कि डीएलएल मेरे उत्पाद के समान निर्देशिका में घुमाए।
यह आपको जाना चाहिए। यदि आप सी ++ रैपिंग में भी रूचि रखते हैं, तो मुझे बताएं और मैं इसके साथ एक और अपडेट पोस्ट करूंगा।
आप जिन्हें आप सूचीबद्ध किया है के सभी के बीच एक पसंदीदा है? – sivabudh
मैंने उन सभी को विभिन्न परिस्थितियों में उपयोग किया है – joe
SQLAPI ++ एक शेयर-वेयर उत्पाद है जिसके लिए लाइसेंस की आवश्यकता होती है। – tadman