PostgreSQL unterstützt keine Konfigurationsoption, es gibt jedoch eine andere Möglichkeit.
postgres=
Table "public.b"
┌────────┬─────────┬───────────┐
│ Column │ Type │ Modifiers │
╞════════╪═════════╪═══════════╡
│ id │ integer │ │
└────────┴─────────┴───────────┘
Foreign-key constraints:
"b_id_fkey" FOREIGN KEY (id) REFERENCES a(id) DEFERRABLE
Die referenzielle Integrität in Postgres wird durch Trigger implementiert, und Sie können Trigger für Tabellen deaktivieren. Mit dieser Methode können Sie beliebige Daten hochladen (Risiko), diese sind jedoch erheblich schneller - da die Überprüfung großer Datenmengen teuer ist. Und wenn Ihr Upload sicher ist, können Sie es tun.
BEGIN;
ALTER TABLE b DISABLE TRIGGER ALL;
ALTER TABLE b ENABLE TRIGGER ALL;
COMMIT;
Die nächste Möglichkeit ist die Verwendung von verzögerten Einschränkungen. Diese Verschiebungsbeschränkungsprüfung zum Festschreiben der Zeit. Sie sollten also die Reihenfolge mit INSERTBefehlen nicht respektieren :
ALTER TABLE b ALTER CONSTRAINT b_id_fkey DEFERRABLE;
BEGIN
postgres=
SET CONSTRAINTS
postgres=
INSERT 0 1
postgres=
INSERT 0 1
postgres=
ERROR: insert or update on table "b" violates foreign key constraint "b_id_fkey"
DETAIL: Key (id)=(100) is not present in table "a".
Diese Methode sollte für Sie bevorzugt werden, da die eingefügten Daten überprüft werden.
super userRolle sperren, damit Kunden die Replikationseinstellungen nicht durcheinander bringen können. Es sieht so aus, als müsste ich ein Superuser sein, um einige Systemauslöser zu deaktivieren. (Ich verwende derzeit mein Administratorkonto, das auch der Eigentümer ist. Ich bin nicht sicher, warum es einmal funktioniert hat.) Das Festlegen der Replikationsoption ist ebenfalls keine praktikable Option, da hierfür auch diesuper userRolle erforderlich ist . Meine einzige Möglichkeit scheint darin zu bestehen, die Fremdschlüssel zu