SQL statements
D1 is compatible with most SQLite's SQL convention since it leverages SQLite's query engine. D1 supports a number of database-level statements that allow you to list tables, indexes, and inspect the schema for a given table or index.
You can execute any of these statements via the D1 console in the Cloudflare dashboard, wrangler d1 execute, or with the D1 Worker Bindings API.
D1 supports a subset of SQLite extensions for added functionality, including:
- Default SQLite extensions.
- FTS5 module โ for full-text search.
D1 supports some SQLite PRAGMA โ statements. The PRAGMA statement is an SQL extension for SQLite. PRAGMA commands can be used to:
- Modify the behavior of certain SQLite operations.
- Query the SQLite library for internal data about schemas or tables (but note that PRAGMA statements cannot query the contents of a table).
- Control environmental variables.
The PRAGMA statement examples on this page use the following SQL.
PRAGMA foreign_keys=off;DROP TABLE IF EXISTS "Employee";DROP TABLE IF EXISTS "Category";DROP TABLE IF EXISTS "Customer";DROP TABLE IF EXISTS "Shipper";DROP TABLE IF EXISTS "Supplier";DROP TABLE IF EXISTS "Order";DROP TABLE IF EXISTS "Product";DROP TABLE IF EXISTS "OrderDetail";DROP TABLE IF EXISTS "CustomerCustomerDemo";DROP TABLE IF EXISTS "CustomerDemographic";DROP TABLE IF EXISTS "Region";DROP TABLE IF EXISTS "Territory";DROP TABLE IF EXISTS "EmployeeTerritory";DROP VIEW IF EXISTS [ProductDetails_V];CREATE TABLE IF NOT EXISTS "Employee" ( "Id" INTEGER PRIMARY KEY, "LastName" VARCHAR(8000) NULL, "FirstName" VARCHAR(8000) NULL, "Title" VARCHAR(8000) NULL, "TitleOfCourtesy" VARCHAR(8000) NULL, "BirthDate" VARCHAR(8000) NULL, "HireDate" VARCHAR(8000) NULL, "Address" VARCHAR(8000) NULL, "City" VARCHAR(8000) NULL, "Region" VARCHAR(8000) NULL, "PostalCode" VARCHAR(8000) NULL, "Country" VARCHAR(8000) NULL, "HomePhone" VARCHAR(8000) NULL, "Extension" VARCHAR(8000) NULL, "Photo" BLOB NULL, "Notes" VARCHAR(8000) NULL, "ReportsTo" INTEGER NULL, "PhotoPath" VARCHAR(8000) NULL);CREATE TABLE IF NOT EXISTS "Category" ( "Id" INTEGER PRIMARY KEY, "CategoryName" VARCHAR(8000) NULL, "Description" VARCHAR(8000) NULL);CREATE TABLE IF NOT EXISTS "Customer" ( "Id" VARCHAR(8000) PRIMARY KEY, "CompanyName" VARCHAR(8000) NULL, "ContactName" VARCHAR(8000) NULL, "ContactTitle" VARCHAR(8000) NULL, "Address" VARCHAR(8000) NULL, "City" VARCHAR(8000) NULL, "Region" VARCHAR(8000) NULL, "PostalCode" VARCHAR(8000) NULL, "Country" VARCHAR(8000) NULL, "Phone" VARCHAR(8000) NULL, "Fax" VARCHAR(8000) NULL);CREATE TABLE IF NOT EXISTS "Shipper" ( "Id" INTEGER PRIMARY KEY, "CompanyName" VARCHAR(8000) NULL, "Phone" VARCHAR(8000) NULL);CREATE TABLE IF NOT EXISTS "Supplier" ( "Id" INTEGER PRIMARY KEY, "CompanyName" VARCHAR(8000) NULL, "ContactName" VARCHAR(8000) NULL, "ContactTitle" VARCHAR(8000) NULL, "Address" VARCHAR(8000) NULL, "City" VARCHAR(8000) NULL, "Region" VARCHAR(8000) NULL, "PostalCode" VARCHAR(8000) NULL, "Country" VARCHAR(8000) NULL, "Phone" VARCHAR(8000) NULL, "Fax" VARCHAR(8000) NULL, "HomePage" VARCHAR(8000) NULL);CREATE TABLE IF NOT EXISTS "Order" ( "Id" INTEGER PRIMARY KEY, "CustomerId" VARCHAR(8000) NULL, "EmployeeId" INTEGER NOT NULL, "OrderDate" VARCHAR(8000) NULL, "RequiredDate" VARCHAR(8000) NULL, "ShippedDate" VARCHAR(8000) NULL, "ShipVia" INTEGER NULL, "Freight" DECIMAL NOT NULL, "ShipName" VARCHAR(8000) NULL, "ShipAddress" VARCHAR(8000) NULL, "ShipCity" VARCHAR(8000) NULL, "ShipRegion" VARCHAR(8000) NULL, "ShipPostalCode" VARCHAR(8000) NULL, "ShipCountry" VARCHAR(8000) NULL);CREATE TABLE IF NOT EXISTS "Product" ( "Id" INTEGER PRIMARY KEY, "ProductName" VARCHAR(8000) NULL, "SupplierId" INTEGER NOT NULL, "CategoryId" INTEGER NOT NULL, "QuantityPerUnit" VARCHAR(8000) NULL, "UnitPrice" DECIMAL NOT NULL, "UnitsInStock" INTEGER NOT NULL, "UnitsOnOrder" INTEGER NOT NULL, "ReorderLevel" INTEGER NOT NULL, "Discontinued" INTEGER NOT NULL);CREATE TABLE IF NOT EXISTS "OrderDetail" ( "Id" VARCHAR(8000) PRIMARY KEY, "OrderId" INTEGER NOT NULL, "ProductId" INTEGER NOT NULL, "UnitPrice" DECIMAL NOT NULL, "Quantity" INTEGER NOT NULL, "Discount" DOUBLE NOT NULL);CREATE TABLE IF NOT EXISTS "CustomerCustomerDemo" ( "Id" VARCHAR(8000) PRIMARY KEY, "CustomerTypeId" VARCHAR(8000) NULL);CREATE TABLE IF NOT EXISTS "CustomerDemographic" ( "Id" VARCHAR(8000) PRIMARY KEY, "CustomerDesc" VARCHAR(8000) NULL);CREATE TABLE IF NOT EXISTS "Region" ( "Id" INTEGER PRIMARY KEY, "RegionDescription" VARCHAR(8000) NULL);CREATE TABLE IF NOT EXISTS "Territory" ( "Id" VARCHAR(8000) PRIMARY KEY, "TerritoryDescription" VARCHAR(8000) NULL, "RegionId" INTEGER NOT NULL);CREATE TABLE IF NOT EXISTS "EmployeeTerritory" ( "Id" VARCHAR(8000) PRIMARY KEY, "EmployeeId" INTEGER NOT NULL, "TerritoryId" VARCHAR(8000) NULL);CREATE VIEW [ProductDetails_V] as select p.*, c.CategoryName, c.Description as [CategoryDescription], s.CompanyName as [SupplierName], s.Region as [SupplierRegion] from [Product] p join [Category] c on p.CategoryId = c.id join [Supplier] s on s.id = p.SupplierId;Lists the tables and views in the database. This includes the system tables maintained by D1.
One row per each table. Each row contains:
Schema: the schema in which the table appears (for example,mainortemp)name: the name of the tabletype: the type of the object (one oftable,view,shadow,virtual)ncol: the number of columns in the table, including generated or hidden columnswr:1if the table is a WITHOUT ROWID table,0otherwisestrict:1if the table is a STRICT table,0otherwise
Example of PRAGMA table_list
PRAGMA table_listnpx wrangler d1 execute [DATABASE_NAME] --command='PRAGMA table_list'๐ Executing on remote database [DATABASE_NAME] (DATABASE_ID):๐ To execute on your local development database, remove the --remote flag from your wrangler command.๐ฃ Executed 1 commands in 0.5874msโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโฌโโโโโโโฌโโโโโฌโโโโโโโโโโ schema โ name โ type โ ncol โ wr โ strict โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโผโโโโโโโโโคโ main โ Territory โ table โ 3 โ 0 โ 0 โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโผโโโโโโโโโคโ main โ CustomerDemographic โ table โ 2 โ 0 โ 0 โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโผโโโโโโโโโคโ main โ OrderDetail โ table โ 6 โ 0 โ 0 โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโผโโโโโโโโโคโ main โ sqlite_schema โ table โ 5 โ 0 โ 0 โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโผโโโโโโโโโคโ main โ Region โ table โ 2 โ 0 โ 0 โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโผโโโโโโโโโคโ main โ _cf_KV โ table โ 2 โ 1 โ 0 โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโผโโโโโโโโโคโ main โ ProductDetails_V โ view โ 14 โ 0 โ 0 โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโผโโโโโโโโโคโ main โ EmployeeTerritory โ table โ 3 โ 0 โ 0 โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโผโโโโโโโโโคโ main โ Employee โ table โ 18 โ 0 โ 0 โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโผโโโโโโโโโคโ main โ Category โ table โ 3 โ 0 โ 0 โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโผโโโโโโโโโคโ main โ Customer โ table โ 11 โ 0 โ 0 โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโผโโโโโโโโโคโ main โ Shipper โ table โ 3 โ 0 โ 0 โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโผโโโโโโโโโคโ main โ Supplier โ table โ 12 โ 0 โ 0 โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโผโโโโโโโโโคโ main โ Order โ table โ 14 โ 0 โ 0 โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโผโโโโโโโโโคโ main โ CustomerCustomerDemo โ table โ 2 โ 0 โ 0 โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโผโโโโโโโโโคโ main โ Product โ table โ 10 โ 0 โ 0 โโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโผโโโโโโโโโคโ temp โ sqlite_temp_schema โ table โ 5 โ 0 โ 0 โโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโดโโโโโโโดโโโโโดโโโโโโโโโShows the schema (columns, types, null, default values) for the given TABLE_NAME.
One row for each column in the specified table. Each row contains:
cid: a row identifiername: the name of the columntype: the data type (if provided),''otherwisenotnull:1if the column can be NULL,0otherwisedflt_value: the default value of the columnpk:1if the column is a primary key,0otherwise
Example of PRAGMA table_info
PRAGMA table_infonpx wrangler d1 execute [DATABASE_NAME] --command='PRAGMA table_info("Order")'๐ Executing on remote database [DATABASE_NAME] (DATABASE_ID):๐ To execute on your local development database, remove the --remote flag from your wrangler command.๐ฃ Executed 1 commands in 0.8502msโโโโโโโฌโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโ cid โ name โ type โ notnull โ dflt_value โ pk โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโคโ 0 โ Id โ INTEGER โ 0 โ โ 1 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโคโ 1 โ CustomerId โ VARCHAR(8000) โ 0 โ โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโคโ 2 โ EmployeeId โ INTEGER โ 1 โ โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโคโ 3 โ OrderDate โ VARCHAR(8000) โ 0 โ โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโคโ 4 โ RequiredDate โ VARCHAR(8000) โ 0 โ โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโคโ 5 โ ShippedDate โ VARCHAR(8000) โ 0 โ โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโคโ 6 โ ShipVia โ INTEGER โ 0 โ โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโคโ 7 โ Freight โ DECIMAL โ 1 โ โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโคโ 8 โ ShipName โ VARCHAR(8000) โ 0 โ โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโคโ 9 โ ShipAddress โ VARCHAR(8000) โ 0 โ โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโคโ 10 โ ShipCity โ VARCHAR(8000) โ 0 โ โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโคโ 11 โ ShipRegion โ VARCHAR(8000) โ 0 โ โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโคโ 12 โ ShipPostalCode โ VARCHAR(8000) โ 0 โ โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโคโ 13 โ ShipCountry โ VARCHAR(8000) โ 0 โ โ 0 โโโโโโโโดโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโSimilar to PRAGMA table_info(TABLE_NAME) but also includes generated columns.
Example of PRAGMA table_xinfo
PRAGMA table_xinfonpx wrangler d1 execute [DATABASE_NAME] --command='PRAGMA table_xinfo("Order")'๐ Executing on remote database [DATABASE_NAME] (DATABASE_ID):๐ To execute on your local development database, remove the --remote flag from your wrangler command.๐ฃ Executed 1 commands in 0.3854msโโโโโโโฌโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโฌโโโโโโโโโโ cid โ name โ type โ notnull โ dflt_value โ pk โ hidden โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโผโโโโโโโโโคโ 0 โ Id โ INTEGER โ 0 โ โ 1 โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโผโโโโโโโโโคโ 1 โ CustomerId โ VARCHAR(8000) โ 0 โ โ 0 โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโผโโโโโโโโโคโ 2 โ EmployeeId โ INTEGER โ 1 โ โ 0 โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโผโโโโโโโโโคโ 3 โ OrderDate โ VARCHAR(8000) โ 0 โ โ 0 โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโผโโโโโโโโโคโ 4 โ RequiredDate โ VARCHAR(8000) โ 0 โ โ 0 โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโผโโโโโโโโโคโ 5 โ ShippedDate โ VARCHAR(8000) โ 0 โ โ 0 โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโผโโโโโโโโโคโ 6 โ ShipVia โ INTEGER โ 0 โ โ 0 โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโผโโโโโโโโโคโ 7 โ Freight โ DECIMAL โ 1 โ โ 0 โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโผโโโโโโโโโคโ 8 โ ShipName โ VARCHAR(8000) โ 0 โ โ 0 โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโผโโโโโโโโโคโ 9 โ ShipAddress โ VARCHAR(8000) โ 0 โ โ 0 โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโผโโโโโโโโโคโ 10 โ ShipCity โ VARCHAR(8000) โ 0 โ โ 0 โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโผโโโโโโโโโคโ 11 โ ShipRegion โ VARCHAR(8000) โ 0 โ โ 0 โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโผโโโโโโโโโคโ 12 โ ShipPostalCode โ VARCHAR(8000) โ 0 โ โ 0 โ 0 โโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโผโโโโโโโโโคโ 13 โ ShipCountry โ VARCHAR(8000) โ 0 โ โ 0 โ 0 โโโโโโโโดโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโดโโโโโโโโโShow the indexes for the given TABLE_NAME.
One row for each index associated with the specified table. Each row contains:
seq: a sequence number for internal trackingname: the name of the indexunique:1if the index is UNIQUE,0otherwiseorigin: the origin of the index (cif created byCREATE INDEXstatement,uif created by UNIQUE constraint,pkif created by a PRIMARY KEY constraint)partial:1if the index is a partial index,0otherwise
Example of PRAGMA index_list
PRAGMA index_listnpx wrangler d1 execute [DATABASE_NAME] --command='PRAGMA index_list("Territory")'๐ Executing on remote database d1-pragma-db (DATABASE_ID):๐ To execute on your local development database, remove the --remote flag from your wrangler command.๐ฃ Executed 1 commands in 0.2177msโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโโโโ seq โ name โ unique โ origin โ partial โโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโคโ 0 โ sqlite_autoindex_Territory_1 โ 1 โ pk โ 0 โโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโดโโโโโโโโโดโโโโโโโโโโShow the indexed column(s) for the given INDEX_NAME.
One row for each key column in the specified index. Each row contains:
seqno: the rank of the column within the indexcid: the rank of the column within the table being indexedname: the name of the column being indexed
Example of PRAGMA index_info
PRAGMA index_infonpx wrangler d1 execute [DATABASE_NAME] --command='PRAGMA index_info("sqlite_autoindex_Territory_1")'๐ Executing on remote database d1-pragma-db (DATABASE_ID):๐ To execute on your local development database, remove the --remote flag from your wrangler command.๐ฃ Executed 1 commands in 0.2523msโโโโโโโโโฌโโโโโโฌโโโโโโโโ seqno โ cid โ name โโโโโโโโโโผโโโโโโผโโโโโโโคโ 0 โ 0 โ Id โโโโโโโโโโดโโโโโโดโโโโโโโSimilar to PRAGMA index_info("TABLE_NAME") but also includes hidden columns.
Example of PRAGMA index_xinfo
PRAGMA index_xinfonpx wrangler d1 execute [DATABASE_NAME] --command='PRAGMA index_xinfo("sqlite_autoindex_Territory_1")'๐ Executing on remote database d1-pragma-db (DATABASE_ID):๐ To execute on your local development database, remove the --remote flag from your wrangler command.๐ฃ Executed 1 commands in 0.6034msโโโโโโโโโฌโโโโโโฌโโโโโโโฌโโโโโโโฌโโโโโโโโโฌโโโโโโโ seqno โ cid โ name โ desc โ coll โ key โโโโโโโโโโผโโโโโโผโโโโโโโผโโโโโโโผโโโโโโโโโผโโโโโโคโ 0 โ 0 โ Id โ 0 โ BINARY โ 1 โโโโโโโโโโผโโโโโโผโโโโโโโผโโโโโโโผโโโโโโโโโผโโโโโโคโ 1 โ -1 โ โ 0 โ BINARY โ 0 โโโโโโโโโโดโโโโโโดโโโโโโโดโโโโโโโดโโโโโโโโโดโโโโโโChecks the formatting and consistency of the table, including:
- Incorrectly formatted records
- Missing pages
- Sections of the database which are used multiple times, or are not used at all.
- If there are no errors: a single row with the value
OK - If there are errors: a string which describes the issues flagged by the check
Example of PRAGMA quick_check
PRAGMA quick_checknpx wrangler d1 execute [DATABASE_NAME] --command='PRAGMA quick_check'๐ Executing on remote database [DATABASE_NAME] (DATABASE_ID):๐ To execute on your local development database, remove the --remote flag from your wrangler command.๐ฃ Executed 1 commands in 1.4073msโโโโโโโโโโโโโโโโ quick_check โโโโโโโโโโโโโโโโคโ ok โโโโโโโโโโโโโโโโChecks for invalid references of foreign keys in the selected table.
Lists the foreign key constraints in the selected table.
Toggles case sensitivity for LIKE operators. When PRAGMA case_sensitive_like is set to:
ON: 'a' LIKE 'A' is falseOFF: 'a' LIKE 'A' is true (this is the default behavior of the LIKE operator)
Toggles the enforcement of CHECK constraints. When PRAGMA ignore_check_constraints is set to:
ON: check constraints are ignoredOFF: check constraints are enforced (this is the default behavior)
Toggles the ALTER TABLE RENAME command behavior before/after the legacy version of SQLite (3.24.0). When PRAGMA legacy_alter_table is set to:
ON: ALTER TABLE RENAME only rewrites the initial occurrence of the table name in its CREATE TABLE statement and any associated CREATE INDEX and CREATE TRIGGER statements. All other occurrences are unmodified.OFF: ALTER TABLE RENAME rewrites all references to the table name in the schema (this is the default behavior).
Toggles the recursive trigger capability. When PRAGMA recursive_triggers is set to:
ON: triggers which fire can activate other triggers (a single trigger can fire multiple times over the same row)OFF: triggers which fire cannot activate other triggers
Toggles the order of the results of a SELECT statement without an ORDER BY clause. When PRAGMA reverse_unordered_selects is set to:
ON: reverses the order of results of a SELECT statementOFF: returns the results of a SELECT statement in the usual order
Toggles the foreign key constraint enforcement. When PRAGMA foreign_keys is set to:
ON: stops operations which violate foreign key constraintsOFF: allows operations which violate foreign key constraints
Allows you to defer the enforcement of foreign key constraints until the end of the current transaction. This can be useful during database migrations, as schema changes may temporarily violate constraints depending on the order in which they are applied.
This does not disable foreign key enforcement outside of the current transaction. If you have not resolved outstanding foreign key violations at the end of your transaction, it will fail with a FOREIGN KEY constraint failed error.
Note that setting PRAGMA defer_foreign_keys = ON does not prevent ON DELETE CASCADE actions from being executed. While foreign key constraint checks are deferred until the end of a transaction, ON DELETE CASCADE operations will remain active, consistent with SQLite's behavior.
To defer foreign key enforcement, set PRAGMA defer_foreign_keys = on at the start of your transaction, or ahead of changes that would violate constraints:
-- Defer foreign key enforcement in this transaction.PRAGMA defer_foreign_keys = on
-- Run your CREATE TABLE or ALTER TABLE / COLUMN statementsALTER TABLE users ...
-- This is implicit if not set by the end of the transaction.PRAGMA defer_foreign_keys = offRefer to the foreign key documentation to learn more about how to work with foreign keys.
Attempts to optimize all schemas in a database by running the ANALYZE command for each table, if necessary. ANALYZE updates an internal table which contain statistics about tables and indices. These statistics helps the query planner to execute the input query more efficiently.
When PRAGMA optimize runs ANALYZE, it sets a limit to ensure the command does not take too long to execute. Alternatively, PRAGMA optimize may deem it unnecessary to run ANALYZE (for example, if the schema has not changed significantly). In this scenario, no optimizations are made.
We recommend running this command after making any changes to the schema (for example, after creating an index).
Refer to SQLite PRAGMA optimize documentation โ for more information on how PRAGMA optimize optimizes a database.
You can also query the sqlite_master table to show all tables, indexes, and the original SQL used to generate them:
SELECT name, sql FROM sqlite_master { "name": "users", "sql": "CREATE TABLE users ( user_id INTEGER PRIMARY KEY, email_address TEXT, created_at INTEGER, deleted INTEGER, settings TEXT)" }, { "name": "idx_ordered_users", "sql": "CREATE INDEX idx_ordered_users ON users(created_at DESC)" }, { "name": "Order", "sql": "CREATE TABLE \"Order\" ( \"Id\" INTEGER PRIMARY KEY, \"CustomerId\" VARCHAR(8000) NULL, \"EmployeeId\" INTEGER NOT NULL, \"OrderDate\" VARCHAR(8000) NULL, \"RequiredDate\" VARCHAR(8000) NULL, \"ShippedDate\" VARCHAR(8000) NULL, \"ShipVia\" INTEGER NULL, \"Freight\" DECIMAL NOT NULL, \"ShipName\" VARCHAR(8000) NULL, \"ShipAddress\" VARCHAR(8000) NULL, \"ShipCity\" VARCHAR(8000) NULL, \"ShipRegion\" VARCHAR(8000) NULL, \"ShipPostalCode\" VARCHAR(8000) NULL, \"ShipCountry\" VARCHAR(8000) NULL)" }, { "name": "Product", "sql": "CREATE TABLE \"Product\" ( \"Id\" INTEGER PRIMARY KEY, \"ProductName\" VARCHAR(8000) NULL, \"SupplierId\" INTEGER NOT NULL, \"CategoryId\" INTEGER NOT NULL, \"QuantityPerUnit\" VARCHAR(8000) NULL, \"UnitPrice\" DECIMAL NOT NULL, \"UnitsInStock\" INTEGER NOT NULL, \"UnitsOnOrder\" INTEGER NOT NULL, \"ReorderLevel\" INTEGER NOT NULL, \"Discontinued\" INTEGER NOT NULL)" }You can perform a search using SQL's LIKE operator:
const { results } = await env.DB.prepare( "SELECT * FROM Customers WHERE CompanyName LIKE ?",) .bind("%eve%") .all();console.log("results: ", results);results: [...]- Learn how to create indexes in D1.
- Use D1's JSON functions to query JSON data.
- Use
wrangler devto run your Worker and D1 locally and debug issues before deploying.
Was this helpful?
- Resources
- API
- New to Cloudflare?
- Products
- Sponsorships
- Open Source
- Support
- Help Center
- System Status
- Compliance
- GDPR
- Company
- cloudflare.com
- Our team
- Careers
- 2025 Cloudflare, Inc.
- Privacy Policy
- Terms of Use
- Report Security Issues
- Trademark