Przeprowadzam migrację istniejącego środowiska testowego do Amazon RDS PostgreSQL. Struktura testowa ma funkcję przeładowywania danych w niektórych tabelach do wcześniejszego stanu. W tym celu wyłącza klucze obce, usuwa istniejące dane, ładuje stan zapisywania i ponownie włącza klucze obce.
Obecnie środowisko testowe wyłącza klucze obce, wyłączając wszystkie wyzwalacze (oczywiście wymaga to administratora):
alter table tablename disable trigger all;
W przypadku RDS nie działa to z:
BŁĄD: odmowa dostępu: „RI_ConstraintTrigger_a_20164” jest wyzwalaczem systemowym
Jak mogę tymczasowo wyłączyć klucze obce w Amazon RDS PostgreSQL?
Uwaga: podobne pytanie zostało już zadane ( PostgreSQL na RDS: jak zbiorczo importować dane z ograniczeniami FK? ), Ale dotyczyło to w szczególności importu offline, a rozwiązanie dotyczy także importu offline.
źródło
Odpowiedzi:
rola_replikacji_sesji
Znalazłem alternatywny sposób wyłączania kluczy obcych - https://stackoverflow.com/a/18709987
I ponownie je włączając
Działa to na RDS, ale nadal wymaga nietypowych uprawnień (tzn. Domyślnie nie jest przyznawanych).
upuszczanie i odtwarzanie plików FK
Alternatywnym rozwiązaniem jest, jak sugerowano w komentarzach, tymczasowe upuszczenie FK. Daje to dodatkową korzyść polegającą na weryfikacji danych po ponownym włączeniu FK.
Rzut
Odtwarzanie
źródło