Konfliktløsning i logisk replikering
Lær, hvordan konflikter opstår i logisk replikering, og hvilke strategier PostgreSQL tilbyder til at registrere og løse dem.
Konfliktløsning i logisk replikering er en gratis Avanceret PostgreSQL: Indeksering, partitionering og replikering-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Avanceret PostgreSQL: Indeksering, partitionering og replikering, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Avanceret PostgreSQL: Indeksering, partitionering og replikering-kurset indeholder 4 lektioner i alt.
Hvorfor konflikter opstår
I modsætning til fysisk replikering anvender logisk replikering ændringer som SQL-operationer på abonnenten. Hvis lokale data afviger fra den indkommende ændring, opstår der en konflikt, og anvendelsen stopper.
Almindelige konflikttyper
Typiske konflikter omfatter:
- Overtrædelse af entydighed — en række med samme nøgle findes allerede
- Manglende række — en UPDATE eller DELETE rammer en række, der ikke findes på abonnenten
- Uoverensstemmelse i type eller begrænsning
Anvendelsesarbejderen går i stå
Når der opstår en konflikt, mislykkes abonnementets anvendelsesarbejder og forsøger gentagne gange den samme transaktion igen, så replikeringsefterslæbet vokser, indtil du griber ind.
Sådan findes konflikten
PostgreSQL-loggen registrerer den fejlslagne transaktion og dens LSN. Du kan også undersøge abonnementsstatistik.
SELECT subname, last_error_time, last_error_message
FROM pg_stat_subscription_stats;Løsning ved at rette data
En mulighed er at gøre de lokale data konsistente, så ændringen kan anvendes: slet den modstridende række, og lad derefter replikeringen forsøge igen.
DELETE FROM products WHERE id = 42;
-- the incoming INSERT for id 42 now appliesSådan springes en transaktion over
Hvis den problematiske ændring skal ignoreres, kan du springe den over ved hjælp af LSN. Brug dette forsigtigt, fordi dataene dermed opgives.
ALTER SUBSCRIPTION my_sub SKIP (lsn = '0/14A0B30');Deaktivering ved fejl
Indstil abonnementet til at deaktivere sig selv ved fejl, så det holder op med at prøve igen og venter på en operatør.
ALTER SUBSCRIPTION my_sub SET (disable_on_error = true);Forebyggelse af konflikter
Reducer konflikter ved at:
- Bruge én skriver pr. logisk datasæt
- Undgå overlappende primærnøgleintervaller på tværs af noder
- Sikre, at abonnentens skema matcher udgiverens
Replikidentitet er vigtig
UPDATE og DELETE skal bruge en replikidentitet for at finde målrækken. En tabel uden primærnøgle skal bruge REPLICA IDENTITY FULL, ellers mislykkes replikeringen.
ALTER TABLE logs REPLICA IDENTITY FULL;Overvågning af efterslæb
Hold øje med pg_replication_slots på udgiveren. En abonnent, der er gået i stå, holder WAL tilbage og får pladsen til at vokse, hvilket kan medføre, at disken løber tør for plads.
SELECT slot_name, active, pg_size_pretty(
pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn))
FROM pg_replication_slots;Dokumentér en driftsvejledning
Fordi konflikter kræver manuel vurdering, vedligeholder teams en driftsvejledning: hvordan konflikten identificeres, om data skal rettes eller ændringen springes over, og hvordan konsistensen efterfølgende verificeres.
Hurtig kontrol
En indkommende INSERT overtræder en entydighedsbegrænsning på abonnenten. Hvad er den sikreste løsning?
Opsummering
Du har lært, hvordan der opstår konflikter i logisk replikering, hvordan de findes via statistik og logge, og hvordan de løses ved at rette data, springe et LSN over eller bruge disable_on_error. Korrekt replikidentitet og et design med én skriver forebygger de fleste konflikter.
Lær Avanceret PostgreSQL: Indeksering, partitionering og replikering med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 11
- Lektioner
- 44
Ofte stillede spørgsmål
Er lektionen “Konfliktløsning i logisk replikering” gratis?
Ja — hele teksten til “Konfliktløsning i logisk replikering” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Avanceret PostgreSQL: Indeksering, partitionering og replikering-kurset, skal du opgradere til CoddyKit PRO. Avanceret PostgreSQL: Indeksering, partitionering og replikering-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Konfliktløsning i logisk replikering”?
Lær, hvordan konflikter opstår i logisk replikering, og hvilke strategier PostgreSQL tilbyder til at registrere og løse dem. Du øver dig i Avanceret PostgreSQL: Indeksering, partitionering og replikering med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Avanceret PostgreSQL: Indeksering, partitionering og replikering?
Der kræves ingen tidligere erfaring. Avanceret PostgreSQL: Indeksering, partitionering og replikering på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Konfliktløsning i logisk replikering”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Avanceret PostgreSQL: Indeksering, partitionering og replikering-lektion?
Ja. Alle Avanceret PostgreSQL: Indeksering, partitionering og replikering-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Grundlæggende om logisk replikering
- Konfiguration af publikationer
- Administration af abonnementer
- Konfliktløsning i logisk replikering