sql >> Database >  >> RDS >> PostgreSQL

Hoe kan ik ervoor zorgen dat het kopieercommando zijn run in roodverschuiving voortzet, zelfs nadat de lambda-functie die het heeft gestart een time-out heeft gehad?

De AWS-documentatie is niet expliciet over wat er gebeurt als er een time-out optreedt. Maar ik denk dat het veilig is om te zeggen dat het overgaat in de "Shutdown"-fase, waarna de runtime-container met geweld wordt beëindigd door de omgeving.

Dit betekent dat de socketverbinding die door de databaseverbinding wordt gebruikt, wordt gesloten en dat het Redshift-proces dat naar die socket luistert, een end-of-file ontvangt - een client-verbinding. Het normale gedrag van elke database in deze situatie is om openstaande vragen te beëindigen en hun transacties terug te draaien.

De reden dat ik die beschrijving gaf, is om je te laten weten dat je niet kunt de levensduur van een query verlengen tot voorbij de levensduur van de Lambda die die query initieert. Als je een databaseverbindingsbibliotheek wilt blijven gebruiken, moet je een service gebruiken die geen time-out heeft:AWS Batch of ECS zijn twee opties.

Maar er is een betere optie:de Redshift Data API , dat wordt ondersteund door Boto3 .

Deze API werkt asynchroon:u dient een query in bij Redshift en krijgt een token dat kan worden gebruikt om de werking van de query te controleren. Je kunt Redshift ook instrueren om een ​​bericht naar AWS Eventbridge te sturen wanneer de query is voltooid/mislukt (zodat je een andere Lambda kunt maken om de juiste actie te ondernemen).



  1. Retourrijen die numerieke waarden bevatten in Oracle

  2. Hoe krijg ik lokale gegevens in een alleen-lezen database met dplyr?

  3. mysqldb op python 2.6+ (win32)

  4. Mysql count vs mysql SELECT, welke is sneller?