Postgres 和 bytea 列看起来很奇怪

问题描述

我转储了一个数据库并将其导入到另一台服务器中。其中一个表有一个 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 │
├───────┤
│ @.    │
└───────┘

您的服务器似乎有不同的设置。

Documentation

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...