В конце концов, я использовал специфичное для 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