Как вставить нулевые значения, используя pg_putcopydata в DBD::Pg?

Я заполняю таблицу postgres миллионами записей. Чтобы ускорить процесс, я использую pg_putcopydata в DBD: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. Никто из них не работал.

Как вставить значения NULL, используя pg_putcopydata?

1 ответ

Решение

Чтобы включить NULL, вы должны использовать вставку в текст, идентифицируя NULL с помощью текстового шаблона, например \N, Это можно указать в COPY синтаксис команды, например

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

затем

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

(Удвоение обратной косой черты для получения буквального обратного слеша, отправленного Pg).


Это похоже на базу данных USDA. Если так, вот ответ, который я написал ранее.

Другие вопросы по тегам