尝试使用 SQL 从 Opererp 7 postgres db bytea(二进制数据)重建文件

Trying to use SQL to reconstruct files from an Opererp 7 postgres db bytea (binary data)

我有一个旧的 Openerp 7 postgres 数据库,我正在尝试提取旧发票。

我读到它们存储在 DataBaseName.ir_attachment.dbdatas

我想出了这个...

copy 
(SELECT 
db_datas
FROM
ir_attachment
WHERE
name='Invoice_SAJ_2016_0964_.pdf')
to '/tmp/Invoice.pdf' (FORMAT "binary");

但不幸的是它不起作用。它提取了一些东西,但它不能作为 pdf 打开。

我重新调整了上面的内容并尝试了其他文件类型 .jpg 但还是失败了。

如果我在文本编辑器中打开每个文件,每个文件都以 "PGCOPY" 开头 - 也许是一个线索?

我在尝试一些无法完成的事情吗?

任何直接非常感谢。

编辑...

据我所知,SQL copy 命令在输出文件的开头和结尾添加了一些额外的字符。使用 NOTEPAD++ 查看输出文件显示:

PGCOPY
ÿ
NULNULNULNULNULNULNULNULNULNULSOHNULNULeDC1{useable file content starts here...
...
...
useable file content ends here}
ÿÿ

用编辑器打开输出文件并尝试删除第一个字符,包括 DC1 和尾随的两个字符 ÿÿ(也许你想为此使用 Notepad++)。然后保存输出文件并使用适当的应用程序打开它。

请注意,第 3 行 DC1 之后没有换行符 - 因此简单地删除前三行会损坏您的输出文件,因为文件中的可用内容直接在 [=12] 之后开始=] 字符.

应该可以,希望对你有所帮助...

据说pdf是由openerp编码的。

问题已通过使用 Jaime Vasquez 在 odoo 论坛页面上提供的一些 python 代码解决。

Answer is here