如何在postgresql中执行时获得唯一的违反键的列名

dm7nw8vv  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(307)

我正在用foreach循环插入多个表,我需要唯一键列名,因为它在运行时违反了唯一键约束,所以我可以修改值并插入它。

foreach ($data as $table_name){

 $sql="INSERT INTO $table_name ($column_name) VALUES ($column_vlues)"

$result=query_params($db_conn,$sql,$params)
 if($result){
  //Do nothing. Its fine
}else{
 //If its voileting the unique key contraints then change the column value like new column value = $column_name_which_voileting.$value and then insert it.
 }
}

任何帮助都将受到感谢。

v9tzhpje

v9tzhpje1#

你可以用 pg_get_result_error() 为了得到 PGSQL_DIAG_MESSAGE_PRIMARY ,它将包含如下约束名称:

duplicate key value violates unique constraint "uni_id_key"

从中可以提取约束的名称。然后您可以查询 information_schema.constraint_column_usage 若要查找与该约束关联的列(如果约束跨越多个列,则可能必须求助于 pg_catalog.pg_constraint 找到它们的相对位置)。
postgresql实际上将普通约束名与错误消息一起发送,但是php无法提取错误响应字段。

相关问题