C++ Interface to PostgreSQL

Fully DBI-compliant C++-backed interface to PostgreSQL < https://www.postgresql.org/>, an open-source relational database.


RPostgres

rcc Codecov test coverage CRAN status

RPostgres is an DBI-compliant interface to the postgres database. It's a ground-up rewrite using C++ and cpp11. Compared to RPostgreSQL, it:

  • Has full support for parameterised queries via dbSendQuery(), and dbBind().

  • Automatically cleans up open connections and result sets, ensuring that you don't need to worry about leaking connections or memory.

  • Is a little faster, saving ~5 ms per query. (For reference, it takes around 5ms to retrieve a 1000 x 25 result set from a local database, so this is decent speed up for smaller queries.)

  • A simplified build process that relies on system libpq.

Installation

# Install the latest RPostgres release from CRAN:
install.packages("RPostgres")

# Or the the development version from GitHub:
# install.packages("remotes")
remotes::install_github("r-dbi/RPostgres")

Discussions associated with DBI and related database packages take place on R-SIG-DB. The website Databases using R describes the tools and best practices in this ecosystem.

Basic usage

library(DBI)
# Connect to the default postgres database
con <- dbConnect(RPostgres::Postgres())

dbListTables(con)
dbWriteTable(con, "mtcars", mtcars)
dbListTables(con)

dbListFields(con, "mtcars")
dbReadTable(con, "mtcars")

# You can fetch all results:
res <- dbSendQuery(con, "SELECT * FROM mtcars WHERE cyl = 4")
dbFetch(res)
dbClearResult(res)

# Or a chunk at a time
res <- dbSendQuery(con, "SELECT * FROM mtcars WHERE cyl = 4")
while(!dbHasCompleted(res)){
  chunk <- dbFetch(res, n = 5)
  print(nrow(chunk))
}
# Clear the result
dbClearResult(res)

# Disconnect from the database
dbDisconnect(con)

Connecting to a specific Postgres instance

library(DBI)
# Connect to a specific postgres database i.e. Heroku
con <- dbConnect(RPostgres::Postgres(),dbname = 'DATABASE_NAME', 
                 host = 'HOST', # i.e. 'ec2-54-83-201-96.compute-1.amazonaws.com'
                 port = 5432, # or any other port specified by your DBA
                 user = 'USERNAME',
                 password = 'PASSWORD')

Design notes

The original DBI design imagined that each package could instantiate X drivers, with each driver having Y connections and each connection having Z results. This turns out to be too general: a driver has no real state, for PostgreSQL each connection can only have one result set. In the RPostgres package there's only one class on the C side: a connection, which optionally contains a result set. On the R side, the driver class is just a dummy class with no contents (used only for dispatch), and both the connection and result objects point to the same external pointer.


Please note that the 'RPostgres' project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.

install.packages("RPostgres")

1.4.10 by Kirill Müller, 8 months ago


https://rpostgres.r-dbi.org, https://github.com/r-dbi/RPostgres


Report a bug at https://github.com/r-dbi/RPostgres/issues


Browse source code at https://github.com/cran/RPostgres


Authors: Hadley Wickham [aut] , Jeroen Ooms [aut] , Kirill Müller [aut, cre] (ORCID: , RStudio [cph] , R Consortium [fnd] , Tomoaki Nishiyama [ctb] (Code for encoding vectors into strings derived from RPostgreSQL)


Documentation:   PDF Manual  


MIT + file LICENSE license


Imports bit64, blob, DBI, hms, lubridate, methods, withr

Suggests callr, covr, DBItest, knitr, rlang, rmarkdown, testthat

Linking to cpp11

System requirements: libpq >= 9.0: libpq-dev (deb) or postgresql-devel (rpm)


Imported by DIZutils, FIESTAutils, ILORA, OpenSourceAP.DownloadR, RGreenplum, ReviewR, TestGenerator, clc, db2pq, ggquickeda, holi, mmiCATs, mmints, mmirestriktor, moodleR, openappr, roadDB, rpgconn, rwevalidate, sdstudio, snowquery, stacomirtools, supabaseR, surveydown, taskqueue, tidyfinance, wrds.

Suggested by CDMConnector, CodelistGenerator, CohortCharacteristics, CohortConstructor, CohortContrast, CohortSymmetry, DatabaseConnector, DrugUtilisation, GitStats, IncidencePrevalence, MeasurementDiagnostics, OmopConstructor, OmopIndices, OmopSketch, OmopViewer, PatientProfiles, PhenotypeR, RSQL, SCDB, connector, ctrdata, dbi.table, dbplyr, dbx, diseasystore, dittodb, dm, easydb, etl, farr, framework, geoflow, geojsonio, lgrExtra, mfdb, nhanesA, nodbi, octopus, palimpsestr, pmparser, pointblank, repana, resourcer, rocker, rpostgis, rvisual, sf, shiny.telemetry, shinymanager, sixtyfour, sqlhelper, storr, syrona, tidylearn.


See at CRAN