使用COPY 命令导入数据
COPY 命令从本地或其它数据库的多个数据源并行导入数据。
COPY 导入大量数据的效
率要比INSERT 语句高很多,而且存储数据也更有效率。
有关如何使用COPY 命令的更多信息,
请参阅9.2 使用COPY FROM STDIN 导入数据。
使用gsql 元命令导入数据
\copy 命令在任何psql 客户端登录数据库成功后可以执行导入数据。
与COPY 命令相比
较,\copy 命令不是读取或写入指定文件的服务器,而是直接读取或写入文件。
这个操作不如COPY 命令有效,
因为所有的数据必须通过客户端/服务器的连接来传递。
对于大量的数据来说COPY 命令可能会更好。
有关如何使用\copy 命令的更多信息,请参阅9.3 使用gsql 元命令导入数据。
GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
61
\COPY 只适合小批量,格式良好的数据导入,不会对非法字符做预处理,也无容错能
力,无法适用于含有异常数据的场景。导入数据应优先选择COPY。
使用INSERT 多行插入
插入如果不能使用copy 命令,而您需要进行sql 插入,可以根据情况使用多行插入。
如果您使用的是列存表,一次只插入一行或几行,则数据压缩效率低下。
多行插入是通过批量进行一系列插入而提高性能。
下面的示例使用一条insert 语句向一
个三列表插入三行。这仍属于少量插入,
只是用来说明多行插入的语法。
创建表的步骤请参
考3.6-创建和管理表。
向表customer_t1 中插入多行数据:
postgres=# insert into customer_t1 values (68, 'a1', 'zhou','wang'),
(43, 'b1', 'wu', 'zhao'),
(95, 'c1', 'zheng', 'qian');
有关更多详情和示例,请参阅《GBase 8c V5_3.0.0_SQL 手册》INSERT。
使用INSERT 批量插入
带SELECT 子句使用批量插入操作来实现高性能数据插入。
如果需要将数据或数据子集从一个表移动到另一个表,可以使用《GBase 8c
V5_3.0.0_SQL 手册》INSERT 和
《GBase 8c V5_3.0.0_SQL 手册》
CREATE TABLE AS 命令。
如果从指定表插入数据到当前表,例如在数据库中创建了一个表customer_t1 的备份表
customer_t2,现在需要将表customer_t1 中的数据插入到表customer_t2 中,则可以执行如下
命令。
postgres=# CREATE TABLE customer_t2 (
c_customer_sk
integer,
c_customer_id
char(5),
c_first_name char(6),
c_last_name char(8)
);
postgres=# INSERT INTO customer_t2 SELECT * FROM customer_t1;
上面的示例等价于:
postgres=# CREATE TABLE customer_t2 AS SELECT * FROM customer_t1;
GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
62