中的dbWriteTable
函数RPostgreSQL
似乎忽略了列名,并尝试按原样将数据从 R 推送到 PostgreSQL。当附加到现有表时,这是有问题的,特别是如果 R 对象中有未指定的列应该被赋予默认值。
RMySQL 通过将列名添加到LOAD DATA LOCAL INFILE
. 如何强制 RPostgreSQL 在dbWriteTable
when中为未指定的列分配默认值append=TRUE
?
这是一个例子:
CREATE TABLE test (
column_a varchar(255) not null default 'hello',
column_b integer not null
);
insert into test values (DEFAULT, 1);
产生下表:
select * from test;
column_a | column_b
----------+----------
hello | 1
(1 row)
我想从 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)
但我收到以下错误:
Error in postgresqlgetResult(new.con) :
RS-DBI driver: (could not Retrieve the result : ERROR: missing data for
column "column_b"
CONTEXT: COPY test, line 1: "92"
)
这是因为我没有指定column_a
字段,所以dbWriteTable
试图将 column_b 的数据写入 column_a。我想强制dbWriteTable
使用默认值column_a
,并正确column_b
写入column_b
.
只有在以下情况下,我才会失败:
- 我未能指定没有默认值的列
- 我尝试插入表中不存在的列
- 我将错误的数据类型插入现有列