r - RPostgres 中是否有一个函数可以为 Postgres 中的表创建/标识主键?

标签 r postgresql function primary-key

我需要首先确定表是否有为其创建的主键,如果没有,则需要创建该主键,如果有,则需要更改它。 RPostgres 中是否有函数可以提供 Postres 中表的主键信息,并且是否有函数可以允许我创建/覆盖所述表的主键?

谢谢!

我已经使用 dbSendQuery 通过 SQL 创建主索引,但是如果主键已经创建,那么代码就会崩溃。下面的例子:

keys_create_tbl <-  dbplyr::build_sql(
      "ALTER TABLE ", dplyr::sql(table_name),
      " ADD CONSTRAINT ", dplyr::sql(paste0(table_name,"_keys"))," PRIMARY KEY (",dplyr::sql(primary_keys),");
      ")
# Send the query to Postgres
RPostgres::dbSendQuery(pg_conn, keys_create_tbl)

最佳答案

不,但这里有一个可行的方法。如果您是第一次创建 key ,请先删除现有 key ,然后使用 IF EXISTS 来抑制错误。

create_primary_key <- function(conn, tableName, colName) {
  dbSendQuery(conn, 
    paste0("ALTER TABLE ", tableName,
      " DROP CONSTRAINT IF EXISTS ",tableName, "_pkey;"))
  
  dbSendQuery(conn, 
    paste0("ALTER TABLE ", tableName,
      " ADD PRIMARY KEY (",colName, ");"))
}

关于r - RPostgres 中是否有一个函数可以为 Postgres 中的表创建/标识主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54539522/

相关文章:

从多个时区读取 R 中的时间戳数据

r - 从分组单选操作按钮禁用单选单选

c - 当我返回一个多维数组时,如何将我的函数中的内容传回我的结构

regex - 正则表达式或 LIKE 模式的转义函数

c - 如何在函数中使用链接列表

function - Scala 编译器在请求第二个参数集中的函数时提示 "ambiguous reference to overloaded definition"

r - 按组查找每行日期后满足条件的第一行

r - 在 R 中使用嵌套 if 优化 For 循环

sql - 如何从另一个表中获取最后 2 条记录作为列

postgresql - 跨所有 postgresql 模式更改表