现在的位置: 首页 > 综合 > 正文

postgres导入、导出

2014年02月05日 ⁄ 综合 ⁄ 共 4496字 ⁄ 字号 评论关闭

 

用pg_dump倒,数据库中无大对象可以(文本格式的):pg_dump   库名>文件名;  
  有大对象的也可以:pg_dump   -o   -Ft   -b   库名>文件名;  

Postgresql 备份与恢复研究
前言:
和任何包含珍贵数据的东西一样,PostgreSQL 数据库也应该经常备份。尽管这个过程相当简单, 但是我们还是应该理解做这件事所用的一些技巧和假设。
     备份 PostgreSQL 数据有三种完全不同的方法:
    1.SQL 转储(类似oracle 的exp,imp, )
    2.文件系统级别备份(也就是oracle冷备份。Down掉数据库。然后拷贝data目录下的文件。)
    3.在线备份(类似oracle的归档模式下的备份)。    每种备份都有自己的优点和缺点。
由于时间篇幅有限:只重点讲述sql转储的方法.这个方法也是最常用最方便的逻辑备份恢复的方法。
以下我重点讲解SQL 转储
     SQL 转储的方法采用的主意是创建一个文本文件,这个文本里面都是 SQL 命令,当把这个文件回馈给服务器时,将重建与转储时状态一
样的数据库。 PostgreSQL 为这个用途提供了应用工具 pg_dump。这条命令的基本用法是:
pg_dump dbname > outfile
正如你所见,pg_dump 把结果输出到标准输出。 我们下面就可以看到这样做有什么好处。
    pg_dump 是一个普通的 PostgreSQL 客户端应用(尽管是个相当聪明的东西。)这就意味着你可以从任何可以访问该数据库的远端主机上
面进行备份工作。 但是请记住 pg_dump 不会以任何特殊权限运行。具体说来, 就是它必须要有你想备份的表的读权限,因此,实际上你几乎
总是要成为数据库超级用户。
    要声明 pg_dump 应该以哪个用户身份进行联接,使用命令行选项 -h host 和 -p port。 缺省主机是本地主机或你的环境变量PGHOST声明

的值。 类似,缺省端口是环境变量PGPORT或(如果它不存在的话)编译好了的缺省值。 (服务器通常有相同的缺省,所以还算方便。)     和任何其他 PostgreSQL 客户端应用一样, pg_dump 缺省时用与当前操作系统用户名同名的数据库用户名进行联接。 要覆盖这个名字,
要么声明 -U 选项, 要么设置环境变量PGUSER。 请注意 pg_dump 的联接也和普通客户应用一样要通过客户认证机制。
    由 pg_dump 创建的备份在内部是一致的, 也就是说,在pg_dump运行的时候对数据库的更新将不会被转储。 pg_dump 工作的时候并不阻
塞其他的对数据库的操作。 (但是会阻塞那些需要排它锁的操作,比如 VACUUM FULL。)
    Important: 如果你的数据库结构依赖于 OID (比如说用做外键),那么你必须告诉 pg_dump 把 OID 也倒出来。 要倒 OID,可以使用  
-o 命令行选项。 缺省时也不会转储"大对象"。如果你使用大对象,请参考 pg_dump 的命令手册页。Pg_dump支持备份与恢复形式:1.Pg_dump 全库导出。C:\Documents and Settings\Administrator>pg_dump -U postgres  postgres  > c:\fu
lldb.sql
Password:C:\Documents and Settings\Administrator>pg_dump -U postgres  postgres  > c:\full
db.sql
Password:2.Pg_dump 单表或者多表导出
C:\Documents and Settings\Administrator>pg_dump  -U postgres  -t test2 -t test1
postgres > c:\test1.sql3.pg_dump 特殊数据导出:
利用select into语句创建一个临时表,然后使用pg_dump导出临时表。
C:\Documents and Settings\Administrator>pg_dump  -U postgres  -t test_temp postgres > c:\temp.sql4.Pg_restore 恢复。
To dump a database into a custom-format archive file:
一定要dump成custom格式才能用pg_restore恢复。
C:\Documents and Settings\Administrator>pg_dump -Fc -U postgres -t test -t test1
-t test2 postgres  > c:\test012-1.sql
Password:C:\Documents and Settings\Administrator>pg_restore -d postgres -U postgres -t te
st1  c:\test012-1.sql
Password:
5.pg_dumpall导出(我把下面翻译一下把,下面说明的很详细了)
pg_dump dumps only a single database at a time, and it does not dump information about roles or tablespaces (because those are cluster-wide rather than per-database). To support convenient dumping of the entire contents of a database cluster, the pg_dumpall
program is provided. pg_dumpall backs up each database in a given cluster, and also preserves cluster-wide data such as role and tablespace definitions. The basic usage of this command is:

pg_dump 一次只能导出一个数据库。而且不能导出关于角色和表空间信息。(因为表空间和角色跨越单个数据库,属于cluster数据库的。)pg_dumpall  能够帮你导出cluster数据库的完整内容。也可以单独导出单一数据库,角色和表空间的内容。(由于cluster不好翻译。可以理解为多数据库。集群,簇数据库,不知道哪个更贴切,就不翻译了)
pg_dumpall > outfile
The resulting dump can be restored with psql: 导出结果能用psql恢复。
psql -f infile postgres6.Psql  单表或者多表恢复
C:\Documents and Settings\Administrator>psql -d postgres -U postgres -t test1 -f
<c:\ff2.sql

所有table,function,view,trigger,type...全部一起出来pg_dump -d dbname -s > sql.txt

pg_dump -d dbname -t tablename -s > sql.txt

pg_dump

名称

pg_dump ― 将一个 Postgres 数据库抽出到一个脚本文件

pg_dump [ dbname ]pg_dump [ -h host ] [ -p port ] [ -t table ] [ -a ] [ -c ] [ -d ] [ -D ] [ -n ] [ -N ] [ -o ] [ -s ] [ -u ] [ -v ] [ -x ] [ dbname ]

输入

pg_dump 接受下面的命令行参数:

dbname 声明将要抽取的数据库名.dbname 缺省为 USER 环境变量的值. -a 只输出数据,不输出结构(表定义). -c 创建前删除表定义。 -d 将数据输出为合适的插入字串. -D 将数据作为带字段名的插入语句输出. -n 除非绝对必需,禁止标识周围的双引号.如果有保留字用于标识符,这么做有可能在装载输出的数据时导致麻烦.这是 v6.4以前的 pg_dump 缺省特性。 -N 在标识周围包括双引号。这是缺省。 -o 为每个表都输出对象标识(OID). -s 只输出表结构(定义),不输出数据. -t
table 只输出表 table 的数据. -u 使用口令认证.提示输入用户名和口令. -v 声明冗余模式 -x 包含 ACL(赋予/撤消 命令)和表的所有关系.

pg_dump 同样接受下面的命令行参数作为联接参数:

-h host 声明 postmaster 在运行的机器的主机名.缺省是使用本地Unix主控套接字,而不是一个 IPC 联接. -p port 声明 postmaster 正在侦听并等待联接的TCP/IP 端口或本地 Unix 主控套接字文件句柄.缺省的端口号是5432,或者环境变量 PGPORT 的值(如果存在). -u 使用口令认证,提示输入 username 和 password.

输出

pg_dump 将创建一个文件或输出到 stdout。

Connection to database 'template1' failed. connectDB() failed: Is the postmaster running and accepting connections at 'UNIX Socket' on port 'port'? pg_dump 无法与指定主机和端口上的 postmaster 进程相联.如果看到这条信息,确认 postmaster 正在给定的主机上你所声明的端口上运行.如果你的节点使用了认证系统,确认你已经获取了认证所须的信息.
Connection to database 'dbname' failed. FATAL 1: SetUserId: user 'username' is not in 'pg_shadow' 你在 pg_shadow 和 里没有有效的记录,因而不允许访问 Postgres.请与你的 Postgres 管理员联系. dumpSequence(table): SELECT failed 你没有读数据库的权限.请与你的 Postgres 节点管理员联系.

注意:pg_dump 在内部使用 SELECT 语句.如果你运行 pg_dump 时碰到问题,确认你能够使用象 psql 这样的程序从数据库选择.

描述

pg_dump 是一个将 Postgres 数据库输出到一个包含查询命令的脚本文件的工具.脚本文件是文本格式并且可以用于重建数据库,甚至可以在其他机器或其他硬件体系上.pg_dump 将输出用于重建所有用户定义的类型,函数,表,索引聚集和操作符所必须的查询语句.另外,所有数据是用文本格式拷贝出来的,因而也可以很容易地拷贝回去,也很容易用工具编辑.

pg_dump 在从 Postgres 节点向另一个节点一个转移数据时很有用.在运行pg_dump 后,我们应该检查输出脚本中的任何警告,尤其是下面列出的限制.

注意

pg_dump 有一些限制.限制主要源于从系统表中抽取某些变化信息的困难性.

  • pg_dump 不能理解部分索引.原因与上面所述相同;部分索引谓词都作为规划存储.( predicates are stored as plans.)
  • pg_dump 不能处理大对象.大对象被忽略因而必须手工操作.

用法

输出与用户名同名的数据库:

% pg_dump > db.out

要重载该数据库:

% psql -e database < db.out

抱歉!评论已关闭.