问题描述
我转储了一个数据库并将其导入到另一台服务器中。其中一个表有一个 bytea 列并且只有一行数据。在原始服务器上,如果我 SELECT * FROM users;
,它显示的正确值是 @.
- 但是,当我在第二台服务器上执行相同的 select 语句时,我得到 \x402e
相同的字段.我试图将我的头环绕在这种列类型上,但它超出了我的头脑。为什么它会在一台服务器上显示为转义字符串而不是另一台服务器?两台服务器都运行 Pg11,我正在通过 psql 访问它们。
原始服务器:
=# \d+ users
Table "public.users"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
-----------+------------------------+-----------+----------+-----------------------------------+----------+--------------+-------------
id | integer | | not null | nextval('users_id_seq'::regclass) | plain | |
priority | integer | | not null | 7 | plain | |
policy_id | integer | | not null | 1 | plain | |
email | bytea | | not null | | extended | |
fullname | character varying(255) | | | NULL::character varying | extended | |
=# SELECT * FROM users;
id | priority | policy_id | email | fullname
----+----------+-----------+-------+----------
1 | 0 | 1 | @. |
(1 row)
辅助服务器:
=> \d+ users
Table "public.users"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
-----------+------------------------+-----------+----------+-----------------------------------+----------+--------------+-------------
id | integer | | not null | nextval('users_id_seq'::regclass) | plain | |
priority | integer | | not null | 7 | plain | |
policy_id | integer | | not null | 1 | plain | |
email | bytea | | not null | | extended | |
fullname | character varying(255) | | | NULL::character varying | extended | |
=> SELECT * FROM users;
id | priority | policy_id | email | fullname
----+----------+-----------+--------+----------
4 | 0 | 1 | \x402e |
(1 row)
解决方法
set bytea_output to hex;
select '@.'::bytea;
┌────────┐
│ bytea │
├────────┤
│ \x402e │
└────────┘
set bytea_output to escape;
select '@.'::bytea;
┌───────┐
│ bytea │
├───────┤
│ @. │
└───────┘
您的服务器似乎有不同的设置。