linux登录指令 pgsql_Linux下免费数据库PostgreSQL开发入门

本文介绍了PostgreSQL,一种在Unix/Linux系统上的免费开放源码数据库,荣获多项奖项。它支持SQL标准,拥有丰富的数据类型,并提供PHP、Perl等语言的接口。文章详细讲解了PostgreSQL的主要特性、数据类型、数据库极限,以及如何在Linux上下载安装。还阐述了C/C++操作PostgreSQL的接口,包括连接、查询、大对象操作等,并给出了C和C++的代码示例。
摘要由CSDN通过智能技术生成

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++、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)关闭大对象描述符

上面函数的具体介绍请参见 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 #include 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

运行结果如图所示

 

2)C++例子

#include #include int main() {

char query_string[256]= "SELECT * FROM test;";

PgDatabase data("dbname = test_db");

if (data.ConnectionBad()) {

cout <

运行结果如图所示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值