PostgreSQL - 错误:"类型为bytea的输入语法无效"

Nas*_*ash 6 postgresql

我对PostgreSQL很新,所以如果问题是基本的,我会道歉.

在PostgreSQL数据库恢复期间,从sql文件中,我收到错误"类型为bytea的输入语法无效",我相信数据不会复制到表中,即表是空的.

这是错误消息:

    2015-02-20 08:56:14 EST ERROR:  invalid input syntax for type bytea
    2015-02-20 08:56:14 EST CONTEXT:  COPY ir_ui_menu, line 166, column web_icon_data: "\x6956424f5277304b47676f414141414e5355684555674141414751414141426b43414d41414142485047566d4141414143..."
2015-02-20 08:56:14 EST STATEMENT:  COPY ir_ui_menu (id, parent_id, name, icon, create_uid, create_date, write_date, write_uid, web_icon_data, web_icon, sequence, web_icon_hover, web_icon_hover_data) FROM stdin;
Run Code Online (Sandbox Code Playgroud)

数据库备份转储的创建方式如下:

pg_dump -U user_name database_name -f backup_file.sql
Run Code Online (Sandbox Code Playgroud)

数据库还原完成如下:

psql -U user_name -d destination_db -f backup_file.sql
Run Code Online (Sandbox Code Playgroud)

源数据库(从中获取备份)是一台服务器上的PostgreSQL版本9.1.15,另一台服务器上的目标(恢复到)数据库是PostgreSQL 8.3.4.

有什么方法可以解决这个问题吗?在此先感谢您的帮助.

jan*_*oeh 6

将较新版本的Postgres中的转储恢复到较旧版本通常会出现问题,并且我没有自动化的方法.完成此工作很可能需要手动编辑转储文件.

具体来说,Postgres 9.0更改了用于bytea以下版本的转义字符串的处理:\以常规字符串文字处理的先前版本('\'如转义字符),而较新版本使用转义字符串语法 E'\'.


emi*_*emi 5

如果您有权访问9.X服务器配置,则可以在postgresql.conf上将bytea_output变量更改为“ escape”:

bytea_output = 'escape'                 # hex, escape
Run Code Online (Sandbox Code Playgroud)

然后重新启动Postgres 9.X服务器并按照正常方式转储数据库。最后,将其还原到8.X服务器上。

您也可以只为数据库转储操作更改客户端连接变量,但是它可能不在范围内。

希望能帮助到你。