Dylan Beaudette
2009-Jan-13 03:54 UTC
[R] crash on multiple queries to postgresql db [solved]
On Mon, Jan 12, 2009 at 6:31 PM, Martin Morgan <mtmorgan at fhcrc.org> wrote:> An off-list guess is, ironically, to NOT call dbDisconnect or gc(). > > The C code in the package registers a 'finalizer' that gets called when the > object is garbage collected. This is the same code that gets called by > dbDisconnect. Unfortunately, the code does not check to see if it's been > called already, so I think it's trying to double-close the db connection. By > removing dbDisconnect and gc(), the object gets garbage collected eventually > (when gc() is called, perhaps implicitly, after the function exits and there > are no longer any references to conn). > > I think the other strategy is to remove dbDisconnect() and instead say > rm(conn); gc() so that the gc() is the only one that triggers the finalizer. > > MartinThanks Martin. Your suggested appears to have made the difference! Great work. Cheers, Dylan> > > Dylan Beaudette wrote: >> >> On Friday 09 January 2009, Joe Conway wrote: >>> >>> Dylan Beaudette wrote: >>>> >>>> Subsequent calls to: >>>> >>>> conn <- dbConnect(PgSQL(), host="localhost", dbname="xxx", user="xxx") >>>> query <- dbSendQuery(conn, query_text) >>>> res <- dbGetResult(query) >>>> >>>> are resulting in this: >>>> >>>> *** glibc detected *** /usr/local/lib/R/bin/exec/R: realloc(): invalid >>>> >>>> other attached packages: >>>> [1] RdbiPgSQL_1.8.0 Rdbi_1.8.0 lattice_0.17-20 >>>> >>>> Any ideas? >>> >>> Well, first off, since you are apparently using RdbiPgSQL from >>> bioconductor, you should probably try asking there. >>> >>> But in any case, you might try the latest release from bioconductor: >>> >>> http://www.bioconductor.org/packages/release/bioc/src/contrib/RdbiPgSQL_1.1 >>> 6.0.tar.gz >>> >>> or else try the recently released PostgreSQL DBI package on CRAN: >>> http://cran.stat.ucla.edu/src/contrib/RPostgreSQL_0.1-3.tar.gz >>> >>> HTH, >>> >>> Joe >> >> Thanks Joe. I have updated all of my R packages, along with my >> Bioconductor packages... and I still get the odd behavior: >> >> *** glibc detected *** /usr/local/lib/R/bin/exec/R: realloc(): invalid old >> size: 0xb7dad1e0 *** >> ======= Backtrace: ========>> /lib/i686/cmov/libc.so.6[0xb7cc3624] >> /lib/i686/cmov/libc.so.6[0xb7cc71a1] >> /lib/i686/cmov/libc.so.6(realloc+0x106)[0xb7cc7b46] >> /usr/local/pgsql/lib/libpq.so.5[0xb7802166] >> /usr/local/pgsql/lib/libpq.so.5[0xb780239c] >> /usr/local/pgsql/lib/libpq.so.5[0xb77fbd31] >> /usr/local/pgsql/lib/libpq.so.5(PQfinish+0x15)[0xb77fbe85] >> >> /usr/local/lib/R/site-library/RdbiPgSQL/libs/RdbiPgSQL.so(PgSQLcloseConnection+0x38) >> [0xb783bb98] >> >> Again, here is my session info: >> >> R version 2.8.0 (2008-10-20) i686-pc-linux-gnu >> locale: >> >> LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=en_US.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=C;LC_MESSAGES=en_US.UTF-8;LC_PAPER=en_US.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=C >> >> attached base packages: >> [1] grid stats graphics grDevices utils datasets methods >> [8] base >> other attached packages: >> [1] RdbiPgSQL_1.16.0 Rdbi_1.16.0 lattice_0.17-20 >> >> >> Here is the code that appears to be causing the problems: >> >> # load data from a PostGreSQL database, and return a dataframe >> # this will get called whenever the parent function is called >> # crashes after 3-5 subsequent calls >> load_sensor_data <- function(query_text) >> { >> >> # conn becomes an object which contains the DB connection: >> conn <- dbConnect(PgSQL(), host="localhost", dbname="SJER", user="dylan") >> >> ## pre-filter out possible bad data: >> query <- dbSendQuery(conn, query_text) >> >> # fetch data according to query: >> res <- dbGetResult(query) >> # convert characters to factors >> res <- transform(res, probe_id = factor(probe_id)) >> res <- transform(res, pedon_id = factor(pedon_id)) >> >> # generate a new date-time object in the dataframe >> res$date <- as.POSIXct(strptime(res$date_time, format="%a %b %e %H:%M:%S >> %Y")) >> >> # cleanup >> dbDisconnect(conn) >> >> # doesn't completely fix problem crashing >> gc() >> >> # return the resulting dataframe >> return(res) >> } >> >> >> Thanks in advance, >> >> Dylan >> >> > > > -- > Martin Morgan > Computational Biology / Fred Hutchinson Cancer Research Center > 1100 Fairview Ave. N. > PO Box 19024 Seattle, WA 98109 > > Location: Arnold Building M2 B169 > Phone: (206) 667-2793 >