PostgreSQL開發了libpq庫,可供C語言編寫外部程式以串連PG資料庫。
在C程式中,開頭需要載入libpq庫,#include "libpq-fe.h"即可,注意是引號。
編譯這個程式:
gcc -I/usr/local/pgsql/include -o pq PQresult.c -L/usr/local/pgsql/lib -lpq
-I/usr/local/pgsql/include是PG安裝後的include目錄。
-L/usr/local/pgsql/lib 是PG安裝後的lib目錄。
下面給出一個完整的例子:
#include <stdio.h>#include "libpq-fe.h"// 輸出列印PGresult結果void PQresultPrint(PGresult *res){int nFields = PQnfields(res);int nTuples = PQntuples(res);int i, j;for (i=0; i<nTuples; i++){for (j=0; j<nFields; j++){printf("%s ", PQgetvalue(res, i, j));}printf("/n");}}// 編譯命令:// gcc -I/usr/local/pgsql/include -o pq PQresult.c -L/usr/local/pgsql/lib -lpqPGresult *ExecuteQuery(char *host, int port, char *dbname, char *query){PGconn *conn;PGresult *res;char str[128];sprintf(str, "host=%s port=%d dbname=%s", host, port, dbname);// 建立串連conn = PQconnectdb(str);if(PQstatus(conn) == CONNECTION_BAD){fprintf(stderr,"資料庫連接失敗! host: %s/n", host);fprintf(stderr,"%s",PQerrorMessage(conn));}// 執行SQLres = PQexec(conn, query);if (PQresultStatus(res) == PGRES_FATAL_ERROR){fprintf(stderr, "%s", PQerrorMessage(conn));}// 命令語句:CREATE, UPDATE, DELETE等if (PQresultStatus(res) == PGRES_COMMAND_OK){printf("%s/n", PQcmdTuples(res));}// SELECT SQLif (PQresultStatus(res) == PGRES_TUPLES_OK){}PQfinish(conn);return res;}int main(){char *sql = "SELECT * FROM student;";PGresult *res = ExecuteQuery("127.0.0.1", 5432, "test", sql);PQresultPrint(res);PQclear(res);return 0;}如果出現“資料庫連接失敗”,
1)要檢查用戶端(程式)與服務端(資料庫)網路是否相通,ping命令即可。
2)服務端儲存資料的目錄裡有個檔案pg_hba.conf,可在裡面仿照最後幾句添加用戶端的IP,表示對用戶端的信任。