Как я могу получить автоматически сгенерированные ключи в инструкции INSERT, используя RPostgreSQL в R - PullRequest
0 голосов
/ 24 июня 2019

Я не могу найти способ получения автоматически сгенерированных ключей после оператора INSERT при использовании интерфейса базы данных R для PostgreSQL (RPostgreSQL).

Есть ли способ сделать это, как в JDBC?

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

1 Ответ

1 голос
/ 28 июня 2019

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