java - PostgreSQL -\复制命令

标签 java postgresql csv

我试过上面的代码。我设法编译。但是,当我运行时,它给我错误:

Exception in thread "main" org.postgresql.util.PSQLException: ERROR: syntax error at or near "\"
Position: 1

它表明我运行的查询是错误的:

字符串查询 ="\\COPY tmp from 'E:\\load.csv' delimiter ',';";

查询的 System.out.println 是: 查询字符串:\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();

最佳答案

PostgreSQL COPY 语句存在于两个变异中——服务器端 COPYpsql\copy。这两个语句具有相同的语法和非常相似的行为。存在显着差异 - \copy 使用客户端文件系统。 COPY 正在使用服务器端文件系统。 psql \copy 不应作为服务器端 SQL 命令调用。它直接从 psql 或一些 bash 脚本中使用。

服务器端 COPY 用于大量导出/导入操作。当它与文件系统一起工作时,它只能由具有 super 用户权限的用户使用。非特权用户必须使用stdinstdout 目标,但应用程序必须支持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 的加速将是微不足道的。

关于java - PostgreSQL -\复制命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30472170/

相关文章:

java - 如何通过 Apache POI API 使用 java 获取幻灯片编号

java - 如何在java中调整sin(x)图形坐标以仅填充窗口的一部分

postgresql - 创建物化 View 时如何指示列不可为空?

python - 无法使用 psycopg2 连接到远程 postgreSQL

python - 如何通过拆分为列将列表另存为 csv

java - 我可以将对象用作java中方法的变量吗?

java - Spring:具有多个值的@RequestMapping

python - Docker:使用容器名称从一个容器连接到另一个容器时,如何修复 "could not translate host name "postgres“到地址”?

python - 如何查看read_csv的进度条

java - 我找不到导致异常的原因