从数据库生成Postgres SQL脚本的Java库

从数据库生成Postgres SQL脚本的Java库,java,api,postgresql,Java,Api,Postgresql,大家好 直截了当。 是否有任何java库可以从DB生成Postgres SQL脚本 例如,我有一个表job\u table name | job Andy | pull Benny | push 然后,我想得到如下的字符串sql脚本 String sqlInsert = "INSERT INTO job_table(name, job) VALUES ('Andy', 'pull');"+ "INSERT INTO job_table(name,

大家好

直截了当。 是否有任何java库可以从DB生成Postgres SQL脚本

例如,我有一个表job\u table

   name    | job
   Andy    | pull
   Benny   | push
然后,我想得到如下的字符串sql脚本

String sqlInsert = 

  "INSERT INTO job_table(name, job) VALUES ('Andy', 'pull');"+
  "INSERT INTO job_table(name, job) VALUES ('Benny', 'push');";
或者类似的东西

有人知道吗

注意:我已经用java编写了自己的代码来手动生成它。 但我就是不喜欢


谢谢你

使用PgJDBC对COPY命令的支持,将制表符分隔的或CSV数据输入数据库,并以相同的格式提取数据。您需要的是,可以从中获得

CopyManager目前的文档不足,但它只是命令的包装

通过将java.sql.Connection强制转换为
PgConnection
,可以访问
PgConnection
接口。如果连接是由连接池服务包装的,则可能必须将其展开,以获得PgJDBC返回的真正的底层连接。如果您使用JPA,那么您必须访问真正的PgJDBC连接,或者创建一个新连接

如果您实际上需要
INSERT
语句,而不是向数据库传递数据的有效方式,那么您的具体需求是什么?便携性?如果是这样的话,您将如何处理数字/十进制/任何形式的不同表示

如果您只需要处理“标准”数据类型,那么手工编写代码可能是最好的方法


目前唯一严格安全的方法是通过PGU转储。您可以调用
pg_dump--data only--table=thetable
进程并从其标准输出中读取数据来完成该工作,尽管这确实需要(a)直接了解应用程序中的数据库详细信息,而不仅仅是数据源或从容器中注入的实体管理器;(b) 了解pg_转储路径,以及(c)执行外部进程的安全权限。不幸的是,目前真的没有办法解决这个问题。pg_dump不是设计用来作为库的(尽管有人说要转换它),即使它是,它也是一个C库,您必须通过JNI或类似的方式包装它。Ick.

有什么原因不能使用pg_dump实用程序直接备份数据库吗?是的,我想将该字符串用于我的Web服务,以便客户端可以直接获取并执行它。我知道我们可以给客户端提供其他格式,例如:json或xml,但出于某种原因,我必须将该字符串提供给我的客户端。将通过JDBC进行复制吗(请参阅答案),或者您是否严格需要插入?如果是这样的话,目前还没有简单的pg_dump替代方案,那么您可能必须使用“pg_dump--data only--table=sometable”并读取其标准输出。