我正在尝试使用RPostgreSQL和R v2.14.2将表读入R.
我的RPostgreSQL版本列为0.3-2,已于2012年5月16日下载.
我的DBI版本列为0.2-5,已于2012年5月16日下载.
我可以打开数据库,并列出表格.我要打开的表格显然存在,但是,当我尝试阅读它时,我收到一条错误消息.我不确定错误是在我的代码中还是在数据库的设置方式中.
library(RPostgreSQL)
# Loading required package: DBI
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, host = 'freda.freda.com', dbname = 'test', user = 'fredak', password = 'xxxx')
dbListTables(con)
# [1] "chemistry”
# [2] "ecog”
# [3] "hematology"
dbExistsTable(con, "ecog")
# [1] FALSE
MyTable <- dbReadTable(con, "ecog")
# Error in postgresqlExecStatement(conn, statement, ...) :
# RS-DBI driver: (could not Retrieve the result : ERROR: relation "ecog" does not exist
# LINE 1: SELECT * from "ecog"
# ^
# …Run Code Online (Sandbox Code Playgroud) 在RPostgresql中中断长时间运行查询的最佳方法是什么?
例如,我想查看表格的前10行并打算输入,
dbGetQuery(con,"
select * from big.table
limit 10
")
Run Code Online (Sandbox Code Playgroud)
但我有时会忽略"限制10"然后我的程序永远运行.从我的R终端按ctrl-C或停止按钮不起作用.我要么等待很长时间,然后看到完整的输出打印,否则我可以中止R进程.
这个问题是对本论坛之前已经发布的问题的扩展。我需要使用 RPostgreSQL 将数据框中的一行追加/更新到具有相同列的 PostgreSQL db 表中的表。我可以复制整个表或使用插入命令,如下所示:
insert into mytable (FName, LName, Age) values (Rosy, Rees, 54)
Run Code Online (Sandbox Code Playgroud)
但是,我想将行(或数据框中的子集)直接复制到 RPostgreSQL 数据库表。请问有什么建议吗?
例子:
R中的数据帧
FName LName Age
Rosy Rees 54
Run Code Online (Sandbox Code Playgroud)
从数据框中复制行之前 PostgreSQL 数据库中的表
FName LName Age
John Doe 35
Jane Sanders 32
Robert Muller 45
Run Code Online (Sandbox Code Playgroud)
从数据框中复制行后 PostgreSQL 数据库中的表
FName LName Age
John Doe 35
Jane Sanders 32
Robert Muller 45
Rosy Rees 54
Run Code Online (Sandbox Code Playgroud) 不喜欢Postgres的快捷方式\d+ tablename与工作RPostgreSQL?如果我尝试运行它们,我会收到语法错误:错误:'\ d'是一个无法识别的转义字符串,以"\ d"开头.
我试图逃避它,但没想到它.RPostgreSQL本身工作 - 我可以访问和查询我的数据库.
诚然,这个问题与此问题相似,但是提供的答案不足以作为我的示例。
我正在创建一个连接数据库的Shiny App。用户可以提供一些输入,一些“固定”查询将运行。现在,我想确定从应用程序退出时与数据库的连接已关闭。我可以使用按钮和stopApp功能,但这是假设用户会很好并且总是单击该按钮。用户有时可能会关闭窗口,从而使数据库连接保持打开状态,因此我想找到一种在用户关闭应用程序窗口时显式关闭连接的方法。
我想一种解决方案是实例化一个新连接,并在每个查询结束时关闭它,但这似乎效率很低。
这是一些工作代码来演示该问题。如果我从Rstudio运行此应用程序,然后关闭窗口,则仍然存在现有的连接dbListConnections(PostgreSQL())。追加dbDisconnect(con)到文件末尾无济于事。
library(shiny)
library(RPostgreSQL)
server <- shinyServer(function(input, output){
# Read in the dataset
connectDB <- eventReactive(input$connectDB, {
if(input$drv != "postgresql"){
stop("Only 'postgresql' implemented currently")
}else{
drv <- dbDriver("PostgreSQL")
port = 5432
}
con <- dbConnect(drv, user = input$user, password = input$passwd,
port = port, host = input$server, dbname=input$db_name)
con
})
output$test <- renderText({
con <- connectDB()
"connection success"
})
})
ui <- shinyUI(
fluidPage(
titlePanel("Test Connection"),
sidebarLayout( …Run Code Online (Sandbox Code Playgroud) 我正在尝试组装一个使用 RPostgreSQL包的小包。我知道使用其他包中的功能的方法不是使用而是library()使用命名空间仅导入单个函数。然而,我很难完成这项工作。
这是Imports我的文件的部分DESCRIPTION:
Imports: DBI,
RPostgreSQL
Run Code Online (Sandbox Code Playgroud)
当我打电话时
DBI::dbDriver("PostgreSQL")
Run Code Online (Sandbox Code Playgroud)
在我的包中的函数中我得到
Error: Couldn't find driver PostgreSQL. Looked in:
* global namespace
* in package called PostgreSQL
* in package called RPostgreSQL
Run Code Online (Sandbox Code Playgroud)
我缺少什么?
我正在尝试使用我的 Mac 连接到 Redshift 中的数据库。
我设法使用 dplyr 和 RPostgreSQL 连接到 Redshift,但即使我可以看到所有可用的表(无论架构如何),我也无法访问其中任何一个,因为它们都位于不同的架构下。
我已经尝试了各种语法来指定模式,但我没有得到任何结果。
这是我的 RPostgreSQL 代码:
library(RPostgreSQL)
drv <- dbDriver("PostgreSQL")
postgre.conn <-dbConnect(drv,
host="localhost", port="XXXX", dbname="redshiftdb",
user="XXXX", password="XXXX")
dbListTables(postgre.conn)
Run Code Online (Sandbox Code Playgroud)
这列出了所有表,无论架构如何。
我可以看到特定模式下的所有表,因此这有效:
dbGetQuery(postgre.conn,
"SELECT table_name FROM information_schema.tables
WHERE table_schema='my_schema'")
Run Code Online (Sandbox Code Playgroud)
但我无法使用以下任何命令访问 my_schema.my_table 中的数据:
dbSendQuery(postgre.conn,"SELECT * FROM my_table LIMIT 10")
dbSendQuery(postgre.conn,"SELECT * FROM my_schema.my_table LIMIT 10")
dbSendQuery(postgre.conn,"SELECT * FROM my_table WHERE table_schema='my_schema' LIMIT 10")
dbSendQuery(postgre.conn,"SELECT * FROM c("my_schema", "my_table") LIMIT 10")
Run Code Online (Sandbox Code Playgroud)
同样,这是我的 dplyr 代码:
library(dplyr)
dplyr.conn <- src_postgres(host="localhost", port="XXXX",
dbname = "redshiftdb", user = "XXXX", …Run Code Online (Sandbox Code Playgroud) Postgres 有许多方便的“反斜杠”命令(例如\dt、\du、\l等)。我想通过 RPostgresql 接口运行这些。我已经尝试过以下方法:
drv = dbDriver("PostgreSQL")
con <- dbConnect(drv,
dbname = "my_database",
host = "**********",
port = ****,
user = "******",
password = "******")
dbExecute(con, "\\dt")
# Close PostgreSQL connection
dbDisconnect(con)
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
Error in postgresqlExecStatement(conn, statement, ...) :
RS-DBI driver: (could not Retrieve the result : ERROR: syntax error at or
near "\"
LINE 1: \dt
^
)
Run Code Online (Sandbox Code Playgroud)
是否可以从 RPostgresql 运行这些?或者反斜杠命令仅限于命令行psql?
我无法在Windows(64位)上将PostgreSQL(在Heroku上)与RPostgreSQL连接起来.
我可以在Windows上将本地postgresql(而不是ssl)与RPostgreSQL连接起来.我可以在Windows上从PgAdmin连接Heroku上的PostgreSQL.我可以在OSX和Linux上使用RPostgreSQL连接Heroku上的PostgreSQL.
只有Windows上的RPostgreSQL无法连接Heroku PostgreSQL.
错误信息是:
Error in postgresqlNewConnection(drv, ...) :
RD-DBI driver: (could not connect....xxxxx
Run Code Online (Sandbox Code Playgroud)
有什么解决方案吗?
我正在寻找一个 R 命令来列出 PostgreSQL 服务器中的可用数据库。我在 R 中使用 RPostgreSQL 包。
我知道如何连接到服务器,但我唯一需要知道的是如何列出可用数据库的名称。
r ×10
rpostgresql ×10
postgresql ×5
dplyr ×1
heroku ×1
r-package ×1
shiny ×1
ssl ×1
windows ×1