How to convert a CSV file to PostgreSQL
Getting a CSV into PostgreSQL usually comes down to two approaches: bulk-loading the raw file with COPY, or running a SQL script of CREATE TABLE and INSERT statements. SQLified does the second — it reads your CSV in the browser and writes a clean, ready-to-run Postgres script. No database access, drivers, or command line required to build the SQL; you just run it wherever your database lives.
- Drop your CSV onto the converter above (or click to choose a file).
- Review the schema. SQLified samples your data and infers a PostgreSQL type for each column. Adjust any type, mark columns nullable, rename them, or set a primary key.
- Generate the SQL — a
CREATE TABLEplus batchedINSERTstatements. - Run it in Postgres — paste it into
psql, pgAdmin, DBeaver, or your Supabase / Neon / RDS console.
What the generated SQL looks like
A small CSV with id, name, signup_date, amount becomes:
CREATE TABLE IF NOT EXISTS "users" (
"id" INTEGER NOT NULL,
"name" TEXT NOT NULL,
"signup_date" DATE NOT NULL,
"amount" NUMERIC(18,2) NOT NULL
);
INSERT INTO "users" ("id", "name", "signup_date", "amount") VALUES
('1', 'Ada Lovelace', '2026-01-04', '120.50'),
('2', 'Alan Turing', '2026-02-11', '99.00');Identifiers are double-quoted (the PostgreSQL standard), so mixed-case and reserved-word column names just work. CREATE TABLE IF NOT EXISTS means you can re-run the script safely.
PostgreSQL type inference
SQLified looks at the actual values in each column and maps them to the right Postgres type:
- Whole numbers →
INTEGER, orBIGINTwhen they exceed the 32-bit range. - Decimals →
NUMERIC(18, n)sized to your data's precision. - Dates and timestamps →
DATEorTIMESTAMP. true/false→BOOLEAN.- Everything else →
TEXT.
Not happy with a guess? Override any column's type before you generate — useful for IDs you want as text, or numeric codes that shouldn't lose leading zeros.
COPY vs. INSERT — which should you use?
COPY (or \copy in psql) is the fastest way to bulk-load when you have direct file access to the database host. But on managed Postgres — Supabase, Neon, RDS — loading a local file with COPY is often clunky or blocked.
INSERT statements are portable: paste them into any SQL console and they run. That's what SQLified generates, and for very large files it splits the inserts into 1,000-row batches so they import reliably instead of failing as one oversized statement. For a few thousand to a few million rows loaded into a managed database, generated INSERTs are usually the path of least resistance.
Frequently asked questions
Does SQLified upload my CSV file?
No. The entire conversion runs locally in your browser — your file is read into memory, turned into SQL, and never sent to a server or stored anywhere.
Which PostgreSQL versions does the output work with?
All modern PostgreSQL versions, plus managed Postgres like Supabase, Neon, Amazon RDS/Aurora, and Google Cloud SQL. The generated CREATE TABLE + INSERT statements are standard SQL.
Can it handle large CSV files?
Yes — SQLified handles files with millions of rows, and the INSERT output is automatically split into batches (1,000 rows per statement) so even huge files import cleanly without hitting size limits.
Should I use COPY or INSERT statements?
COPY (or \copy in psql) is fastest when you have direct file access to the database host. INSERT statements — what SQLified generates — are portable: you can paste and run them in any SQL console, which is ideal for managed databases where loading a local file with COPY is awkward.
Can I set column types and a primary key?
Yes. SQLified infers Postgres types from your data, but you can override any column's type, rename it, mark it nullable, or set a primary key before you generate the script.