首页 > 解决方案 > 如何在 R 中使用 RPostgreSQL 在 INSERT 语句中获取自动生成的键

问题描述

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

有没有办法像 JDBC 一样做到这一点?

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

标签: rrpostgresql

解决方案


最终,我利用了 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

推荐阅读