Как вставить нулевые значения, используя 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. Если так, вот ответ, который я написал ранее.