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语句要以"; "结束才执行,帮助命令是"//?",退出命令是"//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("//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 -->
参考资料
分享到:
相关推荐
欢迎来到PostgreSQL数据库从入门到精通。 在我们生涯的早期,我们开始理解开源软件的质量。不仅通常情况下它们可以自由使用,而且它们提供极高的质量。如果你发现问题,你可以检查源代码,理解程序工作过程。如果你...
Postgresql在Linux下的配置与C程序应用这些入门的常识实在不敢去CU上发,不过觉得确实很实用,对于初学者也很重要,所以只好在自己的博客备份一下。 从www.postgresql.org下载pgadmin3-1.6.2.zip和postgresql-8.2.3....
PostgreSQL也获得数个奖项,包括三次被评为Linux Journal杂志编辑选择奖最佳数据库(2000,2003和2004年度)以及2004年度Linux新媒体奖最佳数据库系统。我们也许我们有点超越自我。你也许想知道到底PostgreSQL是什么...
第7章:在 Linux上安装MySQL MySQL是最流行的免费数据库。它很容易设置和配置,利用它很容易编制出很好的基于 Web的应用程序。不过对非常大的数据库,它的可伸缩性稍差。 第8章:在Linux上安装和管理Progress ...
20.在Linux下访问MS SQL Server数据库 21.安装X windows for Intel 810 22.Web Database Step by Step(english) 23.Web Database Step by Step(中文) 24.Oracle8.05的简明安装和操作说明 25.Intel® 810 ...
PostgreSQL在Linux下的入门手册,非常适合初学者。目录:一、安装;二、初始化;三、启动;四、数据库管理;五、客户端基本连接操作;六、基本用户管理;七、基本数据库操作
sameersbn / gitlab:12.9.5简介Changelog贡献团队问题公告先决条件安装快速入门配置数据存储数据库PostgreSQL(sameersbn / gitlab:12.9.5简介Changelog贡献团队问题公告先决条件先决条件安装快速入门配置数据存储...
它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java、C++、.Net等,还有ODBC接口,同样比起 Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理...
SQLite,是一款轻型的数据库,是遵守...它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。
包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、...
Udacity-Linux Udacity-Linux配置Linux Web服务器您的第一个Ubuntu服务器在本课程中,您将学习每个Web开发人员与世界共享其Web应用程序所需的基本Linux基础! 您将在Vagrant虚拟机中启动并运行一个基本的Python WSGI...
本资源包含: 1.greenplum.jar -- jdbc链接GP5.8数据库驱动包 2.greenplum-db-5.8.0-...GreenPlum 数据库,基于PostgreSQL改造,适用于分布式大数据集群,最早由阿里引进中国,后阿里在其基础上扩展出云数据库-HybridDB
为实现通过网页控制,本教程会教大家linux(debian10 nginx->uwsgi->python3->postgresql)网站前后台入门。 为记录单片机传输过来的数据, 本教程会教大家入门数据库。 本教程会通过通俗易懂的比喻来讲解各种原理...
SQLite, 是一款 免费 开源 轻型的数据库,嵌入式的, 支持Windows/Linux/Unix Tcl、C#、PHP、Java等,还有ODBC接口, 比Mysql、PostgreSQL快
First-Coder是一个研究项目,专门为您免费提供各种开发,这些开发通常会花费很多钱。 实现了几个完全不同的编程语言的不同项目。 使用完全不同的编程语言的视图项目将实现。 入门 该接口能够在Windows和Linux平台上...
以下说明将帮助您入门和使用该应用程序。 先决条件 :wrench: 节点JS 适用于MacOS,Linux和Windows。 Ruby版本: 2.7.2 MacOS的 Linux的 Windows Ruby on Rails版本: 5.2.4.1 MacOS的 Linux的 Windows ...
使用本地PostgreSQL配置在./app.py上设置“#数据库”。 所有应用程序必备条件都在requirements.txt根文件夹上 正在安装 mkdir议程_saude 光盘议程 pip安装virtualenv python -m venv venv git clone 要在...
在该解决方案当前的开发环境配置中,SQL数据库将自动部署样本数据到单个SQL Server for Linux容器(SQL数据库的单一共享Docker容器),因此整个解决方案可以启动并运行,而无需任何依赖任何云或特定的服务器。...