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 Download pg-cmd

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 versionDownload pg-cmd

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.


Posted

in

by