-
Notifications
You must be signed in to change notification settings - Fork 262
8. TBase数据导入导出
pg_dump是用于备份Tbase单个数据库的工具。即使数据库正在被并发使用,它也能创建一致的备份。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 tbase -d postgres -p 15432 >/data/tbase/tbase.sql
- 备份成归档格式
pg_dump -h 127.0.0.1 -U tbase -d postgres -p 15432 -Fc>/data/tbase/tbase.sql
备份tbase模式下的对象
pg_dump -h 127.0.0.1 -U tbase -d postgres -p 15432 -n tbase>/data/tbase/tbase.sql
备份tbase和pgxz模式下的对象,多个模式使用多组-n
pg_dump -h 127.0.0.1 -U tbase -d postgres -p 15432 -n tbase -n pgxz>/data/tbase/tbase.sql
不备份tbase模式下的对象
pg_dump -h 127.0.0.1 -U tbase -d postgres -p 15432 -N tbase>/data/tbase/tbase.sql
不备份tbase和pgxz模式下的对象,多个模式使用多组-N
pg_dump -h 127.0.0.1 -U tbase -d postgres -p 15432 -N tbase -N pgxz>/data/tbase/tbase.sql
备份数据表tbase.t
pg_dump -h 127.0.0.1 -U tbase -d postgres -p 15432 -t 'tbase.t' >/data/tbase/tbase.sql
备份数据表tbase.t,pgxz.t
pg_dump -h 127.0.0.1 -U tbase -d postgres -p 15432 -t 'tbase.t' -t 'pgxz.t1'>/data/tbase/tbase.sql
备份模式tbase下所有t开头的数据表
pg_dump -h 127.0.0.1 -U tbase -d postgres -p 15432 -t 'tbase.t*' >/data/tbase/tbase.sql
不备份数据表tbase.t
pg_dump -h 127.0.0.1 -U tbase -d postgres -p 15432 -T 'tbase.t' >/data/tbase/tbase.sql
不备份数据表tbase.t,pgxz.t1
pg_dump -h 127.0.0.1 -U tbase -d postgres -p 15432 -T 'tbase.t' -T 'pgxz.t1'>/data/tbase/tbase.sql
不备份模式tbase下所有t开头的数据表
pg_dump -h 127.0.0.1 -U tbase -d postgres -p 15432 -T 'tbase.t*' >/data/tbase/tbase.sql
pg_dump -h 127.0.0.1 -U tbase -d postgres -p 15432 -s >/data/tbase/tbase.sql
pg_dump -h 127.0.0.1 -U tbase -d postgres -p 15432 -a >/data/tbase/tbase.sql
pg_dump -h 127.0.0.1 -U tbase -d postgres -p 15432 --inserts >/data/tbase/tbase.sql
pg_dump -h 127.0.0.1 -U tbase -d postgres -p 15432 --column-inserts >/data/tbase/tbase.sql
pg_dump -h 127.0.0.1 -U tbase -d postgres -p 15432 --include-nodes >/data/tbase/tbase.sql
pg_dump -h 127.0.0.1 -U tbase -d postgres -p 15432 --no-unlogged-table-data >/data/tbase/tbase.sql
pg_dumpall是用于备份Tbase所有数据库的工具,所以使用pg_dumpall时不能指定数据库。即使数据库正在被并发使用,它也能创建一致的备份。pg_dumpall不阻塞其他用户访问数据库(读取或写入)。与pg_dump不同的地方是pg_dumpall可以用于备份TBase全局对象,如用户和表空间定义。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 tbase -p 15432 -g >/data/tbase/tbase.sql
pg_dumpall -h 127.0.0.1 -U tbase -p 15432 -r >/data/tbase/tbase.sql
pg_dumpall -h 127.0.0.1 -U tbase -p 15432 -t>/data/tbase/tbase.sql
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_restore tbase.dump
命令中不要使用-d dbname 参数,则pg_restore输出等效于pg_dump的纯文本输出格式。
pg_restore tbase.dump -f tbase.sql
或者得
pg_restore tbase.dump > tbase.sql
将输出的文本重定向于tbase.sql文件中。
pg_dump -h 127.0.0.1 -p 15432 -U tbase -d tbase -Fc > tbase.dump
dropdb -h 127.0.0.1 -p 15432 -U tbase tbase
pg_restore -h 127.0.0.1 -U tbase -p 15432 -C -d postgres tbase.dump
在使用这个选项时,-d提到的数据库只被用于发出初始的DROP DATABASE和CREATE DATABASE命令。所有要恢复到该数据库名中的数据都出现在归档中
pg_restore -h 127.0.0.1 -U tbase -p 15432 -d tbase -s tbase.dump
pg_restore -h 127.0.0.1 -U tbase -p 15432 -d tbase -a tbase.dump
pg_restore -h 127.0.0.1 -U tbase -p 15432 -d tbase -c tbase.dump
###只恢复某些模式
pg_restore -h 127.0.0.1 -U tbase -p 15432 -n 'public' -d tbase tbase.dump
恢复所有模式下的t_txt表
pg_restore -h 127.0.0.1 -U tbase -p 15432 -t 't_txt' -d tbase tbase.dump
恢复所有模式下的t_txt表和t表
pg_restore -h 127.0.0.1 -U tbase -p 15432 -t 't_txt' -t 't' tbase.dump
恢复public模式下的t_txt表
pg_restore -h 127.0.0.1 -U tbase -p 15432 -n 'public' -t 't_txt' -d tbase tbase.dump
psql是一个基于终端的TBase客户端工具,类似Oracle中的命令行工具sqlplus,但比sqlplus强大多了。它让你能交互式地键入查询,把它们发送给TBase,并且查看查询结果。或者,输入可以来自于一个文件或者命令行参数。此外,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在连接到一个数据库之前提示要求一个口令。
- 在外部执行
[pgxz@VM_0_3_centos ~]$ cat /data/tbase/tbase.sql
set search_path = public;
insert into tbase values(1,2);
select count(1) from tbase;
[pgxz@VM_0_3_centos ~]$ psql -h 172.16.0.29 -p 15432 -U tbase -d postgres -f /data/tbase/tbase.sql
SET
INSERT 0 1
count
-------
10001
(1 row)
- 在内部执行
[pgxz@VM_0_3_centos ~]$ psql -h 172.16.0.29 -p 15432 -U tbase -d postgres
psql (PostgreSQL 10 (TBase 2.01))
Type "help" for help.
postgres=# \i /data/tbase/tbase.sql
SET
INSERT 0 1
count
-------
10002
(1 row)
TBase是腾讯TEG数据库工作组三大产品之一,是在开源的PostgreSQL基础上研发的企业级分布式HTAP数据库管理系统。通过单一数据库集群同时为客户提供高一致性的分布式数据库服务和高性能的数据仓库服务,形成一套融合完整的企业级解决方案。大家在数据库领域遇到相关问题时,欢迎随时留言我们。