
# 极致性能的导入导出场景
对数据导入导出性能有极致要求，且是在相同版本的集群之间进行数据的导出与导入的场景下，[BINARY](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0531.html#ZH-CN_TOPIC_0000002527826192__zh-cn_topic_0000002526895770_li39562711911)格式通过二进制格式去存储/读取数据，而非文本格式。相比其他格式有一定的性能优势，但其存在一些限制：
1. GaussDB特有格式，不具备可移植性，且仅推荐在同版本的数据库之间导入导出时使用。
2. 二进制格式与数据类型相关性更强。例如，在文本格式下，可以从一个smallint字段导出并导入到integer列中，但是在二进制格式下不可以。
3. 部分数据类型不支持二进制导入导出，具体信息请参见[BINARY约束](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0531.html#ZH-CN_TOPIC_0000002527826192__zh-cn_topic_0000002526895770_li39562711911)。
导出命令：
```
--data_source 可以是一个表名称，也可以是一个select语句。
--server_encoding 可以通过SHOW server_encoding获得。
SET client_encoding = '{server_encoding}';
COPY {data_source} TO '/path/export.bin' binary;
```
导入命令：
```
--data_destination 只能是一个表名称
--file_encoding 为该二进制文件导出时指定的编码格式
SET client_encoding = '{file_encoding}';
COPY {data_destination} FROM '/path/export.bin' binary;
```
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
用户应仔细研读该格式的相关约束条件。只有在完全确定待导出数据不会受到BINARY格式相关约束影响的情况下，才可以考虑选用BINARY格式，以此提升数据导出和导入的性能。
#### 示例
1. 数据准备。 
   ```
   gaussdb=# REATE DATABASE db1 ENCODING='UTF-8' LC_COLLATE='en_US.UTF-8' LC_CTYPE ='en_US.UTF-8' DBCOMPATIBILITY = 'ORA';CREATE DATABASE
   gaussdb=# \c db1
   Non-SSL connection (SSL connection is recommended when requiring high-security)
   You are now connected to database "db1" as user "omm".
   db1=# CREATE TABLE test_copy(id int, name text);
   NOTICE:  The 'DISTRIBUTE BY' clause is not specified. Using 'id' as the distribution column by default.
   HINT:  Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
   CREATE TABLE
   db1=# INSERT INTO test_copy VALUES(1, 'aaa');
   INSERT 0 1
   db1=# INSERT INTO test_copy VALUES(3, e'cc\tc');
   INSERT 0 1
   db1=# INSERT INTO test_copy(name) VALUES('ddd');
   INSERT 0 1
   db1=# INSERT INTO test_copy VALUES(5, e'ee\\e');
   INSERT 0 1
   db1=# INSERT INTO test_copy VALUES(6, ',');
   INSERT 0 1
   db1=# INSERT into TEST_COPY VALUES(7, '"');
   INSERT 0 1
   db1=# SELECT * FROM test_copy;
    id |   name    
   ----+-----------
     1 | aaa
     3 | cc      c
       | ddd
     5 | ee\e
     6 | ,
     7 | "
   (6 rows)
   ```
   
   
2. 数据导出。 
   ```
   db1=# SET client_encoding = 'UTF-8';
   SET
   db1=# COPY test_copy TO '/home/xy/test.bin' BINARY;
   COPY 6
   ```
   
   
3. 数据导入。 
   ```
   db1=# TRUNCATE test_copy;
   TRUNCATE TABLE
   db1=# SET client_encoding = 'UTF-8';
   SET
   db1=# COPY test_copy FROM '/home/xy/test.bin' BINARY;
   COPY 6
   ```
   
   
 
