Withdata Software

Upsert data from CSV to PostgreSQL table via command line on Windows

Want to upsert data from CSV file to existing PostgreSQL table via command line on Windows?

Using pg-cmd, a Command-Line client for PostgreSQL, you can upsert(merge) CSV/TSV/TXT data to PostgreSQL table easily and fast.

Support Windows, Linux, and MacOS.

Download pg-cmd Windows version
pg-cmd.windows-386.zip
pg-cmd.windows-amd64.zip

No need to install PostgreSQL client library.

Convenient to deploy to cloud. No need to run installation file, just uncompress and run, immediately.

Upsert/Merge CSV/TSV/TXT data into PostgreSQL table via command line on Windows

1. In interactive mode:

pg-cmd> load loadtype=upsert
      > updatekey=id
      > table=media_messages 
      > datafile=f:\media_messages.csv 
      > delimiter=, 
      > quote=" 
      > header=y;

2. In batch mode:

pg-cmd dsn="pan:withdata@192.168.0.102/test" task=load loadtype=upsert updatekey=id table=media_messages datafile=f:\media_messages.csv delimiter=, quote=" header=y quit=y

“loadtype=upsert” will update row in table if “updatekey” id exists, or insert new row.

See parameters detail.


More about pg-cmd – Command-Line client for PostgreSQL

Download pg-cmd Windows version
pg-cmd.windows-386.zip
pg-cmd.windows-amd64.zip

CSV → PostgreSQL reference

Type mapping

Value kindin CSVin PostgreSQL
Int1234integer
Bigint9007199254740993bigint
Decimal1234.56numeric(p,s)
Float1.234e+10double precision
Textquoted only when it contains a comma or a quotevarchar(n)
Long textmust be quoted; line breaks inside force multi-line recordstext
Date2026-09-18date
Datetime2026-09-18 14:30:00timestamp
Binarynot representable - base64 or hex stringbytea
BooleanTRUE / FALSE, or 1 / 0 depending on the writerboolean
JSONthe whole JSON value quoted, with internal quotes doubledjsonb

Dialect differences

CSV is a file format and PostgreSQL is a database server, so the target has to be told the types the file never carried - the rows below are where the two sides diverge.

Propertyin CSVin PostgreSQL
port—5432
identifiersDouble quotes; a literal quote is doubled ("" )"double quotes"
row limit—LIMIT n
datesConventional text: 2026-09-18 or 2026-09-18 14:30:00timestamp, timestamptz, date, time
long text—TEXT
binaryNot supportedBYTEA
separatorComma ","—
encodingNo declaration - UTF-8 works only with a BOM—
typingNone - every field is text—
shapeFlat table, optional header rowTables of rows and columns
ceilingNo formal limit; row count bounded by memory—

Command line

SideCommand
PostgreSQLpg_dump or COPY ... TO
PostgreSQL (load)COPY ... FROM

Convert your data online, free

Free in-browser converters for CSV, Excel, JSON, XML and SQL: Withdata Online Data Conversion. Large files, batch conversion or scheduling? See the offline desktop apps, or browse all data conversion tools.