当前位置: 技术问答>linux和unix
****关于PostgreSQL的连接在多进程程序中的问题****
来源: 互联网 发布时间:2015-02-28
本文导语: 我在主程序fork之前创建了一个PostgreSQL的连接PGconn,PGconn是一个全局变量,然后fork了n个子进程,但是当我在主进程中PQfinish(PGconn)以后,子进程中的PGconn也被关闭了。 在fork以后,子进程中的变量因该是独立的呀?难道P...
我在主程序fork之前创建了一个PostgreSQL的连接PGconn,PGconn是一个全局变量,然后fork了n个子进程,但是当我在主进程中PQfinish(PGconn)以后,子进程中的PGconn也被关闭了。
在fork以后,子进程中的变量因该是独立的呀?难道PostgreSQL返回的变量是可以在各个进程中共享的么?
在fork以后,子进程中的变量因该是独立的呀?难道PostgreSQL返回的变量是可以在各个进程中共享的么?
|
我觉得这个问题可以这么理解:
PGconn可以看做一条连接的标识,尽管主进程和每个子进程都拥有这个标识,并可以通过它和数据库连接。但是对于数据库那一段看来,连接线路只有一条。任意一个进程关闭这条连接后,其他进程与数据库的连接也随之关闭,自然就不能访问数据库了。
解决问题的办法可以为每个进程建立一条连接,这样它们就不会相互影响了。
#define MAX_CHILD_NUM 5
PGconn* conn;
void main() {
/*设置数据库名,端口,用户名,密码等
......
*/
conn = PQConnectdb(...); /*填上前面设置的参数,为主程序建立连接*/
for(int i=0; i
PGconn可以看做一条连接的标识,尽管主进程和每个子进程都拥有这个标识,并可以通过它和数据库连接。但是对于数据库那一段看来,连接线路只有一条。任意一个进程关闭这条连接后,其他进程与数据库的连接也随之关闭,自然就不能访问数据库了。
解决问题的办法可以为每个进程建立一条连接,这样它们就不会相互影响了。
#define MAX_CHILD_NUM 5
PGconn* conn;
void main() {
/*设置数据库名,端口,用户名,密码等
......
*/
conn = PQConnectdb(...); /*填上前面设置的参数,为主程序建立连接*/
for(int i=0; i