如何在DBD :: Pg中使用pg_putcopydata插入空值?

时间:2014-11-25 12:15:15

标签: perl postgresql dbd-pg

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

$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();

有记录表明其中一个字段可能是emtpy。 为了插入空值,我尝试使用" undef"," Null"," null",""," NULL"在pg_putcopydata里面。他们都没有工作。

如何使用pg_putcopydata插入NULL值?

1 个答案:

答案 0 :(得分:4)

要包含NULL,您必须使用文本插入,使用文本模式标识null,例如\N。这可以在COPY command syntax中指定,例如

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

然后

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

(加倍反斜杠以产生发送给Pg的文字反斜杠)。


这看起来像USDA database。如果是,here's an answer I wrote earlier