Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将sql查询的输出写入文件_Java_Postgresql_File Io_Postgresql Copy - Fatal编程技术网

Java 将sql查询的输出写入文件

Java 将sql查询的输出写入文件,java,postgresql,file-io,postgresql-copy,Java,Postgresql,File Io,Postgresql Copy,我有一个SQL查询: SELECT 'DROP TABLE ' || tablename FROM pg_catalog.pg_tables where tablename like 'r_395%'; 其输出是: ?column? -------------------- DROP TABLE r_395_0 DROP TABLE r_395_1 DROP TABLE r_395_2 DROP TABLE r_395_3 DROP TABLE r_395_4 DR

我有一个SQL查询:

SELECT 'DROP TABLE ' || tablename
  FROM pg_catalog.pg_tables where tablename like 'r_395%';
其输出是:

?column?      
--------------------
 DROP TABLE r_395_0
 DROP TABLE r_395_1
 DROP TABLE r_395_2
 DROP TABLE r_395_3
 DROP TABLE r_395_4
 DROP TABLE r_395_5
 DROP TABLE r_395_6
 DROP TABLE r_395_7
 DROP TABLE r_395_8
 DROP TABLE r_395_9
(10 rows)
我正在使用实体管理器执行此查询:

StringBuffer query = new StringBuffer();

query.append("SELECT 'DROP TABLE ' || tablename
                FROM pg_catalog.pg_tables where tablename like 'r_395%'");            
entityManager.createNativeQuery(query.toString()).executeUpdate();

我想把这个输出写入一个文件。如果它只是一个文本文件,我会使用filewriter和缓冲writer。但现在它是一个SQL生成的文件,我有点困惑。有没有一种方法可以在Java中实现这一点?

如果您想在本地(在数据库的机器上)编写文件,对于这样的情况,还有一种非常快速和简单的方法:

COPY $$SELECT 'DROP TABLE ' || tablename
         FROM pg_catalog.pg_tables
        WHERE tablename ~~ 'r_395%'$$ TO /path/to/myfile;

我在这里使用,以避免转义单引号。

如果您想在本地(在数据库的机器上)写入文件,对于这样的情况,也有非常快速和简单的方法:

COPY $$SELECT 'DROP TABLE ' || tablename
         FROM pg_catalog.pg_tables
        WHERE tablename ~~ 'r_395%'$$ TO /path/to/myfile;

我在这里使用,以避免转义单引号。

使用SQL COPY的一个非常类似的解决方案(参见Erwin Brandstetter的答案)是使用
\COPY
。这里的区别在于,您不需要对数据库框进行本地访问。SQL COPY的输出只能写入数据库框中系统用户postgres具有写入权限的位置。使用psql\copy,您可以将输出写入客户端上的某个位置

使用psql连接到数据库并执行命令

psql -h host -p port -U user database
\copy (SELECT 'DROP TABLE ' || tablename FROM pg_catalog.pg_tables WHERE tablename ~~ 'r_395%') to '/path/to/myfile'
或者使用-c参数直接将命令传递给psql:

psql -h host -p port -U user -c "\copy (SELECT 'DROP TABLE ' || tablename FROM pg_catalog.pg_tables WHERE tablename ~~ 'r_395%') to '/path/to/myfile'" database

HTH

使用SQL COPY的一个非常类似的解决方案(参见Erwin Brandstetter的答案)是使用
\COPY
。这里的区别在于,您不需要对数据库框进行本地访问。SQL COPY的输出只能写入数据库框中系统用户postgres具有写入权限的位置。使用psql\copy,您可以将输出写入客户端上的某个位置

使用psql连接到数据库并执行命令

psql -h host -p port -U user database
\copy (SELECT 'DROP TABLE ' || tablename FROM pg_catalog.pg_tables WHERE tablename ~~ 'r_395%') to '/path/to/myfile'
或者使用-c参数直接将命令传递给psql:

psql -h host -p port -U user -c "\copy (SELECT 'DROP TABLE ' || tablename FROM pg_catalog.pg_tables WHERE tablename ~~ 'r_395%') to '/path/to/myfile'" database

HTH

数据来源并不重要。听起来输出文件确实是一个文本文件。是的,特洛伊敌人是对的。您只需将数据写入文本文件,数据的来源并不重要。听起来输出文件确实是一个文本文件。是的,特洛伊敌人是对的。您只需将数据写入文本文件。您还可以使用\o从psql设置输出文件,非常简单。您还可以使用\o从psql设置输出文件,非常简单。