`

PostgreSQL-操作-03--导入导出

阅读更多

出处:http://blog.chinaunix.net/uid-354915-id-3504632.html

数据库导入导出根据对比:

Oracle的exp/imp,

Informix的dbexp/dbimp,

MySQL的mysqldump,

PostgreSQL对应工具为pg_dump和pg_restore

 

pg_dump---把一个数据库转储为纯文本文件或者是其它格式.

可以在数据库正在使用的时候进行完整一致的备份,并不阻塞其它用户对数据库的访问。转储格式可以是一个脚本或者归档文件

D:\Program Files\PowerCmd>pg_dump --help
pg_dump 把一个数据库转储为纯文本文件或者是其它格式.
用法:  pg_dump [选项]... [数据库名字]
一般选项:
  -f, --file=FILENAME         output file or directory name
  -F, --format=c|d|t|p        output file format (custom, directory, tar, plain text)
  -v, --verbose            详细模式
  -Z, --compress=0-9       被压缩格式的压缩级别
--lock-wait-timeout=TIMEOUT 在等待表锁超时后操作失败
  --help                       显示此帮助信息, 然后退出
  --versoin                    输出版本信息, 然后退出
控制输出内容选项:
  -a, --data-only          只转储数据,不包括模式
  -b, --blobs              在转储中包括大对象
  -c, --clean              在重新创建之前,先清除(删除)数据库对象
  -C, --create             在转储中包括命令,以便创建数据库
  -E, --encoding=ENCODING     转储以ENCODING形式编码的数据
  -n, --schema=SCHEMA      只转储指定名称的模式
 -N, --exclude-schema=SCHEMA     不转储已命名的模式
  -o, --oids               在转储中包括 OID
  -O, --no-owner           在明文格式中, 忽略恢复对象所属者
  -s, --schema-only        只转储模式, 不包括数据
  -S, --superuser=NAME     在转储中, 指定的超级用户名
  -t, --table=TABLE        只转储指定名称的表
  -T, --exclude-table=TABLE       只转储指定名称的表
  -x, --no-privileges      不要转储权限 (grant/revoke)
  --binary-upgrade         只能由升级工具使用
  --column-inserts          以带有列名的INSERT命令形式转储数据
  --disable-dollar-quoting     取消美元 (符号) 引号, 使用 SQL 标准引号
  --disable-triggers         在只恢复数据的过程中禁用触发器
  --inserts                 以INSERT命令,而不是COPY命令的形式转储数据
  --no-security-labels        do not dump security label assignments
  --no-tablespaces           不转储表空间分配信息
  --no-unlogged-table-data    do not dump unlogged table data
  --quote-all-identifiers     quote all identifiers, even if not key words
  --serializable-deferrable   wait until the dump can run without anomalies
 --use-set-session-authorization
   使用 SESSION AUTHORIZATION 命令代替ALTER OWNER 命令来设置所有权
联接选项:
  -h, --host=主机名        数据库服务器的主机名或套接字目录
  -p, --port=端口号        数据库服务器的端口号
  -U, --username=名字      以指定的数据库用户联接
  -w, --no-password        永远不提示输入口令
  -W, --password           强制口令提示 (自动)
  --role=ROLENAME          do SET ROLE before dump
如果没有提供数据库名字, 那么使用 PGDATABASE 环境变量的数值.

二、pg_dump的使用实例
1、创建两个数据库
CREATE DATABASE "TestDb1"
  WITH OWNER = "TestRole1"
       ENCODING = 'UTF8'
       TABLESPACE = "TestTbs1";
CREATE DATABASE "TestDb2"
  WITH OWNER = "TestRole1"
       ENCODING = 'UTF8'
       TABLESPACE = "TestTbs1";
在TestDb1中创建表csm_bill、cfg_public_int_transport插入几条记录,并创建索引,索引使用索引表空间TestTbsIndex。

2、仅迁移数据库结构:
E:\>pg_dump -U TestRole1 -s -f TestDb1.sql TestDb1
口令:
-U TestRole1和超级用户-U postgres结果完全相同:
E:\>pg_dump -U postgres -s -f TestDb11.sql TestDb1
E:\>psql -U TestRole2 -f TestDb1.sql TestDb2 >a.txt 2>&1
用户 TestRole2 的口令:
导入时,使用-U TestRole2往往有很多权限不够,要想成功导入需要修改相关数据库对象的属主,所以最好使用超级用户-U postgres:
E:\>psql -U postgres -f TestDb1.sql TestDb2 >a.txt 2>&1
不转储权限选项:-x
E:\>pg_dump -U postgres -x -s -f TestDb12.sql TestDb1
TestDb12.sql比TestDb1.sql少了一下几行:


为了可以多次运行TestDb1.sql,可以在文件开始加以下两行:
drop schema public cascade;
create schema public;
或者使用-c选项:
E:\>pg_dump -U postgres -c -x -s -f TestDb13.sql TestDb1
TestDb13.sql比TestDb1.sql多以下几行:

此时,可以多次运行:
E:\>psql -U postgres -f TestDb13.sql TestDb2 >a.txt 2>&1
但是,如果两个库有不同的表或索引,应该使用第一种方法,因为第二种方法在找不到某些数据库对象时会报错。

3、迁移数据库结构和数据(可以实现数据库的备份与恢复)
数据的复制使用copy命令:
E:\>pg_dump -U postgres TestDb1>TestDb14.sql

数据的复制使用insert语句:
E:\>pg_dump -U postgres --column-inserts TestDb1>TestDb15.sql

4、把远程linux上PostgreSQL上的cpost数据库结构迁移至本地PostgreSQL
(1)在本地建一个完全相同的环境
create user "cpost" inherit createdb;
create tablespace "pis_data" owner cpost location 'E:\PostgreSQL/data/pis_data';
create tablespace "pis_index" owner cpost location 'E:\PostgreSQL/data/pis_index';
远程数据库cpost仍使用了默认表空间:
CREATE DATABASE cpost
  WITH OWNER = cpost
       --ENCODING = 'LATIN9'
       TABLESPACE = pg_default
       --LC_COLLATE = 'C'
       --LC_CTYPE = 'C'
       CONNECTION LIMIT = -1;
使用以上三个参数报错,建成后的数据库如下:
CREATE DATABASE cpost
  WITH OWNER = cpost
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'Chinese (Simplified)_People''s Republic of China.936'
       LC_CTYPE = 'Chinese (Simplified)_People''s Republic of China.936'
       CONNECTION LIMIT = -1;
(2)使用pg_dump迁移表结构
使用-h选项,使导出的sql文件直接存放在本地:
E:\>pg_dump -h 132.10.10.11 -p 1234 -U cpost -x -s -f cpost.sql cpost
E:\>psql -U postgres -f cpost.sql
导入成功,但报了一个错误:
psql:cpost.sql:22: ERROR:  character 0xe99499 of encoding "UTF8" has no equivalent in "LATIN9"
字符集错误,字符集问题详见我的另一篇blog:由PostgreSQL的区域与字符集说起

三、使用pg_dump和pg_restore实现数据库的备份与恢复
E:\>pg_restore --help
pg_restore 从一个归档中恢复一个由 pg_dump 创建的 PostgreSQL 数据库.
用法:
  pg_restore [选项]... [文件名]
一般选项:
  -d, --dbname=名字        连接数据库名字
  -f, --file=文件名        输出文件名
  -F, --format=c|d|t       backup file format (should be automatic)
  -l, --list               打印归档文件的 TOC 概述
  -v, --verbose            详细模式
  --help                   显示此帮助信息, 然后退出
  --version                输出版本信息, 然后退出恢复控制选项:
  -a, --data-only          只恢复数据, 不包括模式
  -c, --clean              在重新创建数据库对象之前需要清除(删除)数据库对象
  -C, --create             创建目标数据库
  -e, --exit-on-error      发生错误退出, 默认为继续
  -I, --index=名称         恢复指定名称的索引
  -j, --jobs=NUM           可以执行多个任务并行进行恢复工作
  -L, --use-list=文件名    从这个文件中使用指定的内容表排序输出
  -n, --schema=NAME      在这个模式中只恢复对象
  -O, --no-owner           忽略恢复对象所属者
  -P, --function=名字(参数)  恢复指定名字的函数
  -s, --schema-only        只恢复模式, 不包括数据
  -S, --superuser=NAME     使用指定的超级用户来禁用触发器
  -t, --table=NAME         恢复指定命字的表
  -T, --trigger=NAME       恢复指定命字的触发器
  -x, --no-privileges      跳过处理权限的恢复 (grant/revoke)
  -1, --single-transaction   作为单个事务恢复
 --disable-triggers        在只恢复数据的过程中禁用触发器
  --no-data-for-failed-tables 没有恢复无法创建表的数据
  --no-security-labels     do not restore security labels
--no-tablespaces          不恢复表空间的分配信息
  --use-set-session-authorization 使用 SESSION AUTHORIZATION 命令代替ALTER OWNER命令来设置对象所有权
联接选项:
  -h, --host=主机名        数据库服务器的主机名或套接字目录
  -p, --port=端口号        数据库服务器的端口号
  -U, --username=名字      以指定的数据库用户联接
  -w, --no-password        永远不提示输入口令
  -W, --password           强制口令提示 (自动)
  --role=ROLENAME          在恢复前执行SET ROLE操作
如果没有提供输入文件名, 则使用标准输入.
1、使用dump格式备份和恢复:
E:\>pg_dump -U postgres -Fc TestDb1 >TestDb1.dump
postgres=# drop database "TestDb2";
DROP DATABASE
postgres=# create database "TestDb2"
postgres-# with owner="TestRole2"
postgres-# tablespace="TestTbs2";
CREATE DATABASE
E:\>pg_restore -U postgres -d TestDb2 TestDb1.dump >a.txt 2>&1
2、使用tar格式备份和恢复:
E:\>pg_dump -U postgres -Ft TestDb1>TestDb1.tar
postgres=# drop database "TestDb2";
DROP DATABASE
postgres=# create database "TestDb2"
postgres-# with owner="TestRole2"
postgres-# tablespace="TestTbs2";
CREATE DATABASE
E:\>pg_restore -U postgres -d TestDb2 TestDb1.tar >a.txt 2>&1

分享到:
评论

相关推荐

    postgresql-9.1.3-1-windows-x64

    安装完成后,用户可以通过pgAdmin或其他管理工具与PostgreSQL交互,进行数据表创建、数据导入导出、备份恢复等操作。同时,由于PostgreSQL是开源软件,用户可以利用庞大的社区资源和文档来解决问题,进一步提升...

    postgresql-10.19-1-linux-x64-binaries.tar.gz

    这个压缩包包含了运行和管理PostgreSQL数据库所需的所有核心组件和工具,如数据库服务器(postgres)、客户端连接工具(psql)、数据导入导出工具(pg_dump和pg_restore)、性能分析工具(pg_stat_statements)等。...

    Mac下的postgresql-9.4.4-1-osx.zip

    7. **数据迁移与备份**:了解如何导出(`pg_dump`)和导入(`pg_restore`)数据,以及如何定期备份数据库,是使用PostgreSQL不可或缺的部分。 8. **客户端工具**:安装完成后,用户可能还需要图形化管理工具如...

    postgresql-9.5.9.tar.gz

    - **数据导入导出**:可以使用 `pg_dump` 和 `pg_restore` 工具进行数据库备份和恢复。 - **性能优化**:可通过调整参数、索引优化、查询优化等方式提升数据库性能。 - **监控与维护**:利用 `pg_stat_activity` ...

    postgresql 导入导出

    在IT行业中,数据库管理是...总的来说,PostgreSQL的数据导入导出涉及多个方面,从基础的命令行工具到高级的源码定制,都需要根据具体需求进行选择和操作。了解并熟练掌握这些技能,将有助于你更高效地管理你的数据库。

    SqlServer ,postgresql-8.3-603, mysql,oracle以及将数据导入到excel 的相关jar包

    本文将详细介绍如何使用SQL Server、PostgreSQL 8.3-603、MySQL、Oracle这四种主流的关系型数据库管理系统(RDBMS)进行数据操作,并探讨如何将这些数据库中的数据导入Excel进行分析和处理。涉及到的关键点包括...

    postgresql-12.4-1-windows-x64 安装包

    7. **数据迁移与备份**:PostgreSQL支持数据导入导出,使用`pg_dump`和`pg_restore`命令可以方便地进行数据库备份和恢复。 8. **社区支持**:PostgreSQL拥有活跃的社区,遇到问题时,可以参考官方文档或在论坛上...

    PostgreSQL13.1-CN-v1.0.pdf

    用户可以通过阅读手册了解如何创建数据库、管理用户、设置权限、编写 SQL 查询、进行数据导入导出,以及如何利用 PostgreSQL 的高级特性,如触发器、存储过程、视图等。 如果在使用中文手册过程中发现错误或有改进...

    postgresql-客户端

    4. **数据浏览和操作**:通过表格形式展示数据,支持数据导入导出、过滤、排序、编辑和删除。 5. **数据库设计**:提供 ER 图设计,方便可视化数据库模型。 6. **性能分析**:通过执行计划和性能监控,帮助优化 SQL ...

    postgresql10-12+postGIS3-0-1.rar

    - **数据导入导出**:支持多种格式的数据导入(如 Shapefile、KML、GeoJSON 等),以及将结果导出为地图文件。 总之,这个压缩包提供了 PostgreSQL 10 和 PostGIS 3.0.1 的集成解决方案,非常适合在 Windows 环境下...

    在ArcGIS10.2+postgresql9.2中创建地理空间库的需要用到的工具和动态库

    6. **数据导入和导出**:一旦Geodatabase建立完成,你可以使用ArcGIS的数据导入/导出工具,如`Feature Class to Geodatabase`或`Geodatabase to Geodatabase`来迁移地理空间数据。 7. **SQL和Spatial SQL**:由于...

    Csv导入导出.rar

    压缩包中的"导入导出"可能是实现CSV导入导出功能的代码示例或工具,可能包括了不同场景下的导入导出策略,比如错误处理、数据转换、类别选择等功能的实现。 总的来说,“Csv导入导出.rar”提供了一个全面的工具集...

    数据库导入导出

    - PostgreSQL pgAdmin:用于PostgreSQL数据库的管理和导入导出。 - Data Pump:Oracle数据库的一种高性能数据迁移工具。 3. 数据导入导出的步骤: - 导入: - 准备数据文件:根据目标数据库的要求,确保数据...

    postgresql13-13.1.zip

    - **数据导入/导出**:提升了 `COPY` 命令的性能,使得批量数据导入导出更快。 在部署 PostgreSQL 13 时,要确保遵循最佳实践,如合理设置配置参数、定期备份、监控系统性能、使用合适的安全策略等,以确保数据库的...

    QGIS+postgresql操作

    当两者结合使用时,可以在QGIS中方便地查询PostgreSQL空间数据库中的数据,并进行数据的导入导出操作。 知识点一:软件安装 在使用QGIS和PostgreSQL之前,首先需要确保系统中已经安装了这两个软件。对于QGIS,可以...

    linux下数据库dump的导入导出

    在Linux操作系统中,数据库的导入导出是数据库管理员日常工作中不可或缺的部分,特别是在系统迁移、备份恢复或性能优化等场景中。本篇文章将详细介绍如何在Linux环境下进行数据库的dump(备份)以及如何导入这些备份...

    python-postgresql-load:如果你想在 python 中使用一些 postgresql COPY 代码片段或模板

    然后,你可以按照库的文档来调用相应的函数,进行数据的导入导出。 5. **优化数据传输** `COPY`命令支持多种格式,如CSV、JSON等,可以灵活选择适合你数据的格式。同时,`COPY`命令还可以与其他PostgreSQL功能...

    SQL语句导入导出大全 教程-源码-下载.rar_sql下载

    本教程“SQL语句导入导出大全”旨在帮助用户全面理解如何使用SQL进行数据的导入与导出操作,这对于数据迁移、备份和恢复等任务至关重要。 首先,我们需要了解SQL的基本概念。SQL主要包括数据查询、数据插入、数据...

    javatools数据导入导出工具

    JavaTools是一款基于Java开发的数据导入导出工具,主要用于数据库管理和数据迁移工作。它提供了一种简单易用的图形用户界面,使得非编程人员也能轻松处理数据的导入与导出任务。在更新后的版本v1.0.5中,开发者对...

Global site tag (gtag.js) - Google Analytics