The most convenient batch data transfer tool. Inspired by dlt.
transferred moves table data between systems. Blazing fast, no transformations supported — hand them over to your Data Warehouse.
pip install transferredRequires Python 3.14.
from pathlib import Path
from transferred import FilesDestination, Parquet, PostgresSource, Transfer
source = PostgresSource(
"postgres://user:pass@localhost:5432/db",
table="public.orders",
)
destination = FilesDestination(
Path("orders/"),
format=Parquet(compression="zstd"),
)
report = Transfer(source, destination).run()
print(report)
# RunReport:
# rows: 10,000,000
# written: 243.24 MiB
# duration: 13s 700ms
# written objects:
# orders/part-00001.parquet10M rows of 22 diverse columns including jsonb and PostGIS geometry — peaking at 414 MiB RAM, interpreter included.
Look at docs/DLT_COMPARISON.md for more performance insights.
More in examples/.
Sources:
- Parquet file —
FilesSource - Postgres table —
PostgresSource - DataFrames — polars or pandas
DataFrame, a duckdb result, apa.Table, pyarrow'sRecordBatchorRecordBatchReader - Python iterables of
dict/@dataclass/pydantic.BaseModel(requirespip install transferred[iterable])
Destinations:
- Parquet file —
FilesDestination - Postgres table —
PostgresDestination(full replace, swapped in one transaction)
BigQuery, S3/GCS and incremental loads land later. See PLAN.md.
- Make data transfers as simple as it could be
- Enforce best practices by default
- Blazing fast
- No OOMs!
MIT. See LICENSE.
