У меня есть две таблицы public_a.budget_items
и public_b.budget_items
с идентичными схемами и я пытаюсь скопировать недостающие записи одного из них на другой, используя этот запрос:PostgreSQL: скопировать недостающие записи из одной таблицы в другую
INSERT INTO public_b.budget_items
SELECT a.*
FROM public_a.budget_items a
WHERE a.id NOT IN (SELECT b.id
FROM public_b.budget_items b
WHERE b.id = a.id
OR (b.budget_id = a.budget_id
AND b.NAME = a.NAME
AND b.type = a.type
AND b.asset = a.asset))
но я получаю эту ошибку:
ERROR: duplicate key value violates unique constraint "uc_budget_items_parent_null" SQL state: 23505 Detail: Key (budget_id, name, type, asset)=(3486, Octopus, 6, T) already exists
ограничение uc_budget_items_parent_null
определяется следующим образом:
CREATE UNIQUE INDEX uc_budget_items_parent_null ON budget_items USING btree (
budget_id, name, type, asset);
Я думал, что условие (b.budget_id=a.budget_id and b.name=a.name and b.type = a.type and b.asset = a.asset)
должно помочь мне избежать этой проблемы, но, похоже, она не работает.
Очевидно, что я что-то пропустил. Есть идеи?
Будет ли 'where a.id not in (select id from public_b.budget_items)' работать? – Bill
@Bill No. В таблице помимо дополнительных первичных ключей (id) есть дополнительные ограничения, например 'uc_budget_items_parent_null'. Я должен учитывать эти ограничения в запросе. – EatEmAll