首页 > 解决方案 > RPostgres 中是否有一个函数可以为 Postgres 中的表创建/识别主键?

问题描述

我需要首先确定一个表是否有为其创建的主键,如果没有,我需要创建该主键,或者如果有则更改它。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)

标签: rpostgresqlfunctionprimary-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, ");"))
}

推荐阅读