У меня есть эта таблица, которая имеет некоторые ограничения уникальности, и когда я делаю конкретный оператор вставки, я хочу убедиться, что ограничения уникальности отключены и не включены. Возможно отключить уникальные ограничения, определенные для таблицы, а затем включить ее снова - или, может быть, даже лучше только для определенного запроса?
Я использую 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;
$$