Quick start guide
This guide takes you from zero to a first export: every table of a PostgreSQL schema written as Parquet files to a local directory. Once it works, the next steps show how to target cloud storage or publish to a data platform.
1. Install LakeXpress
Download the LakeXpress archive for your platform and unzip it. The trial archive bundles the FastBCP engine; with the full edition, FastBCP is installed separately. See the Installation guide for details.
2. Prepare the databases
LakeXpress connects to two databases: the source database you export from, and the LakeXpress DB, where it stores its configuration and sync history.
Source database: a read-only user
Create a user with SELECT privileges on the schema you want to export:
CREATE USER lakexpress_reader WITH PASSWORD 'your_password';
GRANT USAGE ON SCHEMA public TO lakexpress_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO lakexpress_reader;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO lakexpress_reader;
For other source databases, see Database Connections.
LakeXpress DB: an empty database
Create an empty database and a user that owns it. LakeXpress creates its own tables inside it.
CREATE USER lakexpress_admin WITH PASSWORD 'your_password';
CREATE DATABASE lakexpress_log OWNER lakexpress_admin;
SQLite or DuckDB can also be used as the LakeXpress DB. They need no server: point to a file path in the credentials file. For these and the other backends (SQL Server, MySQL), see Set up the LakeXpress DB.
3. Create the credentials file
All connections are described in one JSON file. Save this as credentials.json:
{
"lxdb_postgres": {
"ds_type": "postgres",
"auth_mode": "classic",
"info": {
"username": "$env{LX_LXDB_USER}",
"password": "$env{LX_LXDB_PASSWORD}",
"server": "localhost",
"port": 5432,
"database": "lakexpress_log"
}
},
"source_postgres": {
"ds_type": "postgres",
"auth_mode": "classic",
"info": {
"username": "$env{LX_PG_USER}",
"password": "$env{LX_PG_PASSWORD}",
"server": "localhost",
"port": 5432,
"database": "production_db"
}
}
}
The top-level keys (lxdb_postgres, source_postgres) are the IDs you pass to the commands below.
$env{VAR_NAME} reads a value from an environment variable (an error is raised if it is not set). Plain-text values also work. Set the variables before running LakeXpress:
- Windows (PowerShell)
- Linux
$env:LX_LXDB_USER = "lakexpress_admin"
$env:LX_LXDB_PASSWORD = "your_password"
$env:LX_PG_USER = "lakexpress_reader"
$env:LX_PG_PASSWORD = "your_password"
export LX_LXDB_USER="lakexpress_admin"
export LX_LXDB_PASSWORD="your_password"
export LX_PG_USER="lakexpress_reader"
export LX_PG_PASSWORD="your_password"
4. Initialize the LakeXpress DB
Create the LakeXpress tables and check that the connection works:
- Windows (PowerShell)
- Linux
.\LakeXpress.exe lxdb init `
-a credentials.json `
--lxdb_auth_id lxdb_postgres
./LakeXpress lxdb init \
-a credentials.json \
--lxdb_auth_id lxdb_postgres
This step is optional -- the first sync creates the tables if needed -- but it catches connection problems early.
5. Create a sync configuration
A sync configuration says what to export and where. It is stored in the LakeXpress DB and reused by every sync.
- Windows (PowerShell)
- Linux
.\LakeXpress.exe config create `
-a credentials.json `
--lxdb_auth_id lxdb_postgres `
--source_db_auth_id source_postgres `
--source_schema_name public `
--output_dir .\exports `
--n_jobs 4 `
--fastbcp_p 2
./LakeXpress config create \
-a credentials.json \
--lxdb_auth_id lxdb_postgres \
--source_db_auth_id source_postgres \
--source_schema_name public \
--output_dir ./exports \
--n_jobs 4 \
--fastbcp_p 2
This exports every table of the public schema of production_db (the database named in source_postgres), 4 tables in parallel, each split into 2 partitions. The relative path ./exports is resolved against the current directory and saved as an absolute path, so later syncs write to the same place wherever they are run from (LakeXpress 0.4.9 or later; with earlier versions, pass an absolute path). The exports directory is created if it does not exist, and the FastBCP engine bundled in the trial archive (engine/) is found automatically. With the full edition, or if FastBCP is installed elsewhere, add --fastbcp_dir_path <folder containing FastBCP>.
The command ends by printing a sync_id and the exact sync command to run next.
6. Run the sync
- Windows (PowerShell)
- Linux
.\LakeXpress.exe sync `
-a credentials.json `
--lxdb_auth_id lxdb_postgres `
--sync_id <SYNC_ID>
./LakeXpress sync \
-a credentials.json \
--lxdb_auth_id lxdb_postgres \
--sync_id <SYNC_ID>
Replace <SYNC_ID> with the sync_id printed by config create. LakeXpress shows progress as tables are exported.
7. Check the result
Each table is written as Parquet files under exports/public/<table_name>/, in the directory where you ran config create. To see the status of the run:
- Windows (PowerShell)
- Linux
.\LakeXpress.exe status `
-a credentials.json `
--lxdb_auth_id lxdb_postgres `
--sync_id <SYNC_ID>
./LakeXpress status \
-a credentials.json \
--lxdb_auth_id lxdb_postgres \
--sync_id <SYNC_ID>
To export again later, run the same sync command: the configuration is reused.
Next steps
- Export to cloud storage (S3, Azure, GCS, OneLake): Intermediate Storage
- Publish to a data platform (Snowflake, Databricks, BigQuery...): see the Target Platform pages, starting with Snowflake
- Export only new rows on each sync: Incremental Sync
- Ready-to-use commands for filtering tables, resuming failed runs and more: Examples & Recipes
- Every command and option: CLI Reference