Hi all, I'm writing a module with apr dbd ( and mod_dbd for initialize dbd ). post_read hook is used for dbd_acquire_fn , get statement, pvselect, etc....
When use dbd with DBDriver pgsql , request fail after 5, 6 wget test, after two with firefox refresh. No problem with driver sqlite3 or mysql. oracle, freetds or other are not tested. Simple config for mod_dbd is: DBDriver pgsql DBDParams "dbname=vhost user=vhost password=vhost" With postgresql 7.4 if use DBDPersist off but if not use or force on i'm error (idem with postgresql 8.3): ex test: portoo ~ # wget -O index.html "http://vhost0.com" vhost0.com is local :) [Thu Apr 02 23:40:10 2009] [debug] mod_vhost_dbd.c(357): [client 192.168.100.1] vhost_dbd_post_read: path=/home/mysolo/test/vhost0 <----------- it's ok ....... [Thu Apr 02 23:40:13 2009] [error] [client 192.168.100.1] Query execution error looking up 'vhost0.com' in database [Thu Apr 02 23:40:13 2009] [error] [client 192.168.100.1] another command is already in progress\n and if use DBDPersit off with postgresql 8.3 , it's error [Fri Apr 03 00:16:16 2009] [error] (20014)Internal error: DBD: Can't connect to pgsql [Fri Apr 03 00:16:16 2009] [error] [client 192.168.100.1] Failed to acquire database connection to look up host 'vhost0.com' apr-util bug or bug in pqlib of postgresql. I'm searching bug list of apr/apache or postgresql , or google and don't found response. Helping for found problem with postgresql. complete code is on https://svn.cynetek.com/pub/mod_vhost_dbd/trunk/ Excuse me for my english. I speak french only :) I'm use standard code for acquire, get statement and pvselect. .... dbd = vhost_dbd_acquire_fn(r); if (dbd == NULL) { ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "Failed to acquire database connection to look up host '%s'", host); return DECLINED; } statement = apr_hash_get(dbd->prepared, conf->label, APR_HASH_KEY_STRING); if (statement == NULL) { ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "A prepared statement could not be found for " "VhostDBDQuery with the key '%s'", conf->label); return DECLINED; } /* execute the query of a statement and parameter host */ if (rv = apr_dbd_pvselect(dbd->driver, r->pool, dbd->handle, &res, statement, 0, host, NULL) != 0) { ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "Query execution error looking up '%s' in database", host); ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, apr_dbd_error(dbd->driver, dbd->handle, rv)); return DECLINED; } // ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "vhost_dbd_post_read: apr_dbd_get_row return : %d", rv); if (rv = apr_dbd_get_row(dbd->driver, r->pool, res, &row, -1)) { ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "No found results for host '%s' in database", host); ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "vhost_dbd_post_read: result of apr_dbd_get_row=%d", rv); return DECLINED; }