Я работаю с устаревшей системой и должен найти способ вставки файлов в ранее существовавший столбец Postgres 8.2 bytea с использованием Perl.Вставка файла в столбец bytea Postgres с использованием perl/SQL
До сих пор мой поиск привел меня верить следующее:
- нет консенсуса лучшего подхода для этого.
- lo_import выглядит многообещающим, но я, видимо, слишком заперт, чтобы заставить его работать.
Я надеялся, что сделать что-то вроде следующего
my $bind1 = "foo"
my $bind2 = "123"
my $file = "/path/to/file.ext"
my $q = q{
INSERT INTO generic_file_table
(column_1,
column_2,
bytea_column
)
VALUES
(?, ?, lo_import(?))
};
my $sth = $dbh->prepare($q);
$sth->execute($bind1, $bind2, $file);
$sth->finish();`
Мой сценарий работает б/н lo_import/BYTEA части. Но с ним я получаю эту ошибку:
DBD::Pg::st execute failed: ERROR: column "contents" is of type bytea but expression is >of type oid at character 176 HINT: You will need to rewrite or cast the expression.
То, что я думаю, что я делаю неправильно, что я не передавая фактический двоичный файл в БД правильно. Я думаю, что передаю путь к файлу, но не сам файл. Если это правда, то мне нужно выяснить, как открыть/прочитать файл в буфере tmp, а затем использовать буфер для импорта.
Или я отходит от базы здесь? Я открыт для любых указателей или альтернативных решений, если они работают с Perl 5.8/DBI/PG 8.2.
Что такое столбец «Содержимое»? Это не упоминается нигде в вашем коде. – Flimzy
Вы правы, что передаете имя файла, а не файл. Сначала вам нужно прочитать файл. – Flimzy
+1 спасибо за упоминание ваших версий, объяснение и показ того, что вы пробовали. Образцовый вопрос, спасибо. Теперь переходите к чему-то цивилизованному ;-) –