我尝试了上面的代码。我设法编译。但是,当我跑步时,它会给我错误:
String query ="\\COPY tmp from 'E:\\load.csv' delimiter ',';";
它显示我运行的查询错误:
System.out.println
查询的query string: \COPY tmp from 'E:\load.csv' delimiter ',';
为:
\COPY tmp from 'E:\load.csv' delimiter ',';
我在PostgresSQL客户端运行查询:Class.forName (driver);
conn = DriverManager.getConnection(host+dbname,user,password);
stmt = (java.sql.Statement) conn.createStatement();
//
PreparedStatement prepareUpdater = null;
conn.setAutoCommit(false);
String query ="\\COPY tmp from 'E:\\load.csv' delimiter ',';";
System.out.print("query string: "+query);
System.out.println("Query:"+query);
prepareUpdater = conn.prepareStatement(query);
prepareUpdater.executeUpdate();
prepareUpdater.close();
,它可以工作。
发生了什么事?
LEFT JOIN
答案 0 :(得分:1)
PostgreSQL COPY
语句存在于两个变异中 - 服务器端COPY
和psql
端\copy
。两个语句具有相同的语法和非常相似的行为。存在显着差异 - \copy
正在使用客户端文件系统。 COPY
正在使用服务器端文件系统。不应将psql
\copy
作为服务器端SQL命令调用。它直接来自psql
或某些bash
脚本。
服务器端COPY
用于大规模导出/导入操作。当它使用文件系统时,它只能由具有超级用户权限的用户使用。非特权用户必须使用stdin
,stdout
目标,但应用程序必须支持COPY API。
psql
支持它 - 所以你可以使用它将一些表从一个表复制到另一个表:
psql -c "COPY mytab TO stdout" db1 | psql -c "COPY targettab FROM stdin" db2
对于Java环境,您必须使用CopyManager之类的支持。见how to copy a data from file to PostgreSQL using JDBC?
导入COPY
语句可能明显快于INSERT
语句 - 但依赖于一些额外的开销 - 普通表上的差异很大,没有大量索引且没有慢速触发器。如果表上有很多索引或触发器较慢,那么COPY
的加速将是边际的。
答案 1 :(得分:0)
感谢您的反馈。
我设法使用CSVReader加载* .csv。
我下载了CSVReader包并将其包含在我的代码中。
工作正常。
CsvReader products = new CsvReader("/tmp/ip2location/IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE-USAGETYPE.CSV");
products.readHeaders();
while (products.readRecord())
{
String ip_from = products.get("ip_from"); //int
String ip_to = products.get("ip_to"); //int
PreparedStatement prepareStat = null;
String sqlIinsert = "insert into ip2location_tmp(ip_from, ip_to )"
+ " VALUES ("+ip_from+","+ip_to+");";
System.out.println("sqlInsert:"+sqlIinsert);
prepareStat = conn.prepareStatement(sqlIinsert);
prepareStat.executeUpdate();
}
products.close();
}enter code here
答案 2 :(得分:0)
您使用COPY
代替/COPY
String query =“COPY tmp from'E://load.csv'delimiter','”;
它会起作用
答案 3 :(得分:-2)