У меня есть скрипт Perl, который вставляет данные в Postgres в соответствии с текстовым файлом с разделителями. Иногда поле является нулевым (как и ожидалось). Однако Perl превращает это поле в пустую строку, и оператор вставки Postgres не выполняется.
Вот фрагмент кода:
use DBI;
#Connect to the database.
$dbh=DBI->connect('dbi:Pg:dbname=mydb','mydb','mydb',{AutoCommit=>1,RaiseError=>1,PrintError=>1});
#Prepare an insert.
$sth=$dbh->prepare("INSERT INTO mytable (field0,field1) SELECT ?,?");
while (<>){
#Remove the whitespace
chomp;
#Parse the fields.
@field=split(/\|/,$_);
print "$_\n";
#Do the insert.
$sth->execute($field[0],$field[1]);
}
А если ввод:
a|1
b|
c|3
РЕДАКТИРОВАТЬ: Используйте этот ввод вместо.
a|1|x
b||x
c|3|x
Не удастся на b|
.
DBD::Pg::st execute failed: ERROR: invalid input syntax for integer: ""
Я просто хочу, чтобы он вместо этого вставлял ноль в field1. Есть идеи?
РЕДАКТИРОВАТЬ: я упростила ввод в последнюю минуту. Старый ввод фактически заставил это работать по некоторой причине. Так что теперь я изменил ввод на что-то, что приведет к сбою программы. Также обратите внимание, что field1 является типом целочисленного типа, допускающим обнуление.