PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

मैं dplyr का उपयोग करके स्थानीय डेटा को केवल-पढ़ने के लिए डेटाबेस में कैसे प्राप्त करूं?

एक विकल्प निम्न फ़ंक्शन की तरह कुछ का उपयोग करना है, जो स्थानीय डेटा फ़्रेम को SQL का उपयोग करके दूरस्थ डेटा फ़्रेम में बदल देता है यहां तक ​​​​कि केवल-पढ़ने के लिए कनेक्शन का उपयोग करते समय

df_to_pg <- function(df, conn) {

    collapse <- function(x) paste0("(", paste(x, collapse = ", "), ")")

    names <- paste(DBI::dbQuoteIdentifier(conn, names(df)), collapse = ", ")

    values <-
        df %>%
        lapply(DBI::dbQuoteLiteral, conn = conn) %>%
        purrr::transpose() %>%
        lapply(collapse) %>%
        paste(collapse = ",\n")

    the_sql <- paste("SELECT * FROM (VALUES", values, ") AS t (", names, ")")

    temp_df_sql <- dplyr::tbl(conn, dplyr::sql(the_sql))
    
    return(temp_df_sql)
}

उपयोग में फ़ंक्शन का एक उदाहरण यहां दिया गया है। फ़ंक्शन का परीक्षण PostgreSQL और SQL सर्वर पर किया गया है, लेकिन SQLite पर काम नहीं करेगा (VALUES की कमी के कारण) कीवर्ड जो इस तरह से काम करता है)। मेरा मानना ​​है कि इसे MySQL या Oracle पर काम करना चाहिए, क्योंकि इनमें VALUES है कीवर्ड।

library(dplyr, warn.conflicts = FALSE)
library(DBI)
   
pg <- dbConnect(RPostgres::Postgres())     

events <- tibble(firm_ids = 10000:10024L,
                 date = seq(from = as.Date("2020-03-14"), 
                            length = length(firm_ids), 
                            by = 1))
events
#> # A tibble: 25 x 2
#>    firm_ids date      
#>       <int> <date>    
#>  1    10000 2020-03-14
#>  2    10001 2020-03-15
#>  3    10002 2020-03-16
#>  4    10003 2020-03-17
#>  5    10004 2020-03-18
#>  6    10005 2020-03-19
#>  7    10006 2020-03-20
#>  8    10007 2020-03-21
#>  9    10008 2020-03-22
#> 10    10009 2020-03-23
#> # … with 15 more rows

events_pg <- df_to_pg(events, pg)
events_pg
#> # Source:   SQL [?? x 2]
#> # Database: postgres [[email protected]/tmp:5432/crsp]
#>    firm_ids date      
#>       <int> <date>    
#>  1    10000 2020-03-14
#>  2    10001 2020-03-15
#>  3    10002 2020-03-16
#>  4    10003 2020-03-17
#>  5    10004 2020-03-18
#>  6    10005 2020-03-19
#>  7    10006 2020-03-20
#>  8    10007 2020-03-21
#>  9    10008 2020-03-22
#> 10    10009 2020-03-23
#> # … with more rows




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. psql - कमांड के परिणामों को एक फाइल में सेव करें

  2. PostgreSQL में "त्रुटि:  प्रत्येक UNION क्वेरी में समान संख्या में कॉलम होने चाहिए" को ठीक करें

  3. इनपुट फ़ाइल एक टेक्स्ट प्रारूप डंप प्रतीत होती है। कृपया psql . का उपयोग करें

  4. त्रुटि:अनुक्रमणिका अभिव्यक्ति में कार्यों को पोस्टग्रेज में अपरिवर्तनीय चिह्नित किया जाना चाहिए

  5. PostgreSQL क्रिएट एक्सटेंशन का उपयोग करके नए मॉड्यूल बनाना