【发布时间】:2019-08-12 14:48:16
【问题描述】:
我有一个PostgreSQL 数据库,其中已经定义了一个表和列。表的主键是(Id, datetime) 列的组合。我需要定期将来自 R data.table 的不同 ID 的数据插入到数据库中。但是,如果特定(Id, datetime) 组合的数据已经存在,则应该更新(覆盖)它。如何使用 RPostgres 或 RPostgreSQL 包做到这一点?
当我尝试插入一个 data.table 已经存在一些 (Id, datetime) 行时,我收到一条错误消息,指出违反了主键约束:
dbWriteTable(con, table, dt, append = TRUE, row.names = FALSE)
Error in connection_copy_data(conn@ptr, sql, value) :
COPY returned error: ERROR: duplicate key value violates unique constraint "interval_data_pkey"
DETAIL: Key (id, dttm_utc)=(a0za000000CSdLoAAL, 2018-10-01 05:15:00+00) already exists.
CONTEXT: COPY interval_data, line 1
【问题讨论】:
-
问题太宽泛了。请阅读教程/小插曲/书籍并认真尝试。然后,返回有关您的实施的具体问题。
-
插入到一个新的(或重用但被截断的)表中,并将插入合并到目标表中。抱歉,这是一个纯 SQL 问题,而不是 R 问题...
-
@RYoda 你的意思是创建一个新的临时表,然后将其与目标表合并?您能否指出有关如何执行您提到的“合并插入”操作的资源?
-
请参阅
mergestmt PostgreSQL 文档:postgresql.org/message-id/attachment/23520/sql-merge.html -
我在尝试 MERGE 语句时遇到语法错误,这里的答案似乎表明 PostgreSQL 中没有 MERGE 语句? stackoverflow.com/questions/49368083/…
标签: r data.table rpostgresql