Thread: ECPG Question
Hi! I hope that I'm in the correct list to ask this question. We have a daemon that need to access our PostgreSQL database and have been trying to use ecpg to generate the C source to use to access the database. Basically, we're winding up with a bunch of open sockets for some reason. Here's the function that accesses the database, and I'm wondering if we're closing the connection properly (since we call this routine quite often...) Thanks! Bruce int getuname(ipaddr) char *ipaddr; { ECPGconnect("currentuser"); if (SQLCODE > 0) { set_not_found_uname (); } else { unset_not_found_uname (); } if(sqlca.sqlcode) { syslog(LLEV,"Error connecting to database server.\n"); exit(0); } /* First, let's check to see if the IP address exists in the database */ ECPGdo(__LINE__, "SELECT userid FROM usernames WHERE ipaddr = ;; ", ECPGt_char,ipaddr,0L,0L,sizeof(char), ECPGt_EOIT, ECPGt_char,&username,9L,0L,sizeof(char), ECPGt_EORT ); if (SQLCODE > 0) { set_not_found_uname (); } else { unset_not_found_uname (); } ECPGtrans(__LINE__, "end"); return not_found_uname; }
On Wed, Jan 20, 1999 at 11:35:59AM -0600, Bruce Tenison wrote: > Hi! I hope that I'm in the correct list to ask this question. We have a Yes. > daemon that need to access our PostgreSQL database and have been trying to > use ecpg to generate the C source to use to access the database. Basically, > we're winding up with a bunch of open sockets for some reason. Here's the > function that accesses the database, and I'm wondering if we're closing the > connection properly (since we call this routine quite often...) The function listed below is not an embedded sql function as preprocessed by ecpg. It only uses libecpg. Or is this the result of an ecpg run? > int getuname(ipaddr) > char *ipaddr; > { > ECPGconnect("currentuser"); ECPGconnect is used to connect to a database. So you open a connection to DB currentuser everytime you call this function. > ... > ECPGtrans(__LINE__, "end"); > > return not_found_uname; > } This only commits the transaction but does not disconnect from the database. For that you need a call to ECPGfinish as done in ECPGdisconnect. Michael -- Michael Meskes | Go SF 49ers! Th.-Heuss-Str. 61, D-41812 Erkelenz | Go Rhein Fire! Tel.: (+49) 2431/72651 | Use Debian GNU/Linux! Email: Michael.Meskes@gmx.net | Use PostgreSQL!
Thanks!!! That fixed our problem! I should have stated that my source was the result of an ecpg run. We used the preprocessor to make some source that we could manipulate, and never went back to the earlier source code. Man this is great. Thanks again! Bruce -----Original Message----- From: Michael Meskes [mailto:Michael_Meskes@usa.net] Sent: Wednesday, January 20, 1999 2:03 PM To: Bruce Tenison Cc: PostgreSQL Interfaces Subject: Re: [INTERFACES] ECPG Question On Wed, Jan 20, 1999 at 11:35:59AM -0600, Bruce Tenison wrote: > Hi! I hope that I'm in the correct list to ask this question. We have a Yes. > daemon that need to access our PostgreSQL database and have been trying to > use ecpg to generate the C source to use to access the database. Basically, > we're winding up with a bunch of open sockets for some reason. Here's the > function that accesses the database, and I'm wondering if we're closing the > connection properly (since we call this routine quite often...) The function listed below is not an embedded sql function as preprocessed by ecpg. It only uses libecpg. Or is this the result of an ecpg run? > int getuname(ipaddr) > char *ipaddr; > { > ECPGconnect("currentuser"); ECPGconnect is used to connect to a database. So you open a connection to DB currentuser everytime you call this function. > ... > ECPGtrans(__LINE__, "end"); > > return not_found_uname; > } This only commits the transaction but does not disconnect from the database. For that you need a call to ECPGfinish as done in ECPGdisconnect. Michael -- Michael Meskes | Go SF 49ers! Th.-Heuss-Str. 61, D-41812 Erkelenz | Go Rhein Fire! Tel.: (+49) 2431/72651 | Use Debian GNU/Linux! Email: Michael.Meskes@gmx.net | Use PostgreSQL!