标签: rpostgresql

我无法使用dplyr包连接postgresql schema.table

我试图用postpres连接dplyr函数

my_db <- src_postgres(dbname = 'mdb1252', user = "diego", password = "pass")
my_db
src:  postgres 9.2.5 [postgres@localhost:5432/mdb1252]
tbls: alf, alturas, asociad, atenmed, base, bfa_boys_p_exp, bfa_boys_z_exp,
  bfa_girls_p_exp, bfa_girls_z_exp, bres, c21200012012, c212000392011, c212000532011,
  c21200062012, c212006222012, c212007352012, c212012112013, c212012242012,
  c212012452012, c2222012242012, calles, cap, cap0110, casos_tbc_tr09, casos_tbctr09,
  casosvadela, catpo, cbcvl, cie09, cie10, cie103d, cie103dantigua, cie10c, cie9a,
  cie9mc, clasiarc, coalc, coddepto, codedades, codest, codlocaerbio, codprov, coheb,
  cohec, cohep, cohiv, coho09_20110909_m, coign, combl, comet, comp, comport, conev,
  conymad, copri, corci3cod, corci910, cores, corin, cotab, cutoi, cutto, …
Run Code Online (Sandbox Code Playgroud)

postgresql r rpostgresql dplyr

16
推荐指数
2
解决办法
2856
查看次数

使用RPostgreSQL的UTF-8/Unicode文本编码

我在Windows机器上运行R,它直接链接到PostgreSQL数据库.我没有使用RODBC.我的数据库以UTF-8编码,由以下R命令确认:

dbGetQuery(con, "SHOW CLIENT_ENCODING")
#   client_encoding
# 1            UTF8
Run Code Online (Sandbox Code Playgroud)

但是,当一些文本被读入R时,它在R中显示为奇怪的文本.

例如,我的PostgreSQL数据库中显示以下文本:"Stéphane"

出口至R之后它表现为:"STA©PHANE"(该é被编码为é)

导入RI时,使用dbConnect命令建立连接,dbGetQuery使用SQL查询数据的命令.连接到数据库或运行查询时,我没有在任何地方指定任何文本编码.

我在网上搜索过,找不到直接解决我的问题的方法.我找到了这个链接,但他们的问题是RODBC,我没有使用.

此链接有助于识别符号,但我不只是想在R ...中查找和替换太多数据.

我确实尝试在下面运行以下命令,然后发出警告.

Sys.setlocale("LC_ALL", "en_US.UTF-8")
# [1] ""
# Warning message:
# In Sys.setlocale("LC_ALL", "en_US.UTF-8") :
#   OS reports request to set locale to "en_US.UTF-8" cannot be honored
Sys.setenv(LANG="en_US.UTF-8")
Sys.setenv(LC_CTYPE="UTF-8")
Run Code Online (Sandbox Code Playgroud)

警告发生在Sys.setlocale("LC_ALL", "en_US.UTF-8")命令上.我的直觉是这是Windows特定的问题,并且在Mac/Linux/Unix中不会发生.

postgresql encoding r utf-8 rpostgresql

15
推荐指数
2
解决办法
7602
查看次数

一起使用sqldf和RPostgreSQL

使用时RPostgreSQL我发现我不能sqldf以同样的方式使用.例如,如果我使用以下代码加载库并将数据读入数据框:

library(RPostgreSQL)
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, host="localhost", user="postgres", password="xxx", dbname="yyy", port="5436")
rs <- dbSendQuery(con, "select * from table");                           
df<- fetch(rs, n = -1); dbClearResult(rs) 
dbDisconnect(con) 
Run Code Online (Sandbox Code Playgroud)

我知道在数据帧中有这个表的内容df.但是,如果我想使用sqldf我以前执行的命令运行SQL命令:

sqldf("SELECT * FROM df WHERE X > 10")
Run Code Online (Sandbox Code Playgroud)

这不再有效,因为我收到错误消息:

Error in postgresqlNewConnection(drv, ...) : 
  RS-DBI driver: (could not connect postgres@localhost on dbname "test"
)
Error in !dbPreExists : invalid argument type
Run Code Online (Sandbox Code Playgroud)

我认为这是我操作员的错误,但我无法确定如何提供哪些参数,sqldf以便它只关注数据框并且不会尝试连接到其他任何东西.

sql postgresql r sqldf rpostgresql

14
推荐指数
2
解决办法
1万
查看次数

在RHEL 6.5上安装RPostgreSQL libpq-fe.h错误

我有RHEL 6.5服务器,安装了R(3.1.1)和RStudioServer(0.98.1062)

我安装了postgresql-9.3并处理了一个大型数据库.为了将R连接到PostgreSQL,我过去使用过RPostgreSQL(仍在我的CentOS 7工作站上).但是,尝试在RHEL 6.5下编译我得到一个错误

In file included from RS-PQescape.c:7:
RS-PostgreSQL.h:23:26: error: libpq-fe.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

该文件位于我的系统上:

/usr/pgsql-9.3/include/libpq-fe.h
Run Code Online (Sandbox Code Playgroud)

Libpq是Postgres安装的一部分,但RPostgreSQL无法找到它:

[root@server /]# yum list libpq*
Loaded plugins: product-id, refresh-packagekit, security, subscription-manager
Installed Packages
libpqxx.x86_64     1:4.0.1-1.rhel6                                               @pgdg93
libpqxx-debuginfo.x86_64     1:4.0.1-1.rhel6                                     @pgdg93
libpqxx-devel.x86_64   1:4.0.1-1.rhel6                                           @pgdg93
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉RPostgreSQL在哪里看(符号链接?)或其他一些解决方法?这应该很简单,但我已经浪费了好几个小时......

postgresql r rpostgresql

12
推荐指数
2
解决办法
1万
查看次数

在Linux上安装RPostgreSQL

当我在R中尝试linux时

install.packages('RPostgreSQL')
Run Code Online (Sandbox Code Playgroud)

它因未指定的错误而失败:

  Warning message:
  In install.packages("RPostgreSQL") :
     installation of package ‘RPostgreSQL’ had non-zero exit status
Run Code Online (Sandbox Code Playgroud)

我试图解决问题:

 sudo apt-get install postgresql-server-dev-8.4 for postgresql version 8.4.
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用.

    sudo: apt-get: command not found
Run Code Online (Sandbox Code Playgroud)

我有PostgreSQL 9.1.11版本.

linux install rpostgresql

11
推荐指数
1
解决办法
7482
查看次数

我是否可以仅使用R中的dplyr语法运行SQL更新语句

我需要在某些PostgreSQL数据库表的其他列上更新条件值conditionnaly .我设法在R中编写一个SQL语句并dbExecuteDBI包中执行它.

library(dplyr)
library(DBI)

# Establish connection with database
con <- dbConnect(RPostgreSQL::PostgreSQL(), dbname = "myDb",
                 host="localhost", port= 5432, user="me",password = myPwd)

# Write SQL update statement
request <- paste("UPDATE table_to_update",
                 "SET var_to_change = 'new value' ",
                 "WHERE filter_var = 'filter' ")

# Back-end execution
con %>% dbExecute(request)
Run Code Online (Sandbox Code Playgroud)

是否可以仅使用dplyr语法执行此操作?出于好奇,我试过了

con %>% tbl("table_to_update") %>%
   mutate(var_to_change = if (filter_var == 'filter') 'new value' else var_to_change)
Run Code Online (Sandbox Code Playgroud)

它在R中工作但显然在db中没有任何作用,因为它使用了一个select语句.copy_to只允许appendoverwite选项,所以我看不到如何使用它,除非删除然后附加过滤后的观察...

r rstudio rpostgresql dplyr r-dbi

10
推荐指数
1
解决办法
1605
查看次数

如何使用RPostgreSQL参数(插入数据)

我正在尝试将数据插入到预先存在的PostgreSQL表中RPostgreSQL,我无法弄清楚SQL参数的语法(预处理语句).

例如,假设我想要做以下事情

insert into mytable (a,b,c) values ($1,$2,$3)

如何指定参数? dbSendQuery如果你只是把参数放在中,似乎不明白....

我发现dbWriteTable可以用来转储整个表,但是不允许你指定列(因此对默认值没有好处等).无论如何,一旦我获得了数据,我就需要知道其他查询(所以我认为这不是真正的插入特定的)!

当然,我只是遗漏了一些明显的东西......

sql postgresql r rpostgresql

9
推荐指数
2
解决办法
3903
查看次数

如何在RPostgreSQL中使用dbWriteTable(...,append = TRUE)的列默认值

dbWriteTable在功能上RPostgreSQL似乎忽略的列名,并试图自R将数据推到PostgreSQL原样.当附加到现有表时,这是有问题的,特别是如果在R对象中未指定的列应该给出默认值.

RMySQL通过添加列名来非常优雅地处理这种情况LOAD DATA LOCAL INFILE.如何强制RPostgreSQL在dbWriteTable何时将默认值分配给未指定的列append=TRUE

这是一个例子:

CREATE TABLE test (
    column_a varchar(255) not null default 'hello',
    column_b integer not null 
    );
insert into test values (DEFAULT, 1);
Run Code Online (Sandbox Code Playgroud)

产生下表:

select * from test;
 column_a | column_b 
----------+----------
 hello    |        1
(1 row)
Run Code Online (Sandbox Code Playgroud)

我想从R中向该表插入一些新数据:

require('RPostgreSQL')
driver <- PostgreSQL()
con <- dbConnect(driver, host='localhost', dbname='development')
set.seed(42)
x <- data.frame(column_b=sample(1:100, 10))
dbWriteTable(con, name='test', value=x, append=TRUE, row.names=FALSE)
dbDisconnect(con)
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

Error in postgresqlgetResult(new.con) : 
  RS-DBI driver: (could …
Run Code Online (Sandbox Code Playgroud)

postgresql r rpostgresql

9
推荐指数
1
解决办法
1万
查看次数

如何使用libssl和libpg以及SSL激活来编译RpostgreSQL

我在Windows上使用R连接到AWS上托管的PostgreSQL数据库.使用forcessl = 1设置数据库 - 这意味着需要使用sslmode = require设置任何连接.

基础RPostgreSQL包不提供任何ssl选项的暴露.这已成为一个问题多次(见这里,这里,这里这里)

我知道有使用该RPostgres软件包的解决方法,但出于其他功能原因,我更喜欢使用该RPostgreSQL软件包.

一些答案(例如这里)建议使用修改后的dbname连接ssl,如下所示:

dbConnect(dbDriver('PostgreSQL'),
    dbname   = 'dbname=foobar sslmode=require', # modified dbname
    host     = 'foobar.rds.amazonaws.com',
    port     = 5439,
    user     = 'foobar',
    password = 'foobar')
Run Code Online (Sandbox Code Playgroud)

但这对我来说不适用于使用CRAN版本的软件包.这导致我最近在RPostgreSQL github上提出了一个问题:https://github.com/tomoakin/RPostgreSQL/issues/88

初始用户在从源代码编译包时能够使用修改后的dbname方法.在Windows上,使用使用RTools编译的最新源包(0.6.2),运行修改后的dbname代码时出现以下错误:

Error in postgresqlNewConnection(drv, ...) : 
  RS-DBI driver: (could not connect xxxxx.rds.amazonawss.com:5432 on dbname "xxxxxxx": sslmode value "require" invalid when SSL support is not compiled in
)
Run Code Online (Sandbox Code Playgroud)

从这个和线程的其余部分看,在Windows和Mac中看起来无法从当前源获得SSL.但是,开发人员建议:

如果在libssl和libpq成为SSL激活形式的环境中编译,则驱动程序可以使用SSL. …

openssl r rpostgresql

9
推荐指数
1
解决办法
867
查看次数

使用 DBI 和 RPostgres 读/写 Postgres 大对象

我正在尝试在 R 中使用 PostgreSQL 的大对象(https://www.postgresql.org/docs/10/largeobjects.html{DBI} )功能,但使用/编写和读取时遇到一些问题{RPostgres}

这是我到目前为止所尝试过的:

# Getting the db
docker run --rm --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5433:5432 postgres
Run Code Online (Sandbox Code Playgroud)
library(DBI)
con <- dbConnect(
  RPostgres::Postgres(),
  dbname = "postgres",
  host = "localhost",
  port = 5433,
  user = "postgres",
  password = "mysecretpassword"
)
Run Code Online (Sandbox Code Playgroud)

创作作品:

> dbGetQuery(con, "SELECT lo_create(1234);")
  lo_create
1      1234
Run Code Online (Sandbox Code Playgroud)

但后来我很难弄清楚如何将 R 对象写入这个大对象。例如,我如何在 Postgres 中使用and编写mtcars一个大对象?{DBI}{RPostgres}

然后,我如何在 R 中再次读回它?

postgresql r rpostgresql

9
推荐指数
1
解决办法
638
查看次数

标签 统计

rpostgresql ×10

r ×9

postgresql ×7

dplyr ×2

sql ×2

encoding ×1

install ×1

linux ×1

openssl ×1

r-dbi ×1

rstudio ×1

sqldf ×1

utf-8 ×1