Oplossing Wanneer U Postgresql Bij Een Fout Moet Terugdraaien

In de afgelopen weken hebben sommige gebruikers een postgresql-terugdraaifout gesuggereerd.

Download de pc-reparatiesoftware waar iedereen het over heeft. Download hier.

Ik schrijf artikelen voor Script PostgreSQL en wanneer ik atomaire observatie nodig heb, zet ik het aanVoeg het toe aan je transactie.
Ik verwachtte dat het script er ongeveer zo uit zou zien:

postgresql terugdraaien bij fout

START-- 1) Sommigen doen nuttige dingen;-- 2) Elke fase van uitvoering die elke fout veroorzaakt.EEN UITZONDERING    ALS ANDEREN DAN        STANDAARDWAARDEN HERSTELLEN;EINDE; -- ook wel PRESTEREN;

In deze klacht waarschuwt pgAdmin me echter voor een dataformaatfout direct na het initialiseren van uw recent beschikbare BEGIN. Als ik de opdracht beëindig en ook een puntkomma toevoeg, zoals in het type van de volgende volgorde: begin; informeert me een foutvak naast succesvol UITZONDERING.
in plaats daarvanIk begrijp dat zelfs ik de syntaxis van de verwijdering van gebouwen en transacties gemakkelijk kan verwarren, maar ik vind meestal op geen enkele manier iets over het terugkeren naar het terugdraaien van een mislukte transactie met een document (noch op SO ergens anders). p>

Soms dacht ik dat zelfs de aankoop vaak wordt teruggedraaid in geval van mislukking, maar het lijkt niet het geval te zijn, simpelweg het volgende scenario:

ROLLBACK van transactie bij fout?

Ook als u een fout vindt in de bijtellingsverklaring, wordt de transactie teruggevouwen. Dus, beste vrienden, we gaan deze twee instrumenten gebruiken om de transactie voor eens en voor altijd te stoppen en om atomiciteit te bereiken.

START;-- 1) ga om echt te hof;-- 2) Voer de actie uit die op zijn beurt de fout veroorzaakt.PRESTEREN;

Bijgewerkt: Reimage

Deed uw computer het niet? Maak je geen zorgen, Reimage is er om je te helpen. Met slechts een paar klikken kan onze software uw systeem scannen op problemen en deze automatisch oplossen. Zodat u zo snel mogelijk weer aan het werk kunt. Laat je niet tegenhouden door een kleine storing - download Reimage vandaag nog!

  • Stap 1: Ga naar de Reimage-website en klik op de knop "Downloaden"
  • Stap 2: Volg de instructies op het scherm om Reimage te installeren
  • Stap 3: Open Reimage en klik op de knop "Nu scannen"

  • meldt me dit: ERROR: daadwerkelijke transactie wordt uitgevoerdBroken, normaal gesproken worden de commando's vergeten totdat je ziet, de transactie is voltooid Ook moet ik spontaan ROLLBACK ; voer de transactie uit.

    TU$$BEGINNEN-- 1) Sommige geven waardevolle aandelen;-- 2) Sommigen doen de handen per uur, waardoor er fouten worden gemaakt.EEN UITZONDERING    ALS ANDEREN DAN        STANDAARDWAARDEN HERSTELLEN;EINDE; $$

    Hoe stop ik een transactie in PostgreSQL?

    Achternaam. EINDE – Bevestig de start van een deel van de transactie.Overzicht. EINDE [WERK | TRANSACTIE]Beschrijving. END bevestigt de zichtrekening.Parameter. HET WERK.Opmerkingen. Gebruik ROLLBACK waarmee een bepaalde transactie kan worden afgebroken.Voorbeelden. Om de huidige transactie te voltooien en de wijzigingen permanent te maken: END;Compatibiliteit.Zie ook.

    pgAdmin geeft zoiets als: ERROR: Kan PL/pgSQL-transacties niet echt starten/beëindigen. HINT: Gebruik in plaats daarvan een definitief BEGIN-blok met een EXCEPTION-clausule. wat ik eindeloos verwarrend ben, dat is precies wat ik allemaal doormaak (denk ik).

    WIJZIGING NA ACCEPTATIE:Wat betreft de annotatie van Lorenz: “Uw SQL-script zal een grote COMMIT bevatten. Dit beëindigt het terugdraaien van de transactie.” is zeker de patronen die ik observeer. Overweeg het volgende voorbeeld (wat een specifiek soort goed voorbeeld is dat ik op dit moment in het origineel slechts een volledige aangepaste vraag heb gegeven):

    START;-- een eenvoudige tabel door middel van links naar zichzelf.MAAK een "dummy" TAFEL (    "Id" INT WORDT ALTIJD GEMAAKT ALS IDENTITEIT,    "ouder-ID" INT NULL,    LIMITCHEN "PK_Dummy" PRIMAIRE SLEUTEL ("ID"),    LIMIT "FK_Dummy_Dummy" BUITENLANDSE SLEUTEL ("ParentId") REF "Dummy" ("Id"));-- Schending van de ongebruikelijke sleutel beëindigt de transactie.INSERT IN "Lay-out" ("ParentId")WAARDEN (99);PRESTEREN;

    Als ik het here-script uitvoer, word ik begroet met: FOUT: het invoegen of bijwerken van tabel "Dummy" breekt de externe probleemsleutel "FK_Dummy_Dummy". Belangrijke uitleg: (ParentId)=(99) ontbreekt waarschijnlijk in elk van onze "Dummy".-tabel en dat is ook te verwachten.Maar als ik het daarna probeer, zal het helpen om te controleren of sommige dummy-tafels zijn gemaakt of omgekeerd, wat hieraan doet denken:

    SELECTEER BESTAAT (    SELECTEER UIT information_schema."tables"    WHERE "table_name" = "Ongeldig");

    Hoe kan ik een PostgreSQL-transactie terugdraaien?

    Om een ​​voorbereide transactie terug te draaien, moet u ofwel dezelfde eindgebruiker blijven die de transactie oorspronkelijk heeft uitgevoerd, ofwel een goede superuser zijn. Maar uw behoeften hoeven niet in dezelfde sessie te zijn als de transactie zou kunnen worden gedaan. Deze opdracht kan niet worden uitgevoerd binnen een munthandel. De scherpe transactie wordt onmiddellijk teruggedraaid.

    In plaats daarvan krijg ik dankzij een simpele false een van dezelfde fouten die ik al twee keer heb gegeven: FOUT: De lopende transactie wordt feitelijk afgebroken, opdrachten worden feitelijk genegeerd tot het einde van elk financieel transactieblok< /code >. Vervolgens moet ik het voorstel handmatig voltooien door ROLLBACK; op te geven.

    Dus het neemt me waar dat de hierboven genoemde kritiek soms verkeerd is, of in ieder geval doe ik iets heel verkeerd dat hier wordt erkend en ik interpreteer.

    In deze documentatie werd nog steeds verwezen naar een niet-ondersteunde versie van PostgreSQL.

    Kunnen we ROLLBACK na COMMIT in PostgreSQL?

    Nee, klanten kunnen de bestelling niet ongedaan maken, stoppen of ongedaan maken.

    Misschien wilt u dezelfde pagina bekijken met betrekking tot de voorwaarden van

    Rennen

    versie, of een die meer gerelateerd kan zijn aan de andere versterkte versies die hier worden vermeld.

    Transacties zijn een fundamenteel concepthet belangrijkste met databasesystemen. Het absoluut essentiële punt voor transactie a isdat het idee verschillende stappen combineert tot eenzame "alles of niets".Overeenkomst. Tussenliggende toestanden tussen perioden zijn waarschijnlijk nietzichtbaar voor andere onvoorziene transacties, zelfs wanneer er een fout optreedtgebeurt dat de voltooiing van elk van onze transacties verhindert, dan aarzel ik een van hende stappen zijn van invloed op het type database in alles.

    postgresql terugdraaien bij fout

    Stel je bijvoorbeeld een soort bankdatabase voor met balansenverschillende klantenrekeningen, in feite als een effectiever saldo van deposito's voorTakken. Laten we verkondigen dat we een betrouwbare betaling van $ 100 willen doen vanaf een creditcardrekening.Alice op de rekening van Bob. Schandalig vereenvoudigd, SQLCommando's die het kunnen vinden:

    UPDATENIE Account SET Saldo = Schuld - 100.00 WHERE Vermelding is gelijk aan 'Alice';UPDATE takken SET saldo saldo is gelijk aan - 100.00 WHERE identificeer = (SELECT branch_name FROM accounts WHERE name = 'Alice');UPDATE kredietrekening niveau SET saldo = + 100.00 WAAR de naam altijd "Bob" is geweest;UPDATE takken SET balans = intensiteit 100 + .00 WHERE naam = (SELECT branch_name FROM retourneert WHERE name = 'Bob');

    De punten van al deze commando's zijn hier onbelangrijk; inHet belangrijke punt is dat er nog verschillende afzonderlijke updates zijn gemaaktweer vrij eenvoudig te gebruiken. Onze kredietverstrekkersJe wilt toch zeker weten welke vaak al deze updates plaatsvinden?niets komt hen te boven. In het toernooi van een systeemstoring zal dit waarschijnlijk natuurlijk niet genoeg zijn.Omdat Bob $ 100 kreeg, bracht Alice geen kosten in rekening voor het idee.Ook Alice is meestal geen tevreden consument op de lange termijn als ze wordt gefactureerd.zonder betaling. We hebben een garantie nodig dat als er iets bijzonders gebeurt:methode is gedeeltelijk verkeerd, geen gerelateerd aan de stappengedaan, zoveel zal effect krijgen. Bewustzijn hergroeperen in éénDe prijs geeft ons een garantie. MAARtransactie noodzaak be fischer: frombekijk meerdere transacties, om te voltooienof gebeurt minder vaak meer dan ooit.

    Download de Reimage pc-reparatietool. Klik hier om het downloaden te starten.

    Posted on