Tesporta database, tipprova ttella' f'istanza friska, u MySQL jitfa':
Jew, fuq PostgreSQL:
DETAIL: Key (user_id)=(42) is not present in table "users".
Għaliex jiġri dan
Foreign key tgħid “kull orders.user_id irid jindika lejn users.id eżistenti.” Meta d-dump idaħħal orders qabel users, ir-ringiela ġenitur imsemmija għadha ma teżistix, u d-database jirrifjuta r-ringiela.
Il-biċċa l-kbira tal-għodod tad-dump jiktbu t-tabelli b'ordni alfabetiku jew fl-ordni tal-ħolqien — mhux fl-ordni tad-dipendenza tal-foreign key. Għalhekk orders (ibna) ta' spiss jaqa' qabel users (ġenitur), u l-import jinkiser.
Soluzzjoni 1: Erġa' organizza l-INSERTs skont id-dipendenza (is-soluzzjoni korretta)
Is-soluzzjoni nadifa hija li ddaħħal kull tabella ġenitur qabel it-tfal tagħha. Dan ifisser li tirriżolvi l-foreign keys fi graph ta' dipendenza u ttella' t-tabelli f'ordni topoloġiku: users → orders → order_items.
Li tagħmel dan bl-idejn f'fajl ta' bosta gigabytes huwa ta' wġigħ — trid issegwi kull FOREIGN KEY fost id-dikjarazzjonijiet CREATE TABLE u ALTER TABLE u taqta'/tikkopja blokki kbar ta' INSERT fis-sekwenza t-tajba.
Soluzzjoni 2: Iddiżattiva l-foreign key checks waqt l-import
Għal dump komplet u diġà konsistenti tista' bla periklu taqbeż il-validazzjoni waqt li ttella'. Fuq MySQL, iddawwar il-fajl:
-- MySQL SET FOREIGN_KEY_CHECKS = 0; -- ... id-dikjarazzjonijiet INSERT kollha tiegħek ... SET FOREIGN_KEY_CHECKS = 1;
Fuq PostgreSQL, iddifferixxi l-constraints ġewwa transazzjoni:
-- PostgreSQL BEGIN; SET CONSTRAINTS ALL DEFERRED; -- ... id-dikjarazzjonijiet INSERT kollha tiegħek ... COMMIT;
Erġa' attiva l-checks wara biex il-kitbiet futuri jibqgħu validati. Dan jaħdem, imma jaħbi biss il-problema tal-ordni — jekk id-dump huwa parzjali, xorta tista' tispiċċa b'ringieli orfni.
Soluzzjoni 3: Agħmel it-tnejn awtomatikament b'DumpCleaner
DumpCleaner jaqra d-dump, jestratti kull foreign key minn CREATE TABLE u ALTER TABLE, jibni l-graph tad-dipendenza, u jesporta fajl nadif li sempliċiment jimporta:
- Iġbed id-dump
.sqltiegħek ġo DumpCleaner (MySQL, MariaDB, PostgreSQL, SQLite jew MS SQL). - Agħżel Ordni tal-INSERT → Skont id-dipendenzi (FK-aware). Il-ġenituri jitqiegħdu qabel it-tfal awtomatikament permezz ta' topological sort.
- Fakultattivament immarka Iddiżattiva l-foreign key checks — idawwar l-output bid-dikjarazzjoni korretta għad-database tiegħek.
- Esporta. Importa l-fajl il-ġdid — l-iżball tal-constraint sparixxa.
Saħansitra jinnota foreign keys ċirkulari u jwissik minflok ma jipproduċi ordni impossibbli.
Aktar l-ebda kirurġija manwali tal-INSERT
DumpCleaner jerġa' jorganizza l-inserts skont id-dipendenza tal-foreign key fuq fajls ta' kwalunkwe daqs — bi streaming, b'memorja kostanti. App nattiva għal macOS & iPadOS, xiri ta' darba.
Niżżel mill-App StoreMistoqsijiet frekwenti
Għaliex jiġri “a foreign key constraint fails” fl-import?
Ringiela ibna tirreferi għal ringiela ġenitur li għadha ma ddaħħlitx, għax id-dump jorganizza l-INSERTs b'ordni alfabetiku jew skont il-ħin tal-ħolqien minflok skont id-dipendenza tal-foreign key.
Huwa sikur li tiddiżattiva l-foreign key checks waqt l-import?
Iva, għal dump sħiħ u konsistenti. Qed taqbeż biss il-validazzjoni ta' data li kienet diġà valida fid-database tas-sors. Erġa' attiva l-checks wara.
Kif nista' nerġa' norganizza l-INSERTs mingħajr ma neditja l-fajl bl-idejn?
DumpCleaner jinnota l-foreign keys, jibni graph ta' dipendenza, u jesporta l-INSERTs f'ordni topoloġiku — biex il-ġenituri dejjem jitgħabbew qabel it-tfal.
Dan jaħdem għal PostgreSQL ukoll?
Iva. DumpCleaner jappoġġa l-output ta' pg_dump u jista' joħroġ SET CONSTRAINTS ALL DEFERRED kif ukoll inserts organizzati skont id-dipendenza.
Importa d-dumps mingħajr l-uġigħ ta' ras tal-FK
Iġbed, erġa' organizza skont id-dipendenzi, esporta. DumpCleaner jieħu ħsieb il-foreign keys biex l-import tiegħek sempliċiment jaħdem.
Niżżel mill-App Store