【问题标题】:How to insert null values using pg_putcopydata in DBD::Pg?如何在 DBD::Pg 中使用 pg_putcopydata 插入空值?
【发布时间】:2014-11-25 20:35:03
【问题描述】:

我正在用数百万条记录填充一个 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 值?

【问题讨论】:

  • 有关格式的详细信息,请参阅COPY 的手册。你会想要类似WITH (DELIMITER '~', NULL '\N')

标签: perl postgresql dbd-pg


【解决方案1】:

要包含 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2017-07-19
    • 2011-04-28
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多