knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "README-", eval = FALSE )
Standardized workflow for writing tables to PostgreSQL. This package contains tools to provide a consistent workflow for
writing data.frames
existing in an R
session to a PostgreSQL database connection. The tools are built around the DBI
and RPostgres
packages.
What this package provides?
SQL
CREATE TABLE
statements list
of data.frames
to write to PostgreSQL This is created for primary use among the Data/Programming team at CGHR to standardize and optimize the data storage and management workflow.
library(devtools) devtools::install_github("eugejoh/pgtools")
Best practices with storing and using credentials, steps here should be followed to access the .REnviron
file. By default pgtools::connect_pg()
searches your .REnviron
file to retrieve the appropriate information.
The .REnviron
file should have the following variables:
db_ip='my ip here' db_user='my username here' db_pw='my password here' db_name='my database name here'
Those familiar with the tidyverse
can use the usethis
to easily access and edit the .REnviron
file. See this page for more details.
This section outlines a typical workflow of writing a data frame from a R session to a PostgreSQL database connection.
Example for single data frame using the iris
dataset:
# Single data frame data(iris) # Connect to database my_conn <- connect_pg(getenv = FALSE, drv = DBI::dbDriver("Postgres"), host = "myhostname", port = 5432, dbname = "mydb", user = "myusername", password = "mypw" ) # Element lengths my_nchar <- get_nchar(iris) # Postgres Field Types my_fields <- set_pgfields(nchar_df, conn = my_conn) # Write to Postgres write_pgtable( input = iris, tbl_name = "iris", field.types = my_fields, conn = my_conn )
Example for a list of data frames:
# Mulitple data frames data(iris) data(swiss) data(mtcars) data(cars) # Named list of data frames my_list <- list(iris, swiss, mtcars, cars) names(my_list) <- c("iris", "swiss", "mtcars", "cars") # Connect to database my_conn <- connect_pg(getenv = FALSE, drv = DBI::dbDriver("Postgres"), host = "myhostname", port = 5432, dbname = "mydb", user = "myusername", password = "mypw" ) # Element lengths my_nchar <- get_nchar(my_list) # Postgres Field Types my_fields <- set_pgfields(nchar_df, conn = my_conn) # Write to Postgres write_pgtable( input = my_list, field.types = my_fields, conn = my_conn )
Example obtaining the SQL
statement for CREATE TABLE
with added primary key:
data(iris) # Connect to database my_conn <- connect_pg(getenv = FALSE, drv = DBI::dbDriver("Postgres"), host = "myhostname", port = 5432, dbname = "mydb", user = "myusername", password = "mypw" ) # Add ID for Primary Key iris$id <- seq_along(1:nrow(iris)) # Element lengths my_nchar <- get_nchar(iris) # Postgres Field Types my_fields <- set_pgfields(nchar_df, conn = my_conn) get_sql_create(my_pg_fields, pkey = "id", tbl_name = "iris")
Example of adding comments to the table and fields:
data(iris) my_conn <- connect_pg(getenv = FALSE, drv = DBI::dbDriver("Postgres"), host = "myhostname", port = 5432, dbname = "mydb", user = "myusername", password = "mypw" ) tab_comment <- paste0("I love the `iris` dataset. ", "added: ", Sys.Date()) my_comments <- c("length of the sepal", "width of the sepal", "length of the petal", "width of the petal", "the type of flower species") names(my_comments) <- names(iris) #remember to name the input for comments! write_pgtable( input = iris, tbl_name = "iris", schema = schema_name, conn = my_conn, tbl.comments = tab_comment, field.comments = my_comments, clean_vars = TRUE )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.