RPostgreSQL将多个CSV文件加载到Postgresql表中

RPostgreSQL将多个CSV文件加载到Postgresql表中,r,postgresql,csv,rpostgresql,R,Postgresql,Csv,Rpostgresql,我不太会使用Postgresql,但在填充我用多个*.csv文件创建的表时遇到了问题。我首先在pgAdmin4中工作,然后我决定在RPostgreSQL上工作,因为R是我的主要语言 无论如何,我正在处理(目前)30个csv文件位于一个文件夹。所有文件都具有相同的标题和一般结构,例如: Y:/Clickstream/test1/video-2016-04-01_PARSED.csv Y:/Clickstream/test1/video-2016-04-02_PARSED.csv Y:/Clicks

我不太会使用Postgresql,但在填充我用多个*.csv文件创建的表时遇到了问题。我首先在pgAdmin4中工作,然后我决定在RPostgreSQL上工作,因为R是我的主要语言

无论如何,我正在处理(目前)30个csv文件位于一个文件夹。所有文件都具有相同的标题和一般结构,例如:

Y:/Clickstream/test1/video-2016-04-01_PARSED.csv
Y:/Clickstream/test1/video-2016-04-02_PARSED.csv
Y:/Clickstream/test1/video-2016-04-03_PARSED.csv
。。。等等

我尝试使用以下RPostgresql特定的答案加载所有csv文件。遗憾的是,它没有起作用。我的代码指定如下:

library(RPostgreSQL)

dir = list.dirs(path = "Y:/Clickstream/test1")
num = (length(dir))

psql.connection <- dbConnect(PostgreSQL(), 
                  dbname="coursera", 
                  host="127.0.0.1", 
                  user = "postgres", 
                  password="xxxx")

for (d in dir){
  filenames <- list.files(d)

for (f in filenames){  
  csvfile <- paste0(d, '/', f)

# IMPORT USING COPY COMMAND
sql <- paste("COPY citl.courses FROM '", csvfile , "' DELIMITER ',' CSV ;")
dbSendQuery(psql.connection, sql)

  }
}

# CLOSE CONNNECTION
dbDisconnect(psql.connection)
如果我理解正确,我的第一个文件名中有一个无效参数。我不是很确定,但我最近再次使用PostgreSQL和R中的RPostgreSQL。任何帮助都将不胜感激

提前谢谢

编辑:我发现了问题,但由于某种原因无法解决。在for循环中复制路径时:

# IMPORT USING COPY COMMAND
sql <- paste("COPY citl.courses FROM '",csvfile,"' DELIMITER ',' CSV ;")

这意味着无效的参数是文件路径之间的空白。我试图改变这一点,但没有成功。任何帮助都将不胜感激

试试这样的东西

Files <- list.files("Y:/Clickstream/test1", pattern = "*.csv", full.names = TRUE)

CSVs <- lapply(Files, read.csv)

psql.connection <- dbConnect(PostgreSQL(), 
                  dbname="coursera", 
                  host="127.0.0.1", 
                  user = "postgres", 
                  password="xxxx")


for(i in 1:length(Files)){

  dbWriteTable(psql.connection
    # schema and table
    , c("citl", "courses")
    , CSVs[i]
    , append = TRUE # add row to bottom
    , row.names = FALSE
    )

}

文件1。复制命令在服务器上运行,文件也必须在服务器上。2.请检查文件的权限-必须允许它读取
postgres
userHi-Roman。非常感谢您的评论。恐怕我对psql不是很熟悉,所以我在理解你的两个答案时有点困难。如果我解释错误,请纠正我:1)将文件放在服务器上是什么意思?实际上,我的所有文件都在服务器上,但它们还没有加载到psql中。2) 我是超级用户,拥有数据库中的所有权限。我还拥有文件所在服务器的管理权限。Hi JackStat。谢谢你的回答。我试图避免在R中加载文件,因为它们的总容量高达11GB(仅用于测试文件夹)。如果它们没有那么“重”,那么您的代码肯定会适用于我的案例。我的目的是在psql中加载文件,以使事情更快。再次感谢大家!
sql 
[1] "COPY citl.courses FROM ' Y:/Clickstream/test1/video-2016-04-01_PARSED.csv ' DELIMITER ',' CSV ;"
Files <- list.files("Y:/Clickstream/test1", pattern = "*.csv", full.names = TRUE)

CSVs <- lapply(Files, read.csv)

psql.connection <- dbConnect(PostgreSQL(), 
                  dbname="coursera", 
                  host="127.0.0.1", 
                  user = "postgres", 
                  password="xxxx")


for(i in 1:length(Files)){

  dbWriteTable(psql.connection
    # schema and table
    , c("citl", "courses")
    , CSVs[i]
    , append = TRUE # add row to bottom
    , row.names = FALSE
    )

}