Вставить записи в таблицу с пропущенной проверкой уникальности - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть эта таблица, которая имеет некоторые ограничения уникальности, и когда я делаю конкретный оператор вставки, я хочу убедиться, что ограничения уникальности отключены и не включены. Возможно отключить уникальные ограничения, определенные для таблицы, а затем включить ее снова - или, может быть, даже лучше только для определенного запроса?

Я использую 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;
$$ 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...