Linux环境下安装psqlodbc及配置ODBC连接postgresql数据库

5星 · 超过95%的资源 需积分: 50 40 下载量 111 浏览量 更新于2024-09-15 收藏 1KB TXT 举报
本文主要介绍了如何在Linux系统中安装ODBC和psqlodbc驱动,以便于通过ODBC连接到PostgreSQL数据库。 在Linux环境中,ODBC(Open Database Connectivity)是一种标准的应用程序编程接口(API),它允许应用程序与各种数据库管理系统(DBMS)进行通信。在本案例中,我们关注的是如何安装UnixODBC(一个开源的ODBC实现)以及psqlodbc,这是PostgreSQL的ODBC驱动,使得Linux系统能够通过ODBC接口访问PostgreSQL数据库。 首先,我们需要下载以下组件: 1. unixODBC的三个版本:`unixODBC-2.2.11-7.1.i386.rpm`,`unixODBC-devel-2.2.11-7.1.i386.rpm` 和 `unixODBC-kde-2.2.11-7.1.i386.rpm` 2. psqlodbc的源代码包:`psqlodbc-08.02.0500.tar.gz` 将这些文件解压或移动到 `/usr/local` 目录下,然后执行RPM安装命令来安装UnixODBC的RPM包: ```bash # rpm -ivh unixODBC-2.2.11-1.RHEL4.1.i386.rpm # rpm -ivh unixODBC-devel-2.2.11-1.RHEL4.1.i386.rpm # rpm -ivh unixODBC-kde-2.2.11-1.RHEL4.1.i386.rpm ``` 接下来,解压并编译psqlodbc源代码: ```bash # tar xzvf psqlodbc-08.02.0500.tar.gz # cd psqlodbc-08.02.0500 # ./configure --prefix=/usr/local/psqlodbc --disable-unicode # gmake # gmake install ``` 安装完成后,配置ODBC数据源。编辑两个关键的配置文件: - `/etc/odbcinst.ini`:定义ODBC驱动的配置信息 - `/etc/odbc.ini`:定义具体的数据库连接 在`/etc/odbcinst.ini`中,添加如下内容来声明psqlodbc驱动: ```ini [pgsqlodbc] Description=PostgreSQL driver for Linux&Win32 Driver=/usr/lib/libpsqlodbca.so Driver64= Setup= Setup64= UsageCount=1 CPTimeout= CPReuse= ``` 在`/etc/odbc.ini`中,创建一个或多个数据源(DSN,Data Source Name),例如: ```ini [mt_his] Servername=localhost Database=mthis Username=cims007 Password=123456 Port=5555 Driver=/usr/local/psqlodbc/lib/psqlodbca.so [mt_super] Servername=192.168.1.101 Database=cims007db Username=cims007 Password=123456 Port=9999 Driver=/usr/local/psqlodbc/lib/psqlodbca.so ``` `Servername` 是数据库服务器的地址,`Database` 是要连接的数据库名,`Username` 和 `Password` 是数据库登录凭证,而 `Port` 是PostgreSQL服务监听的端口号。 完成上述步骤后,Linux系统已经具备了通过ODBC连接到PostgreSQL数据库的能力。应用程序可以使用ODBC API调用来查询和操作数据库,例如使用Python的pyodbc库或者C++的ODBC API。通过这种方式,开发者能够在不依赖特定数据库接口的情况下,实现跨平台的数据访问。
2007-04-17 上传
POSTGRESQL 让客户端互相通信

在客户端/服务器的工作模式下,客户机处于主动状态,发送请求给监听状态的服务器,后者处理后再将结果返回给客户机。
在这种工作模式下,客户端只与服务端联系,因为它不处于监听状态,所以无法收到服务端或其他客户端“不请自来”的信息。这导致一个现象发生:当某个客户端修改了服务端的数据后,其他客户端不能实时获知,以至这些客户端所获取的数据过时。目前解决的主要方法是客户端周期性向服务器端获取数据,即使这些数据并没有变动。这导致两端都浪费了资源。

POSTGRESQL能较好地解决这个问题。POSTGRESQL是个开源数据库,功能齐全,性能优异,其好处这里不多描述,大家可以去(http://www.postgresql.org)了解.

POSTGRESQL有两个SQL语句 LISTEN和NOTIFY。
LISTEN NAME 让当前连接处于监听状态,监听名为NAME的NOTIFY的到来。
NOTIFY NAME 发送名为NAME的NOTIFY事件给之前已经LISTEN NAME的所有客户端,

NOTIFY事件格式含有NAME和PID两项,LISTEN方可以根据PID项获知是哪个进程发送。举个例子:所有客户端想及时了解表AAA更改事件,于是它们就发送LISTEN AAA命令监听该事件的发生(取AAA名,只是直观点,主要看大家的约定)。当某一个客户端修改了表AAA,就发送NOTIFY AAA命令,于是所有客户端就收到了这个通知,知道表AAA已经被别人修改。

LISTEN/NOTIFY具体应用请看POSTGRESQL文档。

俗话,好马还要好鞍。既然数据库有如此好的功能,若接口不支持,也是白搭。POSTGRESQL的各种接口目前只有C接口libpq.dll和JAVA接口JDBC有封装这功能,其余接口如ODBC,OLEDB等都没封装,原因是,不当当是接口要封装了此功能,同时客户应用程序要有监听机制,才可以收到这些“不请自来的”的通知。C和JAVA可以设计成多线程,让某个线程阻塞IO进行监听,另一线程可以正常工作,是不会影响应用的运行的。而其他用ODBC接口C的应有程序如PB、VFP等,很难设计成多线程,所以这些接口封装LISTEN/NOTIFY也没有多大意义。

既然应有程序不是多线程,但WINDOWS操作系统是多线程,是否可将这些“不请自来的”的通知转化为WINDOWS的消息流呢?而大部分应用程序是可以处理自定义消息的。答案是可以的,这是我在ODBC封装NOTIFY/LISTEN的思路。在ODBC中非调用时间执行WSAAsyncSelect,当一个“不请自来的”通知(其实网络包)到达时,会将网络事件转化为消息,应用程序可以设计MESSAGE_HANDLE来处理这些消息。

我把PSQLODBC8.01.02版本的源程序稍微修改后,重新编译,使ODBC封装了此功能。经测试,在各种开发语言是可以成功运行的。具体的使用方法请参照压缩包里的“说明”文挡和例子。