3

我正在用数百万条记录填充一个 postgres 表。为了加快这个过程,我正在使用 DBD:Pg 中的 pg_putcopydata。我正在关注这个例子:

$dbh->do("COPY mytable(flavor, slices) FROM STDIN WITH DELIMITER '~'");
$dbh->pg_putcopydata("Pepperoni~123\n");
$dbh->pg_putcopydata("Mushroom~314\n");
$dbh->pg_putcopydata("Anchovies~6\n");
$dbh->pg_putcopyend();

有些记录的字段之一可能是空的。为了插入空值,我尝试在 pg_putcopydata 中使用“undef”、“Null”、“null”、“”、“NULL”。他们都没有工作。

如何使用 pg_putcopydata 插入 NULL 值?

4

1 回答 1

4

要包含 NULL,您必须使用文本内插入,用文本模式标识 null,例如\N. 这可以在COPY命令语法中指定,例如

COPY ... FROM ... WITH (DELIMITER '~', NULL '\N')

然后

$dbh->pg_putcopydata("NoSuchFood~\\N\n");

(将反斜杠加倍以生成发送到 Pg 的文字反斜杠)。


这看起来像USDA 数据库。如果是这样,这是我之前写的答案

于 2014-11-25T12:35:03.570 回答