PocketBase data import tools for CSV and JSON files made using PocketBase JS SDK.
Automatically creates typed PocketBase collection and populates it with data.
Columns conflicting with PocketBase's autogenerated system fields (id
,
created
, updated
; case-insensitive check, target column name's case is not
affected) are prefixed with _
. Collection conflict will cause the import to
fail without any changes to the database.
No rules, options or constraints are set for the new collection (see the import log for a full structure). You can modify them after the import from PocketBase's dashboard.
pocketbase-import
detects types using regular expressions. Currently supported
PocketBase types are:
Bool
Number
Plain text
Email
DateTime
JSON
Url
Install the latest Deno runtime to run the scripts.
In the root directory create .env
file with the following environment
variables:
ADMIN_EMAIL
(required) - superadmin emailADMIN_PASSWORD
(required) - superadmin passwordPOCKETBASE_URL
(optional) - PocketBase app URL, defaults to local instance
Place your import files inside of input
directory.
Make sure the target PocketBase instance is running and pointed to by
POCKETBASE_URL
.
For versions >=0.23.2
, enable and configure batch API access - go to Settings > Application in PocketBase dashboard (see below). Adjust the parameters to your performance requirements or use the defaults for small/middle-sized datasets.
You can change the default import options to your needs:
Name | Files | Required | Description | Example use |
---|---|---|---|---|
input | CSV/JSON | Yes | The name of the input file (with extension) | --input=example.csv |
id | CSV/JSON | No | Indicates that _id column should be typed as plain text, the type is detected by default |
--id |
max_batch | CSV/JSON | No | Max batch request size in rows, should not exceed PocketBase's Max allowed batch requests . Defaults to 50. |
--max_batch=100 |
lf | CSV | No | LF (\n ) EOL character will be used instead of default CRLF (\r\n ) |
--lf |
delimiter | CSV | No | Column value separator, defaults to , |
--delimiter=";" |
quote | CSV | No | Value quote character, defaults to ' |
--quote="~" |
The import is not multiline-safe, so if you have a file with strings spanning across multiple lines the best option for you is to convert the input file to JSON with tools like DB Browser for SQLite.
Basic import (root directory):
deno run csv.ts --input=example.csv
Import without permission prompts and with max batch request size of 1 row:
deno run --allow-read --allow-env --allow-net csv.ts --input=example.csv --max_batch=1
Import without permission prompts and with _id
column as text:
deno run --allow-read --allow-env --allow-net csv.ts --input=example.csv --id
Import with custom parser options (you need to adjust example.csv
):
deno run csv.ts --input=example.csv --delimiter=";" --quote="~" --lf
The required data format is an array of row objects.
Basic import (root directory):
deno run json.ts --input=example.json
Import without permission prompts and with max batch request size of 1 row:
deno run --allow-read --allow-env --allow-net json.ts --input=example.json --max_batch=1
Import without permission prompts and with _id
column as text:
deno run --allow-read --allow-env --allow-net json.ts --input=example.json --id