PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Modo corretto per usare copy Postgres jdbc

Questo funziona per me:

try (Connection conn = DriverManager.getConnection(connUrl, myUid, myPwd)) {
    long rowsInserted = new CopyManager((BaseConnection) conn)
            .copyIn(
                "COPY table1 FROM STDIN (FORMAT csv, HEADER)", 
                new BufferedReader(new FileReader("C:/Users/gord/Desktop/testdata.csv"))
                );
    System.out.printf("%d row(s) inserted%n", rowsInserted);
}

Utilizzo di copyIn(String sql, Reader from) ha il vantaggio di evitare problemi in cui il processo del server PostgreSQL non è in grado di leggere il file direttamente, sia perché non dispone di autorizzazioni (come leggere i file sul mio desktop) sia perché il file non è locale sulla macchina su cui è in esecuzione il server PostgreSQL.