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

标签 java api postgresql

大家好!

开门见山。 是否有任何 java 库可以从数据库生成 Postgres SQL 脚本?

例如我有表 job_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 ,可以从 PgConnection 获得.

目前,CopyManager 的文档记录相当不足,但它只是 COPY 的包装器。命令。

访问PgConnection通过将 java.sql.Connection 强制转换为 PgConnection 来实现接口(interface)。如果连接由连接池服务包装,您可能必须将其解开才能获取 PgJDBC 返回的真正底层连接。如果您使用 JPA,同样的情况,您必须访问真正的 PgJDBC 连接或创建一个新连接。

如果您确实需要INSERT语句,而不是向数据库传递数据的有效方式,您的具体需求是什么?可移植性?如果是这样,您将如何处理诸如 NUMERIC/DECIMAL/等等的不同表示形式之类的事情?

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

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

关于用于从数据库生成 Postgres SQL 脚本的 Java 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10274976/

相关文章:

java - 在 JavaFx 中自动调整作为图形分配给单元格的形状

java - 部署 - 使用 appcfg.py 的 java 应用程序

java - 如何在 java ee 7 应用程序中设置上下文根

Java Lock支持内存一致性

ruby - Net :Http and third-party library for making API calls in Rails/Ruby?有什么区别

postgresql - 如何从 docker 容器连接到 localhost postgres 数据库?

java - Java中的突发内存使用

javascript - 页面可见性 Api,打开错误

postgresql:意外删除了 pg_filenode.map

sql - 在 Postgres 中使用 MAX 函数或 DESC 的最大记录