PostgreSQL 跨大版本迁移 Bytea 字段内容显示不一致

今天在做数据库迁移时发现有张表的数据不对,这张表有个 bytea 字段,迁移后显示的内容不对,源库是 8.4.3 版本目标库是9.0.3 版本, 一时找不到原因,后来在德哥的指导下,只要在目标库设置一个 bytea_output 参数就行,例如可以在导入脚本里加上 set bytea_output = 'escape'

表结构

1
2
3
4
5
6
7
8
9
10
11
12
13
cmp=> /d tbl_temp  
Table "cmp.tbl_temp"
Column | Type | Modifiers
------------+-----------------------------+-----------
txman | character varying(100) |
mcc | character varying(10) |
name | character varying(100) |
filebytes | bytea |
startprice | numeric |
endprice | numeric |
starttime | timestamp without time zone |
endtime | timestamp without time zone |
createtime | timestamp without time zone |

PostgreSQL 9.0 手册介绍

bytea_output (enum)
Sets the output format for values of type bytea. Valid values are hex (the default) and escape (the traditional PostgreSQL format). See Section 8.4 for more information. The bytea type always accepts both formats on input, regardless of this setting.

原因很明显了,由于在PostgreSQL老版本里(8.4以前) bytea_output 参数默认为 “escape” , 而 PostgreSQL 9.0 的这个参数被默认设置成了 “hex” ,所以在导入到 PostgreSQL9 版本里,bytea字段内容就不对了。在数据导完后,建议将 $PGDATA/postgresql.conf 的这个参数也改下,设置成 “escape” , 不然那个字段应用显示依然会有问题。

原创文章,作者:306829225,如若转载,请注明出处:https://blog.ytso.com/236391.html

(0)
上一篇 2022年1月24日
下一篇 2022年1月24日

相关推荐

发表回复

登录后才能评论