首页 > 解决方案 > 将条目插入到跳过唯一性检查的表中

问题描述

我有这个表,它有一些唯一性约束,当我执行特定的插入语句时,我想确保禁用和未启用唯一性约束。可以禁用为表定义的唯一约束,然后再次启用它 - 或者也许仅对特定查询更好?

我正在使用 postgres 版本 12

我的表最初是在没有任何唯一性约束的情况下创建的,但如果需要,则会更改为具有唯一性约束。

-- Create table with EntityId
CREATE TABLE IF NOT EXISTS public.{table_name}
    ({table_name}_id BIGSERIAL PRIMARY KEY);


-- Create table_registration
CREATE TABLE IF NOT EXISTS public.{table_name}_registration 
(
    entry_id bigint REFERENCES |entityName|({table_name}_id),
    row_id BIGSERIAL PRIMARY KEY,
    valid tsrange,
    entry_name text,
    registration tsrange,
    registration_by varchar(255),
    |NewAttribute| |datatype|
);

后来是这样添加的约束

ALTER TABLE {table_name}_registration 
DROP Constraint IF EXISTS {table_name}_{string.Join('_', listOfAttributes)}_key, 
ADD Constraint {table_name}_{string.Join('_', listOfAttributes)}_key UNIQUE({string.Join(',', listOfAttributes)});

在执行此操作之前,所有唯一性都使用此删除

-- Drop all uniqueness constraints
DO $$
DECLARE r RECORD;
BEGIN
  FOR r in  SELECT
                conrelid::regclass,
                conname
            FROM
                pg_constraint
            WHERE
                contype IN ('u')
                AND connamespace = 'public'::regnamespace
  LOOP
    EXECUTE format('ALTER TABLE %I DROP CONSTRAINT %I', r.conrelid::text, r.conname::text);
  END LOOP;
END;
$$ 

标签: postgresql

解决方案


推荐阅读