Skip to content

数据导入导出

pg_dump数据导出工具

pg_dump介绍

pg_dump是用于备份 OpenTenBase 单个数据库的工具。即使数据库正在被并发使用,它也能创建一致的备份。pg_dump不阻塞其他用户访问数据库(读取或写入)。

备份的数据可以是脚本或归档文件格式。脚本内容包含 SQL 命令的纯文本数据,它们可以用来重建数据库到它被备份时的状态。恢复一个这样的脚本,需要使用psql客户端工具。脚本文件还可以被用来在其他机器上重构数据库。在经过一些修改后,还可以在其他 SQL 数据库产品上重构数据库。另一种可选的归档文件格式必须与pg_restore配合使用来重建数据库。pg_dump提供了一种灵活的归档和传输机制。pg_dump可以被用来备份整个数据库,然后pg_restore可以被用来检查归档并/或选择数据库的哪些部分要被恢复。pg_restore支持并行恢复并且默认是压缩的。

连接数据库参数介绍

-d dbname
--dbname=dbname
指定要连接到的数据库名,不指定该参数时默认是从PGDATABASE环境变量中取得(如果被设置)。

-h host
--host=host
指定要连接服务器机器的主机名或者ip地址。不指定该参数时默认是从PGHOST环境变量中取得(如果被设置)。

-p port
--port=port
指定要连接服务器监听的 TCP 端口,不指定该参数时默认是从PGPORT环境变量中(如果被设置),否则使用编译在程序中的默认值。

-U username
--username=username
指定要连接服务的用户名,不指定该参数时默认是从PGUSER环境变量中(如果被设置),否则使用当前操作系统用户名做为默认值。

-w
--no-password
从不发出一个口令提示。如果服务器要求口令认证并且没有其他方式提供口令(例如一个.pgpass文件),那么连接尝试将失败。这个选项对于批处理任务和脚本有用,因为在其中没有一个用户来输入口令。

-W
--password
强制pg_dump在连接到一个数据库之前提示要求一个口令。

使用介绍

整库备份

  • 备份成文本格式
pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 >/data/opentenbase/opentenbase.sql
  • 备份成归档格式
pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 -Fc>/data/opentenbase/opentenbase.sql  

只备份指定模式下的对象

备份opentenbase模式下的对象

pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 -n opentenbase>/data/opentenbase/opentenbase.sql

备份opentenbase和pgxz模式下的对象,多个模式使用多组-n

pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 -n opentenbase -n pgxz>/data/opentenbase/opentenbase.sql

不备份指定模式下的对象

不备份opentenbase模式下的对象

pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 -N opentenbase>/data/opentenbase/opentenbase.sql

不备份opentenbase和pgxz模式下的对象,多个模式使用多组-N

pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 -N opentenbase -N pgxz>/data/opentenbase/opentenbase.sql

只备份某些数据表

备份数据表opentenbase.t

pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 -t 'opentenbase.t' >/data/opentenbase/opentenbase.sql

备份数据表opentenbase.t,pgxz.t

pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 -t 'opentenbase.t' -t 'pgxz.t1'>/data/opentenbase/opentenbase.sql

备份模式opentenbase下所有t开头的数据表

pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 -t 'opentenbase.t*' >/data/opentenbase/opentenbase.sql

不备份某些数据表

不备份数据表opentenbase.t

pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 -T 'opentenbase.t' >/data/opentenbase/opentenbase.sql

不备份数据表opentenbase.t,pgxz.t1

pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 -T 'opentenbase.t' -T 'pgxz.t1'>/data/opentenbase/opentenbase.sql

不备份模式opentenbase下所有t开头的数据表

pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 -T 'opentenbase.t*' >/data/opentenbase/opentenbase.sql

只备份出对象定义

pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 -s >/data/opentenbase/opentenbase.sql

只备份出数据

pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 -a >/data/opentenbase/opentenbase.sql

备份出的数据格式为insert values(xxx)

pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 --inserts >/data/opentenbase/opentenbase.sql

备份出的数据格式为insert(xxx) values(xxx)

pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 --column-inserts >/data/opentenbase/opentenbase.sql

备份带group信息

pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 --include-nodes >/data/opentenbase/opentenbase.sql

不备份带非日志表数据

pg_dump -h 127.0.0.1 -U opentenbase -d postgres -p 15432 --no-unlogged-table-data >/data/opentenbase/opentenbase.sql

pg_dumpall数据导出工具

pg_dumpall介绍

pg_dumpall是用于备份 OpenTenBase 所有数据库的工具,所以使用pg_dumpall时不能指定数据库。即使数据库正在被并发使用,它也能创建一致的备份。pg_dumpall不阻塞其他用户访问数据库(读取或写入)。与pg_dump不同的地方是pg_dumpall可以用于备份 OpenTenBase 全局对象,如用户和表空间定义。pg_dumpall备份时无法指定备份数据的格式,即无法使用-Fc这样的参数。

连接数据库参数介绍

-h host
--host=host
指定要连接服务器机器的主机名或者ip地址。不指定该参数时默认是从PGHOST环境变量中取得(如果被设置)。

-p port
--port=port
指定要连接服务器监听的 TCP 端口,不指定该参数时默认是从PGPORT环境变量中(如果被设置),否则使用编译在程序中的默认值。

-U username
--username=username
指定要连接服务的用户名,不指定该参数时默认是从PGUSER环境变量中(如果被设置),否则使用当前操作系统用户名做为默认值。

-w
--no-password
从不发出一个口令提示。如果服务器要求口令认证并且没有其他方式提供口令(例如一个.pgpass文件),那么连接尝试将失败。这个选项对于批处理任务和脚本有用,因为在其中没有一个用户来输入口令。

-W
--password
强制pg_dump在连接到一个数据库之前提示要求一个口令。

-l dbname
--database=dbname
指定要连接到哪个数据库备份全局对象以及发现要备份哪些其他数据库。如果没有指定,将会使用postgres数据库,如果postgres不存在,就使用 template1。

使用介绍

只备份全局对象

pg_dumpall -h 127.0.0.1 -U opentenbase -p 15432 -g >/data/opentenbase/opentenbase.sql

只备份用户角色

pg_dumpall -h 127.0.0.1 -U opentenbase -p 15432 -r >/data/opentenbase/opentenbase.sql

只备份表空间

pg_dumpall -h 127.0.0.1 -U opentenbase -p 15432 -t>/data/opentenbase/opentenbase.sql

pg_restore数据导入工具

pg_restore介绍

pg_restore是一个用来从pg_dump创建的非文本格式归档恢复PostgreSQL数据库的工具。这些归档文件还允许pg_restore选择恢复哪些内容。pg_restore可以在两种模式下操作。如果指定了一个数据库名称,pg_restore会连接那个数据库并且把归档内容直接恢复到该数据库中。否则,会创建一个脚本,其中包含着重建该数据库所必要的 SQL 命令,它会被写入到一个文件或者标准输出。这个脚本输出等效于pg_dump的纯文本输出格式。因此,一些控制输出的选项与pg_dump的选项类似。

连接参数介绍

-d dbname
--dbname=dbname
指定要连接到的数据库名。

-h host
--host=host
指定要连接服务器机器的主机名或者ip地址。不指定该参数时默认是从PGHOST环境变量中取得(如果被设置)。

-p port
--port=port
指定要连接服务器监听的 TCP 端口,不指定该参数时默认是从PGPORT环境变量中(如果被设置),否则使用编译在程序中的默认值。

-U username
--username=username
指定要连接服务的用户名,不指定该参数时默认是从PGUSER环境变量中(如果被设置),否则使用当前操作系统用户名做为默认值。

-w
--no-password
从不发出一个口令提示。如果服务器要求口令认证并且没有其他方式提供口令(例如一个.pgpass文件),那么连接尝试将失败。这个选项对于批处理任务和脚本有用,因为在其中没有一个用户来输入口令。

-W
--password
强制pg_restore在连接到一个数据库之前提示要求一个口令。

使用介绍

输出等效于pg_dump的纯文本格式

pg_restore opentenbase.dump

命令中不要使用-d dbname 参数,则pg_restore输出等效于pg_dump的纯文本输出格式。

输出文本重定向于某个文件中

pg_restore opentenbase.dump -f  opentenbase.sql 

或者得

pg_restore opentenbase.dump > opentenbase.sql  

将输出的文本重定向于opentenbase.sql文件中。

恢复时先创建数据库

pg_dump -h 127.0.0.1 -p 15432 -U opentenbase -d opentenbase -Fc > opentenbase.dump
dropdb -h 127.0.0.1 -p 15432 -U opentenbase opentenbase   
pg_restore -h 127.0.0.1 -U opentenbase -p 15432 -C -d postgres opentenbase.dump 

在使用这个选项时,-d提到的数据库只被用于发出初始的DROP DATABASE和CREATE DATABASE命令。所有要恢复到该数据库名中的数据都出现在归档中

只恢复ddl

pg_restore -h 127.0.0.1 -U opentenbase -p 15432 -d opentenbase -s opentenbase.dump

只恢复数据

pg_restore -h 127.0.0.1 -U opentenbase -p 15432 -d opentenbase -a opentenbase.dump

在重新创建数据库对象之前清除

pg_restore -h 127.0.0.1 -U opentenbase -p 15432 -d opentenbase -c opentenbase.dump

只恢复某些模式

pg_restore -h 127.0.0.1 -U opentenbase -p 15432 -n 'public' -d opentenbase opentenbase.dump

只恢复某些表

恢复所有模式下的t_txt表

pg_restore -h 127.0.0.1 -U opentenbase -p 15432 -t 't_txt' -d opentenbase opentenbase.dump

恢复所有模式下的t_txt表和t表

pg_restore -h 127.0.0.1 -U opentenbase -p 15432 -t 't_txt' -t 't' opentenbase.dump

恢复public模式下的t_txt表

pg_restore -h 127.0.0.1 -U opentenbase -p 15432 -n 'public' -t 't_txt' -d opentenbase opentenbase.dump

psql数据导入工具

psql介绍

psql是一个基于终端的 OpenTenBase 客户端工具,类似Oracle中的命令行工具sqlplus,但比sqlplus强大多了。它让你能交互式地键入查询,把它们发送给 OpenTenBase ,并且查看查询结果。或者,输入可以来自于一个文件或者命令行参数。此外,psql还提供一些元命令和多种类似 shell 的特性来为编写脚本和自动化多种任务提供便利。psql还支持命令补全,历史命令回找。

连接数据库参数介绍

-d dbname
--dbname=dbname
指定要连接到的数据库名,不指定该参数时默认是从PGDATABASE环境变量中取得(如果被设置)。

-h host
--host=host
指定要连接服务器机器的主机名或者ip地址。不指定该参数时默认是从PGHOST环境变量中取得(如果被设置)。

-p port
--port=port
指定要连接服务器监听的 TCP 端口,不指定该参数时默认是从PGPORT环境变量中(如果被设置),否则使用编译在程序中的默认值。

-U username
--username=username
指定要连接服务的用户名,不指定该参数时默认是从PGUSER环境变量中(如果被设置),否则使用当前操作系统用户名做为默认值。

-w
--no-password
从不发出一个口令提示。如果服务器要求口令认证并且没有其他方式提供口令(例如一个.pgpass文件),那么连接尝试将失败。这个选项对于批处理任务和脚本有用,因为在其中没有一个用户来输入口令。

-W
--password
强制pg_dump在连接到一个数据库之前提示要求一个口令。

使用介绍

psql执行一个sql文件中所有命令

  • 在外部执行
[pgxz@VM_0_3_centos ~]$ cat /data/opentenbase/opentenbase.sql 
set search_path = public;
insert into opentenbase values(1,2);
select count(1) from opentenbase;
[pgxz@VM_0_3_centos ~]$ psql -h 172.16.0.29 -p 15432 -U opentenbase -d postgres -f /data/opentenbase/opentenbase.sql 
SET
INSERT 0 1
 count 
-------
 10001
(1 row)
  • 在内部执行
[pgxz@VM_0_3_centos ~]$ psql -h 172.16.0.29 -p 15432 -U opentenbase -d postgres 
psql (PostgreSQL 10 (opentenbase 2.01))
Type "help" for help.

postgres=# \i  /data/opentenbase/opentenbase.sql 
SET
INSERT 0 1
 count 
-------
 10002
(1 row)

结语

OpenTenBase 是企业级分布式HTAP数据库管理系统。通过单一数据库集群同时为客户提供高一致性的分布式数据库服务和高性能的数据仓库服务,形成一套融合完整的企业级解决方案。大家在数据库领域遇到相关问题时,欢迎随时留言我们。