源码编译安装 psqlodbc


(1)编译安装 unixODBC:

        参见:从 GitHub 获取源码编译安装 unixODBC_大明湖畔的丘处机的博客-CSDN博客

(2)编译安装 PostgreSQL:

        命令如下,不详细说了,直接执行就可以:

wget https://ftp.postgresql.org/pub/source/v14.5/postgresql-14.5.tar.gz
tar -xzvf postgresql-14.5.tar.gz  -C /usr/local/src/
cd /usr/local/src/postgresql-14.5/
./configure
make -j$(nproc) && make -j$(nproc) install

(3)编译安装 psqlodbc-13:

        尽量选择最新的 odbc 驱动,截至本文编写最新的就是13.02了。

wget https://ftp.postgresql.org/pub/odbc/versions/src/psqlodbc-13.02.0000.tar.gz
tar -xzvf psqlodbc-13.02.0000.tar.gz  -C /usr/local/src/
cd /usr/local/src/psqlodbc-13.02.0000/
./configure --with-libpq=/usr/local/pgsql --with-unixodbc=/usr/local/unixODBC 
make -j$(nproc) && make -j$(nproc) install

(4)连接一个 PostgreSQL 数据库:

        测试看看能连上数据库不能,postgresql 数据库是已经配置好的,不是前面编译的14.5。

 a. 配置 ODBC 驱动管理器:

cat >> /etc/odbcinst.ini <<"EOF"
[PostgreSQL]
Description     = ODBC for PostgreSQL
Driver          = /usr/lib/psqlodbcw.so
Setup           = /usr/lib/libodbcpsqlS.so
Driver64        = /usr/local/lib/psqlodbcw.so
Setup64         = /usr/lib64/libodbcpsqlS.so
FileUsage       = 1
EOF

 b. 配置数据源:

cat >> ~/.odbc.ini <<"EOF"
[PG_169]
Description = PostgresSQL ODBC
Driver = PostgreSQL
Database = postgres
Servername = 192.168.70.169
UserName = postgres
Password = 666666
Port = 5432
ReadOnly = 0
ConnSettings = set client_encoding to UTF8
EOF

 c. 连接 PostgreSQL:

[root@Node03 ~]# isql PG_169 
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| echo [string]                         |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
POSTGRESQL 让客户端互相通信<br/><br/>在客户端/服务器的工作模式下,客户机处于主动状态,发送请求给监听状态的服务器,后者处理后再将结果返回给客户机。<br/>在这种工作模式下,客户端只与服务端联系,因为它不处于监听状态,所以无法收到服务端或其他客户端“不请自来”的信息。这导致一个现象发生:当某个客户端修改了服务端的数据后,其他客户端不能实时获知,以至这些客户端所获取的数据过时。目前解决的主要方法是客户端周期性向服务器端获取数据,即使这些数据并没有变动。这导致两端都浪费了资源。<br/><br/>POSTGRESQL能较好地解决这个问题。POSTGRESQL是个开源数据库,功能齐全,性能优异,其好处这里不多描述,大家可以去(http://www.postgresql.org)了解.<br/><br/>POSTGRESQL有两个SQL语句 LISTEN和NOTIFY。<br/>LISTEN NAME 让当前连接处于监听状态,监听名为NAME的NOTIFY的到来。<br/>NOTIFY NAME 发送名为NAME的NOTIFY事件给之前已经LISTEN NAME的所有客户端,<br/><br/>NOTIFY事件格式含有NAME和PID两项,LISTEN方可以根据PID项获知是哪个进程发送。举个例子:所有客户端想及时了解表AAA更改事件,于是它们就发送LISTEN AAA命令监听该事件的发生(取AAA名,只是直观点,主要看大家的约定)。当某一个客户端修改了表AAA,就发送NOTIFY AAA命令,于是所有客户端就收到了这个通知,知道表AAA已经被别人修改。<br/><br/>LISTEN/NOTIFY具体应用请看POSTGRESQL文档。<br/><br/>俗话,好马还要好鞍。既然数据库有如此好的功能,若接口不支持,也是白搭。POSTGRESQL的各种接口目前只有C接口libpq.dll和JAVA接口JDBC有封装这功能,其余接口如ODBC,OLEDB等都没封装,原因是,不当当是接口要封装了此功能,同时客户应用程序要有监听机制,才可以收到这些“不请自来的”的通知。C和JAVA可以设计成多线程,让某个线程阻塞IO进行监听,另一线程可以正常工作,是不会影响应用的运行的。而其他用ODBC接口C的应有程序如PB、VFP等,很难设计成多线程,所以这些接口封装LISTEN/NOTIFY也没有多大意义。<br/><br/>既然应有程序不是多线程,但WINDOWS操作系统是多线程,是否可将这些“不请自来的”的通知转化为WINDOWS的消息流呢?而大部分应用程序是可以处理自定义消息的。答案是可以的,这是我在ODBC封装NOTIFY/LISTEN的思路。在ODBC中非调用时间执行WSAAsyncSelect,当一个“不请自来的”通知(其实网络包)到达时,会将网络事件转化为消息,应用程序可以设计MESSAGE_HANDLE来处理这些消息。<br/><br/>我把PSQLODBC8.01.02版本的源程序稍微修改后,重新编译,使ODBC封装了此功能。经测试,在各种开发语言是可以成功运行的。具体的使用方法请参照压缩包里的“说明”文挡和例子。<br/><br/><br/>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值