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

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

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

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


person Endre    schedule 24.06.2019    source источник
comment
Я думаю, что общий ответ: а) узнать, поддерживает ли API уровня C его, и б) если да, возможно, обсудить патч для пакета, чтобы раскрыть его. В противном случае схитрить и запустить select после insert ?   -  person Dirk Eddelbuettel    schedule 24.06.2019
comment
Интересно, а зачем вам автоматически сгенерированные ключи после INSERT? Обычно они не отображаются буквально на прикладном уровне, а только для объединения таблиц в операторах SQL.   -  person Parfait    schedule 24.06.2019


Ответы (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
person Endre    schedule 27.06.2019