- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 PostgreSQL 的新手,我正在尝试使用 R 将表写入 PostgreSQL。请参阅下面的 R 代码;首先制作一些可重现的数据框:
> Time<-c('201512', '201511', '201510')
> Department<-c('ABC', 'BCA', 'NBA')
> Pro_Type<-c('standard', 'maintain', 'sustaining')
> Man_month<-c('111.4', '124.1', '232.1')
> ID<-c('1','2', '3')
> melt_short<-data.frame(Time, Department, Pro_Type, Man_month, ID)
> melt_short
Time Department Pro_Type Man_month ID
1 201512 ABC standard 111.4 1
2 201511 BCA maintain 124.1 2
3 201510 NBA sustaining 232.1 3
然后创建连接:
require("RPostgreSQL")
# loads the PostgreSQL driver
drv <- dbDriver("PostgreSQL")
# creates a connection to the postgres database
con <- dbConnect(drv, dbname = "XXX",
host = "XXX.XX.XX.XXX", port = 5432,
user = "postgres", password = XXXXXX)
然后我在 PostgreSQL 数据库中创建一个表:
CREATE TABLE dms_melt
(
"Time" numeric,
"Department" character(1),
"Pro_type" character(1),
"Man_month" numeric,
"ID" numeric NOT NULL,
CONSTRAINT dms_melt_pkey PRIMARY KEY ("ID")
)
WITH (
OIDS=FALSE
);
ALTER TABLE dms_melt
OWNER TO postgres;
最后执行写表代码,报错:
dbWriteTable(con, "dms_melt", value = melt_short, append = T,row.names=F)
Error in postgresqlgetResult(new.con) :
RS-DBI driver: (could not Retrieve the result : ERROR: value too long for
type character(1) CONTEXT: COPY dms_melt, line 1, column Department: "ABC"
应该没有那么难,但我一直在寻找解决方案,但没有成功。实际上我已经使用“mtcars”数据集来写表并且没有问题。
data(mtcars)
df <- data.frame(carname = rownames(mtcars),
mtcars,
row.names = NULL)
df$carname <- as.character(df$carname)
dbWriteTable(con, "cartable",
value = df, append = TRUE, row.names = FALSE)
[1] TRUE
插入我创建的 PostgreSQL:
CREATE TABLE cartable
(
carname character varying,
mpg numeric(3,1),
cyl numeric(1,0),
disp numeric(4,1),
hp numeric(3,0),
drat numeric(3,2),
wt numeric(4,3),
qsec numeric(4,2),
vs numeric(1,0),
am numeric(1,0),
gear numeric(1,0),
carb numeric(1,0)
)
WITH (
OIDS=FALSE
);
ALTER TABLE cartable
OWNER TO postgres;
提前感谢您的任何建议和想法。
最佳答案
注意下面两个表格列的数据类型:
...
"Department" character(1),
"Pro_type" character(1),
...
现在让我们看看您要插入的数据:
Time Department Pro_Type Man_month ID
1 201512 ABC standard 111.4 1
2 201511 BCA maintain 124.1 2
3 201510 NBA sustaining 232.1 3
现在是错误信息:
Error in postgresqlgetResult(new.con) :
RS-DBI driver: (could not Retrieve the result : ERROR: value too long for
type character(1) CONTEXT: COPY dms_melt, line 1, column Department: "ABC"
PostgreSQL 中的character(N)
数据类型是定长字符串类型。该列中的每个值都必须是长度为 N 的字符串。对于 character(1)
,这意味着每个值都必须包含一个字符。
值 'ABC'
是一个长度为 3 的字符串。它对于 character(1)
数据类型来说太长了。
您可能会将 R 字符向量类型与 SQL 字符类型混淆。在 R 中,字符向量的每个元素都是一个可变长度的字符串。具有讽刺意味的是,您可以使用语法 character(N)
在 R 中构造一个字符向量,其中 N 是结果向量中可变长度字符串元素的数量。在 SQL 中,您可以将列视为向量,但数据类型始终指的是单个单元格值的标量类型。 SQL语法中的Ncharacter(N)
是指每个字符串中的字符个数。
你的 mtcars
测试成功的原因是因为该表中唯一的字符串列是 carname
其数据类型 character varying
没有长度规范。来自PostgreSQL documentation :
If character varying is used without length specifier, the type accepts strings of any size. The latter is a PostgreSQL extension.
因此,您可以通过对这两列使用character varying
(或者更简洁的名称varchar
)来解决问题。您可以像在 mtcars
架构中一样省略长度规范,或者如果您知道这些列的值的契约(Contract)长度限制,您可以指定 varchar(N)
其中 N 是长度限制。此外,如果 Department
值始终为 3 个字符长,则您可以选择使用 char(3)
作为固定长度类型。
总结:
SQL
==========
character(N) fixed-length strings of length N
char(N) alias for character(N)
character alias for character(1)
char alias for character(1)
character varying(N) variable-length strings of maximum length N
varchar(N) alias for character varying(N)
character varying variable-length strings of unlimited length
varchar alias for character varying
R
==========
character(N) vector of length N of variable-length strings
关于R 无法通过 rPostgreSQL 将表写入 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36659709/
我正在尝试安装 R-Package RPostgreSQL,但出现以下错误, Error in dyn.load(file, DLLpath = DLLpath, ...) : unable to
我想将完整的数据框导出到已经在数据库(postgresql)中创建并包含类似数据的表中。 我发现很少有关于 dbwrite 表的问题(....overwrite = TRUE),我不想覆盖表中已经存在
我有一个 Shiny 的应用程序,它使用 RPostgreSQL 连接到数据库.在应用程序结束时,连接关闭,驱动程序应该被卸载,但我收到一个错误,警告我连接没有关闭。 代码如下所示: # in th
我在使用 RPostgreSQL 导入表时遇到问题。我的意思是,一列是 bigint 格式,当我创建简单查询时: df<- dbGetQuery(con, "
我正在尝试通过 R 访问 PostgreSQL 数据库。我尝试了以下代码: library(RPostgreSQL) library(DBI) drv sessionInfo()
目前我正在构建一个 Shiny 的应用程序,使用对 PostgreSQL 数据库的多个查询(主要是 SELECT 和 INSERT 语句)。该应用程序有效,但我正在努力使其更快。当我比较使用 RPos
我需要处理,我想是大整数,主键值 1380742793415240 . 在 R 中,我可以轻松调整选项(scipen=100),但我需要将该数据存储在 postgres db 中。 我已经尝试使用 d
我正在寻找一个 R 命令来列出 PostgreSQL 服务器中的可用数据库。我在 R 中使用 RPostgreSQL 包。 我知道如何连接到服务器,但我唯一需要知道的是如何列出可用数据库的名称。 最佳
我使用 RPostgresql 连接到本地 Postgres 数据库。通常我们使用 dbGetQuery 将查询作为字符串发送。有没有办法打印查询的执行时间? 在 postgres 中,\timing
警告:包“RPostgreSQL_0.4.tar.gz”无效错误:错误:未指定包警告信息: In install.packages("RPostgreSQL_0.4.tar.gz", lib = "/
我在使用 RPostgreSQL 包时遇到的一件事是 dbWriteTable(... overwrite=TRUE) 似乎破坏了现有的表结构(数据类型和约束),而 dbRemoveTable() 相
我是新手,想了解 R 和 PostgreSQL 如何相互交流。我最近只将 R 用于数据分析,但现在,我正在尝试直接从数据库导入。我已经安装了 RPostgreSQL 并连接到我的数据库,我可以看到所有
我正在使用 RPostgreSQL读取和写入数据。从任何模式中读取都可以完美运行,但我无法写入非公共(public)模式。例如,以下代码在 public 架构中放置了一个表,名称为 myschema.
我正在尝试设置一个并行任务,其中每个工作人员都需要进行数据库查询。我正在尝试为每个工作人员设置一个连接,如 this question 中所示但每次我尝试它都会返回 无论我注册了多少 worker 。
我想知道是否有办法通过 R (RPostgreSQL) 将 PostgreSQL 转储导入 PostgreSQL 数据库。 我知道这是我们通过 RPostgreSQL 将 R 中的 csv 或数据表写
我在 RPostgreSQL 中处理日期时间时遇到问题。具体来说,它涉及具有 UTC 时区的 POSIXct 对象,在上传到 postgres 数据库期间自动调整为夏令时。一个简单的例子: libra
我是 PostgreSQL 的新手,我正在尝试使用 R 将表写入 PostgreSQL。请参阅下面的 R 代码;首先制作一些可重现的数据框: > Time Department Pro_Type Ma
我正在使用 RPostgreSQL 连接到本地数据库。该设置在我的 Linux 机器上运行良好。 R 2.11.1,Postgres 8.4。 我正在使用带有多核 (doMC) 并行后端的“forea
我正在尝试使用 RPostgreSQL 将数据插入到预先存在的 PostgreSQL 表中,但我无法弄清楚 SQL 参数(准备好的语句)的语法。 例如假设我想做以下事情 插入 mytable (a,b
当使用 RPostgreSQL 时,我发现我不能以同样的方式使用 sqldf。例如,如果我使用以下代码加载库并将数据读入数据框: library(RPostgreSQL) drv 10") 这不再有
我是一名优秀的程序员,十分优秀!