java - 具有空日期和整数字段的 Postgres 复制

标签 java postgresql jdbc

我有一个 java 应用程序,它通过 JDBC 连接将数据从可能较大的文件流式传输到 postgres RDS。

我正在使用以下适用于空整数类型的命令。

COPY tableName FROM STDIN with (format csv, delimiter E'\u0001', NULL '', QUOTE E'\u0005')

但是这不适用于空日期字段 (PSQLException:错误:日期的输入语法无效:“”)

如果我修改命令为

COPY tableName FROM STDIN with (format csv, delimiter E'\u0001', NULL '\N', QUOTE E'\u0005')

它适用于日期字段,但不适用于整数字段。 (PSQLException: ERROR: invalid input syntax for integer: "\N")

我在这里看到了类似的问题,解决了整数字段的空值或日期字段的空值,但不是两者,所以我想知道是否有一种方法可以指定 null 来处理整数和日期字段(或为不同数据类型指定多个不同空字符串的方法)

我真的很想使用 COPY,因为性能比解析文件和插入每条记录要好得多,所以希望这是可能的

最佳答案

所以 Postgres 9.4+这可以使用 FORCE_NULL 实现

基于文档

Match the specified columns' values against the null string, even if it has been quoted, and if a match is found set the value to NULL. In the default case where the null string is empty, this converts a quoted empty string into NULL. This option is allowed only in COPY FROM, and only when using CSV format.

所以我修改后的SQL如下:

COPY tableName FROM STDIN with (format csv, delimiter E'\u0001', null '', quote E'\u0005', force_null(dateField1, dateField2,...,dateFieldN)); 

关于java - 具有空日期和整数字段的 Postgres 复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49417348/

相关文章:

java - Elastic Java Boost 日期

java - MySQL J 连接器

java - 在记分板代码中使用什么单链表或数组?

ruby-on-rails - rails 4 : ConnectionTimeoutError on heroku basic plan

sql - Postgresql - 根据另一列的选择标准返回额外的列

java - ClassNotFoundException : con. mysql.jdbc.Driver

java - 结果集异常 - 在结果集开始之前

java - JOOQ mysql按位

ruby-on-rails - Rails 5 范围像多个部分字符串

postgresql - sonar启动时无法连接postgreSQL