亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Linux下免費數據庫PostgreSQL開發入門

系統 2920 0

PostgreSQL數據庫介紹

PostgreSQL是一種運行在Unix和Linux操作系統(在NT平臺借助Cygnus也可以運行)平臺上的免費的開放源碼的關系數據庫。最早是由美國加州大學伯克利分校開發的,開始只是作為一個演示系統發表,但是隨著時間的推移,逐步分發,得到很多實際的應用,才逐步流行起來。現在版本發展到了7.3.3。

榮譽:

  • 1999年獲得Linux World雜志的該年度"最佳數據庫產品"稱號。
  • 2000年榮獲Linux Journal雜志編輯選擇的"最佳數據庫"獎。
  • 2003年,也就是最近再一次榮獲Linux Journal雜志編輯選擇的" 最佳數據庫 "獎。

2.主要功能和特性

  • 支持SQL。作為關系數據庫,它支持SQL89標準也支持部分SQL92大部分功能。
  • 有豐富的數據類型。許多數據類型是一些商業數據庫都沒有提供的。
  • 面向對象。它包含了一些面向對象的技術,如繼承和類。
  • 支持大數據庫,它不同于一般的桌面數據庫,能夠支持幾乎不受限制大小的數據庫,而且性能穩定。
  • 方便集成web,提供一些接口方便 PHP,Perl等語言操作數據庫。
  • 事務處理。相對一些其他免費數據庫如MySQL,他提供了事務處理,可以滿足一些商業領域的數據需要。

3.數據類型

PostgreSQL支持豐富的數據類型,許多數據類型在商業數據庫中都無法提供。

  • 數值類型。包括整數、任意精度、浮點類型和序列類型數值。
  • 貨幣類型。范圍-21474836.48 到 +21474836.47。
  • 字符類型。分為定長類型,不定長有限制類型和不定長不限制長度類型。
  • 二進制字符串。
  • 日期和時間類型
  • 布爾類型。
  • 幾何類型。包括點、線、方形、路徑、多邊形和圓。
  • 網絡地址類型。
  • 位串類型。就是包含1和0的串。
  • 對象標識符類型
  • 數組類型。


4.數據庫極限

參數名稱 最大范圍
數據庫大小 無限制
表大小 16TB(所有系統)
一條記錄大小 1.6GB
字段大小 1GB
表記錄條數 無限制
表字段數 250-1600(取決于字段的數據類型)
表索引 無限制

事實上不可能存在無限制的情況。支持16TB大小的表不是單一文件保存,而是分為多個文件存儲的,所以不受限制于操作系統。

4.下載安裝

我們可以到 http://www.postgresql.org 網站下載,具體怎么安裝我就不贅述,大家可以看文檔,也可以看 參考 中的中文網站的文檔。在這里我就說說安裝中需要注意的幾個問題。

注意

  • 不能以root登陸Linux來操作數據庫(啟動數據庫服務除外),請以root身份建立postgres用戶,設置密碼后登錄。
  • 安裝完postgreSQL,可能需要初始化數據庫,需要以postgres用戶登錄系統,運行
                    initdb -pqlib=/usr/lib/pqsql -pqdata=/var/lib/pqsal
                  


    如果你的pqlib目錄不同則需要按照你的實際路徑修改,pqdata也是這樣的。
  • 數據庫用戶與Linux用戶是不同的概念,只有數據庫用戶才能操作數據庫,以postgres登錄Linux,然后是使用createuser來添加用戶,dropuser來刪除用戶,也可以使用SQL命令CREATE USER來創建。

5.常用命令


PostgreSQL數據庫常用操作命令:

Createdb 創建數據庫
Createuser 創建數據庫用戶
Dropdb 刪除數據庫
Dropuser 刪除數據庫用戶
Psql 交互式PostgreSQL前端工具,可以用它來操作數據庫
Initdb 初始化postgreSQL數據庫

這里不是介紹怎樣使用PostgreSQL數據庫,所以對這些命令也不詳細解釋,可以參見文檔說明和幫助。我在這里是假設讀者已經安裝并初始化好了數據庫,并且會使用psql和熟練SQL來交互操作數據。


PostgreSQL 的C/C++接口介紹

PostgreSQL提供很多不同語言的接口,有C、C++、Perl、Tcl等等,這里主要是介紹C/C++怎樣連接到數據庫,對數據進行添加,查詢等操作。

1.C語言接口

  • 頭文件libqp-fe.h 連接時需要添加連接參數-lpq也就是連接libpq庫。
  • 建立數據庫連接函數
                    PGconn  *PQconnectdb( const char *conninfo) 
    PGconn *PQsetdbLogin(const char *pghost,
                         		 	   const char *pgport,
                         		       const char *pgoptions,
                         		       const char *pgtty,
                         		       const char *dbName,
                         		       const char *login,
                         		       const char *pwd)
    
                  

    建立非阻塞連接函數

                    PGconn *PQconnectStart(const char *conninfo)
    PostgresPollingStatusType *PQconnectPoll(PQconn *conn)
    
                  
  • 執行查詢函數
                    PGresult *PQexec(PGconn *conn,const char *query) 返回查詢的結構集。
    int PQntuples(const Pgresult *res) 返回查詢結果里的記錄個數。
    int PQnfields(const Pgresult *res) 返回記錄中的字段的個數。
    char *PQfname(const Pgresult *res,int field_index)返回結構集中某一字段的名稱。
    Oid PQftype(const Pgresult *res, int field_index) 返回結構集中某一字段的數據類型。
    char *PQgetvalue(const Pgresult *res,int tup_num, int field_index)
    返回結構集中某一條記錄中某一個字段的值。
    
                  

    這里只列舉最常用的一些函數,具體說明可以參見文檔。

  • 大對象數據操作,主要使用下列函數在SQL語句中操作大對象數據。
    Oid lo_creat(PGconn *conn,

    int mode)

    創建一個新的大對象.mode 是一個位掩碼,描述新對象的不同屬性
    Oid lo_import(PGconn *conn,

    const char *filename)

    把文件作為大對象導入數據庫
    int lo_export(PGconn *conn,

    Oid lobjId, const char *filename)

    大對象導入出數據庫,保存為文件
    int lo_open(PGconn *conn,

    Oid lobjId, int mode)

    打開一個現存的大對象
    int lo_write(PGconn *conn, int fd,

    const char *buf, size_t len)

    大對象寫入數據
    int lo_read(PGconn *conn, int fd,

    char *buf, size_t len)

    從大對象讀取數據
    int lo_lseek(PGconn *conn, int fd,

    int offset, int whence)

    對大對象數據進行查找
    int lo_close(PGconn *conn, int fd) 關閉大對象描述符

    函數在fe-lobj.c文件中定義,具體使用參見 Accessing Large Objects from libpq

    上面函數的具體介紹請參見 PostgreSQL v7.0 文檔 在這里就不詳細介紹了。這里省略列舉狀態檢查函數,參見參考文檔。

    使用C語言訪問數據庫的除了libpq庫,還有其他如 libpqeasy,ecpg 等接口。

2.C++語言接口

  • 頭文件 libpq++.h 連接需要的庫位 pq++,連接參數是 -lpq++
  • libpq++ 類繼承關系圖


  • 類簡介
    PgConnection成員函數
    PgConnection(const char* conninfo) 參數同下
    Connect(const char* conninfo) 同 PQconnectdb
    Exec(const char* query) 同 PQexec
    ExecCommandOk(const char* query) 運行命令并檢查狀態是否PGRES_COMMAND_OK
    ExecTuplesOk(const char* query) 運行查詢并檢查狀態是否PGRES_TUPLES_OK
    IntToString(int n) 數字轉換為字符串
    ConnectionBad() 連接是否失敗
    ErrorMessage() 返回錯誤信息
    DBName() 同 PQdb

    詳細說明參見文檔

    PgDatabase 的常用成員函數
    PgDatabase(const char* conninfo) 構造函數連接到數據庫,跟 Pqconnectdb參數相同
    Tuples() 同 PQntuples();
    CmdTuples() 同 PQcmdTuples
    Fields() 同 PQnfields
    FieldName(int field_num) 同 PQfname
    FieldNum(const char* field_name) 同 PQfnumber
    FieldType(int ield_num)

    FieldType(const char* field_name)

    同 PQftype
    FieldSize(int field_num)

    FieldSize(const char* field_name)

    同 PQfsize
    GetValue(int tup_num, int field_num)

    GetValue(int tup_num, const char* field_name)

    同 PQgetvalue
    GetIsNull(int tup_num, int field_num)

    GetIsNull(int tup_num, const char* field_name)

    同 PQgetisnull
    GetLength(int tup_num, int field_num)

    GetLength(int tup_num, const char* field_name)

    同 PQgetlength
    GetLine(char* string, int length) 同 PQgetline
    PutLine(const char* string) 同 PQputline
    EndCopy() 同 PQendcopy
  • 大對象操作使用 PgLargeObject 類來操作。

例子程序

以 postgres 用戶或者具有建立數據庫用戶權限的用戶登錄 Linux,先建立數據庫。

            [zuojin@itpark85 zuojin]$createdb test_db

          

然后使用 psql 連接到數據庫

            [zuojin@itpark85 zuojin]$psql test_db

          

連接到數據庫建立表,如下圖所示


插入測試用數據,如圖:


(注意:psql中輸入SQL語句要以"; "結束才執行,幫助命令是"http://?",退出命令是"http://q")。


1)C語言例子

            #include <stdio.h>
#include <libpq-fe.h>
 
int main() {
   PGconn *conn;
   PGresult *res;
   char *pghost = NULL;
   char *pgport =NULL;
   char *pgoptions =NULL;
   char *pgtty = NULL;
   char *dbname ="test_db";
   /**數據庫名*/ 
   int i = 0,t = 0,s,k;
   conn = PQsetdb(pghost,pgport,pgoptions,pgtty,dbname);
   if (PQstatus(conn) == CONNECTION_BAD) {
       fprintf(stderr,"Connection to database '%s' failed!//n",dbname);
       PQfinish(conn);
	   eturn 0;
   }
   res = PQexec(conn,"SELECT * FROM test");
   
   /**運行查詢命令*/
   if(  PQresultStatus(res)  !=  PGRES_TUPLES_OK) {
       fprintf(stderr,"Exec Query Fauled!//n");
       PQclear(res);
	   return 0;
   }
     
   i = PQntuples(res);
   /**取得查詢的結果的記錄的數量*/ 
   t = PQnfields(res);
   /**取得字段數量*/
   for(s=0; s<i;s++) {
       for (k = 0; k<t; k++) {
           printf("%s",PQgetvalue(res,s,k));
           printf("  ");
       }
       printf("http://n");
   }
   PQfinish(conn);
   PQclear(res);
   return 0;
}

          

運行結果如圖所示




2)C++例子

            #include <iostream.h>
#include <libpq++.h> 
int  main() {
	char query_string[256]= "SELECT * FROM test;";
	PgDatabase data("dbname = test_db");
	if (data.ConnectionBad()) {
		cout <<"connected failed" << endl;
  		cout <<"Error is "<<data.ErrorMessage() << endl;
        exit(1);
    }
    if (! data.ExecTuplesOk(query_string)) {
		cout<<"Query Failed!" << endl;
		exit(1);
    }
    for(int k=0; k<data.Fields(); k++) /**顯示字段名稱*/ {
        cout<<data.FieldName(k);
        cout <<"      "     ;
    }
    cout<<endl;
    for (int i = 0; i < data.Tuples(); i++) /**取得查詢結果的記錄數量*/  {
       	for(int k=0; k<data.Fields(); k++) {
        	cout << data.GetValue(i,k);
        	cout <<" | "     ;
        }
        cout<<endl;
    }
    return 0 ;
}

          

運行結果如圖所示


本文的樣例代碼: testC.c 、 testC++.cpp 。

<!-- CMA ID: 21234 --><!-- Site ID: 10 --><!-- XSLT stylesheet used to transform this file: dw-article-6.0-beta.xsl -->

參考資料

Linux下免費數據庫PostgreSQL開發入門


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一级一级18女人毛片 | 深夜福利国产福利视频 | 国产日产精品 | 999热这里只有精品 999人在线精品播放视频 | 日本韩国欧美一区 | 成人毛片免费观看视频在线 | 国产精品久久天天影视 | 欧美日本视频一区 | 久热免费在线视频 | 91在线免费视频观看 | 亚洲综合激情六月婷婷在线观看 | 色久综合网 | 日韩51| 97视频在线观看免费 | 日产国产欧美视频一区精品 | 久久国产三级 | 久久乱69小说 | 深夜免费福利 | 色偷偷在线刺激免费视频 | 久操伊人 | 午夜67194| 国产1区2区3区在线观看 | 久操伊人 | 蜜桃精品免费久久久久影院 | 日韩aaa| jizz女人| 久久久国产精品免费看 | 青青青激情视频在线最新 | 亚洲精品免费视频 | 99九九99九九九视频精品 | 免费一级毛片在线播放不收费 | 久久免费高清视频 | 久热这里只精品热在线观看 | 性生活视频免费 | 在线私人影院 | 成人在线视频国产 | 天天操天天弄 | 国产毛片一区二区三区精品 | 亚洲国产人久久久成人精品网站 | 黑人边吃奶边扎下面激情视频 | 免费网站日本永久免费观看 |