PuppyIP Resource Center
Cloud Operations 4 min Published 2026-11-13

D1 virtual-table exports: sqlite3_cli_only cannot be reimported

Cloudflare D1’s new sqlite3_cli_only export includes FTS5 and R*Tree virtual tables, but the file cannot be imported back into D1. If your database uses full-text search or spatial indexes, first decide whether SQLite CLI or D1 will consume the dump, then choose the mode and plan an export window.

Cloudflare D1 virtual tables FTS5 R*Tree SQLite export

Service eligibility and regional restrictions

PuppyIP serves only compliant overseas businesses and their authorized personnel. Proxy services are not available in mainland China. The service may only be used for lawful business activities outside mainland China. Use of this service within mainland China is prohibited.

Hosting a proxy IP or server overseas does not change these restrictions. The service must not be provided to end users in mainland China through relaying, forwarding, sharing or resale. Before use, read the Terms of Service.

Key Takeaways

  • A Cloudflare update dated 2026-11-12 adds D1 exports that include virtual tables such as FTS5 and R*Tree through sqlite3_cli_only.
  • The default d1 dump is D1-importable. sqlite3_cli_only matches sqlite3 .dump output but cannot be imported back into D1.
  • Wrangler selects this format with --compatibility sqlite3_cli_only; Cloudflare has not stated a minimum required version.
  • The older import and export guide still says virtual-table export is unsupported, but its update date predates the new changelog and API details.

Virtual tables can now be included in an export

In a changelog entry dated November 12, 2026, Cloudflare says D1 exports can now include virtual tables, such as full-text search tables using SQLite’s FTS5 module and spatial indexes using R*Tree. The entry gives a calendar date but no publication time zone.

The change adds a specific dump format that includes these tables. It does not make every export file interchangeable between SQLite and D1. First decide which tool will consume the file and whether the SQL must ultimately be imported back into D1.

The two compatibility modes serve different destinations

The D1 Export API accepts d1 and sqlite3_cli_only for dump_options.compatibility. The default d1 format can be imported into D1. sqlite3_cli_only matches the output of sqlite3 .dump and includes virtual tables such as FTS5 and R*Tree.

Can a sqlite3_cli_only export be restored to D1? No. Cloudflare explicitly says that this output cannot be imported back into D1. The formats are not interchangeable when D1 is the import destination; the update recommends the standard export for databases without virtual tables.

A Wrangler example shows the export flags

To inspect SQL containing virtual tables locally or pass it to SQLite CLI, select --compatibility sqlite3_cli_only when exporting with Wrangler. Replace the example name example-d1 with your own authorized database name. This only illustrates the flags; the command was not run for this article:

npx wrangler d1 export example-d1 --remote --compatibility sqlite3_cli_only --output=./database.sql This writes an SQL file from the remote D1 database. It does not mean the file can be imported back into D1 or that an export has been verified. Cloudflare’s changelog does not state the minimum Wrangler version for this option, so check the installed version’s help or release notes before use.

API exports require continued polling

This D1 Export API flow uses POST and requires output_format to be polling. The first response returns at_bookmark; send that value as current_bookmark on subsequent polls. Keep polling while the task is in progress, because an export is automatically cancelled if polling stops.

When the status is complete, the response includes a signed_url that is available for one hour. Download the file within that window and manage it under your own access and retention rules. The API reference does not promise a fixed completion time, so avoid planning dependent work around an assumed duration.

Plan a window and check the older guide’s date

D1 blocks other database queries while an export runs. Assess whether the workload can tolerate that interruption, then choose an appropriate maintenance window. The official material gives no fixed duration and does not specify plan, country, price, or eligibility scope.

The Import and export data guide is marked last updated April 21, 2026, and still says virtual-table export is unsupported and suggests deleting and recreating those tables. That text predates the November 12 changelog. The current changelog and API describe virtual-table dumps with sqlite3_cli_only and also state that they cannot be imported back into D1. Do not follow the older deletion workaround. Check your target toolchain on an isolated copy first; no export, download, or restore was performed for this article, so it is not a test result.

Sources

Frequently Asked Questions

Does the downloaded file get deleted when its signed URL expires after an hour?

The API’s one-hour limit applies to the download URL. It does not say that files you have already downloaded will be deleted; you manage their local retention and access. The current documentation does not describe directly extending an expired link, so do not assume the original URL will become valid again.

What should a team record when handing over an export file?

Record the source database name, export time and time zone, compatibility mode, and the tool intended to consume the file. Clearly label sqlite3_cli_only output as unsuitable for importing back into D1 so another team member does not mistake it for a D1 restore file.