如何在R中使用RPostgreSQL在INSERT语句中获取自动生成的键

时间:2019-06-24 13:31:16

标签: r rpostgresql

当使用PostgreSQL的R数据库接口(RPostgreSQL)时,在INSERT语句之后我无法找到获取自动生成的密钥的方法。

有没有一种方法可以像在JDBC中那样?

https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#getGeneratedKeys%28%29

1 个答案:

答案 0 :(得分:1)

最终,我利用了PostgreSQL特定的SQL扩展,即RETURNING语句的INSERT子句,该子句在执行INSERT语句后返回生成的主键。还必须欺骗DBI来处理INSERT查询,就好像它是一个SELECT查询一样,以访问返回的值,即生成的键。

假设我们在数据库中有下表:USERS(id, name),其中id是自动生成的主键。以下示例R代码段说明了从数据库获取生成的密钥并将其分配给R对象的概念:

query <- sprintf(
  "INSERT INTO users (name) VALUES ('%s') RETURNING id",
  users$name
)

dbres = dbGetQuery(conn, query)
users$id = dbres$id