VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

COPY

功能描述

在PG兼容模式下,copy语法中的format值可以不带引号。

语法格式

  • 从一个文件拷贝至一个表:

    COPY table_name [ ( column_name [, ...] ) ] 
    	FROM { 'filename' | STDIN }
    	WITH (FORMAT binary);
    
  • 把一个表拷贝到一个文件:

    COPY table_name [ ( column_name [, ...] ) ]
      TO { 'filename' | STDOUT }
      WITH (FORMAT binary);
      
    COPY query
      TO { 'filename' | STDOUT }
      WITH (FORMAT binary);
    

完整copy语法内容及其参数说明参见COPY语法

参数说明

  • column_name

    可选的待拷贝字段列表。

    取值范围:如果没有声明字段列表,将使用所有字段。

  • table_name

    表的名称(可以有模式修饰)。

    取值范围:已存在的表名。

  • STDIN

    声明输入是来自标准输入。

  • STDOUT

    声明输出打印到标准输出。

  • FORMAT

    数据源文件的格式。

    取值范围:CSV、TEXT、FIXED、BINARY。

  • binary

    数据源文件的格式之一,binary形式的选项会使得所有的数据被存储/读作二进制格式而不是文本。 这比TEXT和CSV格式的要快一些,但是一个BINARY格式文件可移植性比较差。

  • query

    查询语句。

注意事项

导入内容不能超出数值范围。

示例

1、创建csv文件,添加内容后保存退出。

vi /tmp/import_test.csv
1,zhangsan,-92254.08,9月花销,2022/09/28,20:50:45
2,lisi,87758.07,8月收入,2022/09/05,14:20:15
3,wangwu,7758.07,8月报销,2022/09/01,16:43:05

2、创建表。

create table test(
id integer,
name varchar(100),
cash money,
info text,
date date,
time time
);

create table test_bak(
id integer,
name varchar(100),
cash money,
info text,
date date,
time time
);

3、从文件导入数据并查询。

copy test from '/tmp/import_test.csv' DELIMITERS ',';
select * from test;

结果显示为:

 id |   name   |    cash     |  info   |    date    |   time
----+----------+-------------+---------+------------+----------
  1 | zhangsan | -$92,254.08 | 9月花销 | 2022-09-28 | 20:50:45
  2 | lisi     |  $87,758.07 | 8月收入 | 2022-09-05 | 14:20:15
  3 | wangwu   |   $7,758.07 | 8月报销 | 2022-09-01 | 16:43:05
(3 rows)

4、binary导出数据到csv文件。

copy test to '/tmp/test_out.csv' with (format BINARY);

结果显示为:

COPY 3

5、binary导入数据并查询。

copy test_bak from '/tmp/test_out.csv' with (format BINARY);
select * from test_bak;

显示结果为:

 id |   name   |    cash     |  info   |    date    |   time
----+----------+-------------+---------+------------+----------
  1 | zhangsan | -$92,254.08 | 9月花销 | 2022-09-28 | 20:50:45
  2 | lisi     |  $87,758.07 | 8月收入 | 2022-09-05 | 14:20:15
  3 | wangwu   |   $7,758.07 | 8月报销 | 2022-09-01 | 16:43:05
(3 rows)