pg_dump命令及参数(postgres数据库)

pg_dump

名称

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

语法

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

输入

pg_dump 接受下面的命令行参数:
  dbname
声明将要抽取的数据库名. dbname 缺省为 USER 环境变量的值.
 
-a
只输出数据,不输出结构(表定义).
-c
创建前删除表定义。
-d
将数据输出为合适的插入字串.
-D
将数据作为带字段名的插入语句输出.
-i
忽略在   pg_dump 和数据库服务器之间的版本差别.因为  pg_dump知道许多关于系统表的信息,任何给定版本的  pg_dump只能和对应的数据库服务器版本一并使用.如果你需要跨越版本检查时才使用这个选项(而且如果  pg_dump 失效,别说我没警告你).
-n
除非绝对必需,禁止标识周围的双引号.如果有保留字用于标识符,这么做有可能在装载输出的数据时导致麻烦.这是v6.4以前的  pg_dump 缺省特性。
-N
在标识周围包括双引号。这是缺省。
-o
为每个表都输出对象标识( OID).
-s
只输出表结构(定义),不输出数据.
-t table
只输出表 table 的数据.
-u
使用口令认证.提示输入用户名和口令.
-v
声明冗余模式
-x
避免输出 ACL(赋予/撤消 命令)和表的所有者关系信息.
pg_dump 同样接受下面的命令行参数作为联接参数: -h host
声明  postmaster 在运行的机器的主机名.缺省是使用本地Unix主控套接字,而不是一个IP 联接.
-p port
声明  postmaster 正在侦听并等待联接的TCP/IP端口或本地 Unix 主控套接字文件句柄.缺省的端口号是5432,或者环境变量 PGPORT的值(如果存在).
-u
使用口令认证,提示输入 usernamepassword.

输出

pg_dump 将创建一个文件或输出到 stdout
  Connection to database 'template1' failed. connectDB() failed: Is thepostmaster 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 使用查询在插入数据前关闭用户表上的触发器以及在重新插入数据后恢复.如果重载在途中停止,系统表可能停留在错误的状态.

用法

输出与用户名同名的数据库:
% pg_dump > db.out
要重载该数据库:
% psql -e database < db.out

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pg_dumpPostgreSQL数据库备份工具,它可以将一个 PostgreSQL 数据库的结构和数据以 SQL 脚本或二进制格式存储到文件中。如果想要使用Java解析pg_dump的文件,可以通过以下步骤实现: 1. 读取pg_dump文件:使用Java IO中的FileReader和BufferedReader读取pg_dump文件中的内容。 2. 解析pg_dump文件:pg_dump文件中的内容包含了数据库的结构和数据信息,可以使用Java正则表达式或者字符串分割的方式解析pg_dump文件中的内容,提取出所需的数据。 3. 将解析出的数据存储到数据库中:使用Java JDBC连接到PostgreSQL数据库,将解析出的数据写入到数据库中。 以下是示例代码: ```java import java.io.BufferedReader; import java.io.FileReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class PgDumpParser { public static void main(String[] args) { String filename = "backup.sql"; // pg_dump备份文件名 String url = "jdbc:postgresql://localhost:5432/mydb"; // 数据库连接URL String user = "postgres"; // 数据库用户名 String password = "password"; // 数据库密码 try (Connection conn = DriverManager.getConnection(url, user, password); BufferedReader br = new BufferedReader(new FileReader(filename))) { String line; StringBuilder sb = new StringBuilder(); while ((line = br.readLine()) != null) { // 解析pg_dump文件,提取出所需的数据 if (line.startsWith("INSERT INTO")) { sb.append(line); if (line.endsWith(";")) { String sql = sb.toString(); // 将解析出的数据存储到数据库中 try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } sb.setLength(0); } } } } catch (Exception e) { e.printStackTrace(); } } } ``` 以上代码仅作为示例,实际使用时需要根据pg_dump文件的结构和数据格式进行相应的解析和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值