INTEGRITY Dokumentace

Ladění D1

D1 umožňuje zachytávat výjimky a zaznamenávat chyby vrácené při dotazování databáze. K ladění D1 použijete stejné nástroje, jaké máte k dispozici při ladění Workers.

D1 stmt. a db. metody vyvolají Objekt chyby kdykoli dojde k chybě. Pro zachycení výjimek zaznamenejte e.message hodnota.

Následující příklad obsahuje dotaz s neplatným klíčovým slovem: INSERTZ místo INSERT:

try {
    // This is an intentional misspelling
    await db.exec("INSERTZ INTO my_table (name, employees) VALUES ()");
} catch (e: any) {
    console.error({
        message: e.message
    });
}

Výše uvedený kód vyvolá následující chybovou zprávu:

{
	"message": "D1_EXEC_ERROR: Error in line 1: INSERTZ INTO my_table (name, employees) VALUES (): sql error: near \"INSERTZ\": syntax error in INSERTZ INTO my_table (name, employees) VALUES () at offset 0"
}

Seznam chyb

D1 kromě rozšířené (podrobné) chybové zprávy vrací tyto chybové konstanty:

Chybová zpráva Popis Doporučená akce
D1_ERROR Prefix konkrétní chyby D1. Podrobnosti ke konkrétní chybě najdete níže v části „Seznam D1_ERRORs“.
D1_EXEC_ERROR Chyba provádění na řádku x: chyba y.
D1_TYPE_ERROR Vrací se, pokud dojde k neshodě typu mezi sloupcem a hodnotou. Častou příčinou je zadání undefined proměnnou (nepodporovanou) místo null. Ujistěte se, že typ hodnoty odpovídá typu sloupce.
D1_COLUMN_NOTFOUND Sloupec nebyl nalezen. Ujistěte se, že jste vybrali sloupec, který v databázi existuje.

Následující tabulka uvádí konkrétní instance D1_ERROR.

Seznam chyb D1_ERROR

D1_ERROR typ Popis Doporučená akce
No SQL statements detected. Vstupní dotaz neobsahuje žádné příkazy SQL. Akce aplikace: Ujistěte se, že dotaz obsahuje alespoň jeden platný SQL příkaz.
Your account has exceeded D1's maximum account storage limit, please contact Cloudflare to raise your limit Celkové úložiště napříč všemi databázemi D1 v účtu překročilo limit úložiště účtu. Akce aplikace: Odstraňte nepoužívané databáze, nebo přejděte na placený plán.
Exceeded maximum DB size. Databáze D1 překročila svůj limit úložiště. Akce aplikace: Odstraňte řádky dat z databáze, nebo svá data rozdělte (shardujte) do více databází.
Your account has exceeded D1's free tier daily row read limit. Upgrade to a paid plan or wait until tomorrow (midnight UTC) to continue. See https://developers.cloudflare.com/d1/platform/limits/ for more details. Váš účet dosáhl denního limitu na počet přečtených řádků v rámci plánu D1 Free. Akce aplikace: Počkejte do půlnoci UTC, kdy se limit resetuje, nebo přejděte na placený plán. Další informace najdete v Limity.
Your account has exceeded D1's free tier daily row write limit. Upgrade to a paid plan or wait until tomorrow (midnight UTC) to continue. See https://developers.cloudflare.com/d1/platform/limits/ for more details. Váš účet dosáhl denního limitu na počet zapsaných řádků v rámci plánu D1 Free. Akce aplikace: Počkejte do půlnoci UTC, kdy se limit resetuje, nebo přejděte na placený plán. Další informace najdete v Limity.
D1 DB reset because its code was updated. Cloudflare aktualizoval kód D1 (nebo příslušného Durable Object) a Durable Object obsahující databázi D1 se restartuje. Opakujte operaci.
Internal error while starting up D1 DB storage caused object to be reset. Durable Object obsahující databázi D1 se nedaří spustit. Opakujte operaci.
Network connection lost. Chyba sítě. Opakujte operaci. Viz poznámka „Opakování operace“ výše.
Replica disconnected from primary. Chyba sítě mezi replikou pro čtení a její primární instancí. Opakujte operaci. Viz poznámka „Opakování operace“ výše.
Internal error in D1 DB storage caused object to be reset. Chyba způsobila restart databáze D1. Opakujte operaci.
Cannot resolve D1 DB due to transient issue on remote node. Dotaz se nemůže dostat k Durable Object obsahujícímu databázi D1. Opakujte operaci. Viz poznámka „Opakování operace“ výše.
Can't read from request stream because client disconnected. Byl proveden požadavek na dotaz (např. nahrání SQL dotazu), ale spojení se uzavřelo dříve, než byl dotaz zcela vykonán. Akce aplikace: Zopakujte operaci a ujistěte se, že spojení zůstává otevřené.
D1 DB storage operation exceeded timeout which caused object to be reset. Dotaz se pokouší zapsat velké množství dat (např. v řádu GB) a trvá příliš dlouho. Akce aplikace: Optimalizujte dotazy (aby každý dotaz trval kratší dobu), snižte počet požadavků rozložením zátěže v čase, nebo dotazy rozdělte na shardy.
D1 DB is overloaded. Requests queued for too long. Požadavky na databázi D1 čekají ve frontě příliš dlouho, buď proto, že je příliš mnoho požadavků, nebo protože zpracování požadavků ve frontě trvá příliš dlouho. Akce aplikace: Optimalizujte dotazy (aby každý dotaz trval kratší dobu), snižte počet požadavků rozložením zátěže v čase, nebo dotazy rozdělte na shardy.
D1 DB is overloaded. Too many requests queued. Fronta požadavků do databáze D1 je příliš dlouhá, buď proto, že je příliš mnoho požadavků, nebo protože zpracování požadavků ve frontě trvá příliš dlouho. Akce aplikace: Optimalizujte dotazy (aby každý dotaz trval kratší dobu), snižte počet požadavků rozložením zátěže v čase, nebo dotazy rozdělte na shardy.
D1 DB's isolate exceeded its memory limit and was reset. Dotaz načetl do paměti příliš mnoho dat, což způsobilo pád databáze D1. Akce aplikace: Optimalizujte dotazy (aby každý dotaz trval kratší dobu), snižte počet požadavků rozložením zátěže v čase, nebo dotazy rozdělte na shardy.
D1 DB exceeded its CPU time limit and was reset. Dotaz zabírá velké množství CPU času (např. prochází tabulku větší než 9 GB nebo se pokouší o rozsáhlý import/export). Akce aplikace: Rozdělte dotaz na menší shardy.

Automatická opakování

D1 rozpoznává dotazy pouze pro čtení a v případě chyb, které lze opakováním odstranit, se je automaticky pokusí až dvakrát zopakovat.

D1 zajišťuje, že žádný pokus o opakování nezpůsobí zápis do databáze, takže jsou automatická opakování bezpečná i před vedlejšími účinky, i kdyby detekcí dotazů pouze pro čtení proklouzl dotaz způsobující úpravy. D1 toho dosahuje kontrolou změn po každém provedení dotazu, a pokud při pokusu o opakování dojde k zápisu, dotaz se vrátí zpět.

Zobrazit protokoly

Zobrazte proud živých protokolů z vašeho Workeru pomocí wrangler tail nebo prostřednictvím Cloudflare dashboard.

Nahlásit problémy

Do jakéhokoli hlášení chyby byste měli zahrnout co nejvíce z následujícího: