PostgreSQL自带的命令行工具【pg_dump、pg_dumpall、pg_restore、psql】

PostgreSQL自带的命令行工具

B.1 使用pg_dump进行数据库备份

pg_dump 可备份一个 database 的全部或者部分数据。支持的备份格式有:TAR 包格式、PostgreSQL自定义压缩格式、纯文本格式以及 SQL 文本格式。纯文本格式转储的内容中含有 psql 专有命令行,因此恢复时也需要通过 psql 工具来执行此文本。SQL 文本格式转储的是仅包含标准 CREATE 和 INSERT命令的 SQL 脚本,恢复时你可以使用 psql 或者 pgAdmin 工具来运行该脚本。

示例 B-1 pg_dump 帮助信息

pg_dump --help
pg_dump								可将某个database转储为文本文件或者其他格式文件。

用法:
pg_dump [选项]... [database名]

通用选项:
-f, --file=FILENAME 				输出文件名或者目录名
-F, --format=c|d|t|p 				输出文件格式(自定义格式、目录格式、TAR包格式、纯文本)
-j, --jobs=NUM 						使用这多个并行作业进行转储
-v, --verbose 						详细信息模式
-Z, --compress=0-9 					压缩格式的压缩级别
--lock-wait-timeout=TIMEOUT 		等待表锁超时后操作失败
--no-sync 							不等待变更安全写入磁盘 ➊
--help 								显示此帮助信息并退出
--version 							输出版本信息并退出

控制输出内容的选项:
-a, --data-only 					仅转储数据,而不转储schema
-b, --blobs 						在转储中包含大对象
-B, --no-blobs 						不对大对象进行备份 ➋
-c, --clean 						在重新创建数据库对象之前清除(删除)数据库对象
-C, --create 						包含用于在转储中创建数据库的命令
-E, --encoding=ENCODING 			以ENCODING编码格式转储数据
-n, --schema=SCHEMA 				仅转储命名schema
-N, --exclude-schema=SCHEMA 		不转储命名schema
-o, --oids 							在转储中包含OID
-O, --no-owner 						以纯文本格式跳过对象所有权的恢复
-s, --schema-only 					仅转储schema,而不转储数据
-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 					在仅恢复数据期间禁用触发器
--enable-row-security 				启用行级安全控制(只导出用户有权访问的数据)➌
--exclude-table-data=TABLE 			不转储命名表中的数据
--if-exists 						删除对象时使用IF EXISTS
--inserts 							以INSERT命令(而非COPY命令)的形式转储数据
--no-publications 					不导出逻辑复制发布端数据源定义 ➍
--no-security-labels 				不转储安全标签分配
--no-subscriptions 					不导出逻辑复制订阅端的数据订阅定义 ➎
--no-synchronized-snapshots 		在并行作业中不使用同步快照
--no-tablespaces 					不转储表空间分配
--no-unlogged-table-data 			不转储不记录WAL日志的表的数据
--quote-all-identifiers 			所有标识符加引号,即使不是关键字也加
--section=SECTION 					转储命名部分(包括三个部分:pre-data、data以及post-data。
									data部分包含表记录数据、大对象数据以及序列的值;
									post-data部分包含索引、触发器、规则和约束(除了验证检查约束)的定义;
									pre-data部分包含此外其他所有的对象定义)
--serializable-deferrable 			等待直至转储正常运行为止
--snapshot=SNAPSHOT 				为导出使用指定的快照 ➏
--strict-names 						要求每个表和/或schema包括模式以匹配至少一个实体 ➐
--use-set-session-authorization 	使用 SESSION AUTHORIZATION 命令代 ALTER OWNER 命令来设置所有权

连接选项:
-d, --dbname=DBNAME 				要转储的数据库
-h, --host=主机名 					数据库服务器主机或套接字目录
-p, --port=端口号 					数据库服务器端口号
-U, --username=名称 					作为指定数据库用户连接
-w, --no-password 					永远不提示输入密码
-W, --password 						强制要求输入密码(应该自动发生)
--role=ROLENAME 					在转储之前执行SET ROLE命令

➊➋➌ PostgreSQL 10 中引入的新特性。
➍ PostgreSQL 9.6 中引入的新特性。
➎➏ PostgreSQL 9.5 中引入的新特性。
➐ PostgreSQL 9.4 中引入的新特性。

B.2 服务器级备份工具pg_dumpall

使用 pg_dumpall 工具可以将服务器上的所有数据库备份到单个纯文本文件或者单个纯文本 SQL 文件上。该备份工具将自动备份角色和表空间等系统级对象的信息,这类信息不属于任何一个数据库。

示例 B-2 pg_dumpall 帮助信息

pg_dumpall --help
pg_dumpall						可以将一个PostgreSQL数据库集群中的所有数据都提取到一个SQL脚本文件中。 用法:

pg_dumpall [选项]...

通用选项:
-f, --file=FILENAME 			输出文件名
-v, --verbose 					详细模式
-V, --version 					输出版本信息,然后退出
--lock-wait-timeout=TIMEOUT 	等待表锁超时后操作失败
-?, --help 						显示此帮助信息并退出

控制输出内容的选项:
-a, --data-only 				仅转储数据,而不转储schema
-c, --clean 					重新创建数据库之前清除(删除)数据库
-g, --globals-only 				仅转储全局对象,而不转储数据库
-o, --oids 						在转储中包含OID
-O, --no-owner 					以纯文本格式跳过对象所有权的恢复
-r, --roles-only 				仅转储角色,而不转储数据库和表空间
-s, --schema-only 				仅转储schema,而不转储数据
-S, --superuser=NAME 			要在转储中使用的超级用户名
-t, --tablespaces-only 			仅转储表空间,而不转储数据库和角色
-x, --no-privileges 			不转储特权(grant/revoke)
--binary-upgrade 				仅供升级工具使用
--column-inserts 				以带有列名的INSERT命令的形式转储数据
--disable-dollar-quoting 		禁用美元(符号)引号,而是使用SQL标准引号
--disable-triggers 				在仅恢复数据期间禁用触发器
--inserts 						以INSERT命令(而非COPY命令)的形式转储数据
--no-publications 				不导出逻辑复制发布端数据源定义 ➊
--no-security-labels 			不转储安全标签的分配
--no-subscriptions 				不导出逻辑复制订阅端的数据订阅定义 ➋
--no-sync 						不等待变更安全写入磁盘 ➌
--no-security-labels 			不转储安全标签分配
--no-tablespaces 				不转储表空间分配
--no-unlogged-table-data 		不转储不记录WAL日志的表的数据
--no-role-passwords 			不转储角色的密码 ➍
--quote-all-identifiers 		所有标识符加引号,即使不是关键字也加
--use-set-session-authorization 使用SET SESSION AUTHORIZATION命令代替ALTER OWNER 命令来设置所有权

连接选项:
-d, --dbname=CONNSTR 			使用连接连接串连接
-h, --host=主机名 				数据库服务器主机或套接字目录
-l, --database=DBNAME 			替代默认数据库
-p, --port=端口号 				数据库服务器端口号
-U, --username=名称 				作为指定数据库用户连接
-w, --no-password 				永远不提示输入密码
-W, --password 					强制要求输入密码(应该自动发生)
--role=ROLENAME 				在转储之前执行SET ROLE命令

如果未使用-f/--file,则会将SQL脚本写到标准输出中。

➊➋➌➍ PostgreSQL 10 中引入的新特性。

B.3 database数据恢复工具pg_restore

可以使用 pg_restore 可恢复使用 pg_dump 创建的备份文件,这些备份文件的格式包括 TAR 包格式、自定义压缩格式以及目录格式等。

B-3 pg_restore 帮助信息

pg_restore --help
pg_restore						可以从pg_dump创建的存档中恢复一个PostgreSQL数据库。 用法:

pg_restore [选项]... [文件名]

通用选项:
-d, --dbname=NAME 				连接到数据库名称
-f, --file=文件名 				输出文件名
-F, --format=c|d|t 				备份文件格式(应该是自动的)
-l, --list 						打印存档的汇总目录
-v, --verbose 					详细信息模式
-V, --version 					输出版本信息并退出
-?, --help 						显示此帮助信息并退出

恢复控制选项:
-a, --data-only 				仅恢复数据,而不恢复schema
-c, --clean 					在重新创建数据库对象之前清除(删除)数据库对象
-C, --create 					创建目标数据库
-e, --exit-on-error 			恢复期间发生错误时退出,若不设定则默认为继续恢复
-I, --index=NAME 				恢复命名索引
-j, --jobs=NUM 					使用这多个并行作业进行恢复
-L, --use-list=FILENAME 		将此文件的目录用于选择输出或对输出进行排序
-n, --schema=NAME 				仅恢复此schema中的对象
-N, --exclude-schema=NAME 		不恢复该schema中的对象 ➊
-O, --no-owner					跳过对象所有权的恢复
-P, --function=NAME(args) 		恢复命名函数
-s, --schema-only 				仅恢复schema,而不恢复数据
-S, --superuser=NAME 			用于禁用触发器的超级用户名
-t, --table=NAME 				恢复命名表(含表和视图等) ➋
-T, --trigger=NAME 				恢复命名触发器
-x, --no-privileges 			跳过访问特权(grant/revoke)的恢复
-1, --single-transaction 		作为单个事务恢复
--enable-row-security 			启用行安全性 ➌
--disable-triggers 				在仅恢复数据期间禁用触发器
--no-data-for-failed-tables 	如果表创建失败,则不对其进行数据恢复
--no-publications 				不导出逻辑复制发布端数据源定义 ➍
--no-security-labels 			不恢复安全标签
--no-subscriptions 				不导出逻辑复制订阅端的数据订阅定义 ➎
--no-tablespaces 				不恢复表空间分配
--section=SECTION 				恢复命名部分(包括三个部分:pre-data、data以postdata。
								data部分包含表记录数据、大对象数据以及序列的值;
								post-data部分包含索引、触发器、规则和约束(除了验证检查约束)的定义;
								pre-data部分包含此外其他所有的对象定义)
--strict-names 					要求每个表和/或schema包括模式以匹配至少一个实体 ➏
--use-set-session-authorization 使用SET SESSION AUTHORIZATION命令代替ALTER OWNER命令来设置所有权

连接选项:
-h, --host=主机名 				数据库服务器主机或套接字目录
-p, --port=端口号 				数据库服务器端口号
-U, --username=名称 				作为指定数据库用户连接
-w, --no-password 				永远不提示输入密码-W, --password 强制要求输入密码(应该自动发生)
--role=ROLENAME 				在恢复之前执行SET ROLE命令

➊➋➌ PostgreSQL 10 中引入的新特性
➍➎ PostgreSQL 9.6 中引入的新特性。在 9.6 版之前,-t 选项只用于过滤普通表。在 9.6 版中,它拓展支持了外表、视图、物化视图和序列号生成器。
➏ PostgreSQL 9.5 中引入的新特性

B.4 交互模式下的psql命令

示例 B-4 psql 交互模式下支持的命令

\?

通用命令
\copyright 						显示PostgreSQL使用和分发条款
\errverbose 					以最冗长的形式显示最近的错误消息 ➊
\g [文件] or ; 					执行查询(并将结果发送给文件或|管道)
\gexec 							执行策略,然后执行其结果中的每个值 ➋
\gset [PREFIX] 					执行查询并将结果存储到psql变量中
\h [名称] 						关于SQL命令语法的帮助,*代表所有命令
\gx [文件] 						作用与\g相同,但强行要求使用展开模式显示结果 ➌
\q 								退出psql
\crosstabview [COLUMNS] 		执行查询并且以交叉表显示结果 ➍
\watch [SEC] 					每隔SEC秒执行一次查询

帮助
\? [commands] 					显示反斜线命令的帮助
\? options 						显示 psql 命令行选项的帮助
\? variables 					显示特殊变量的帮助
\h [名称] 						SQL命令语法上的说明,用*显示全部命令的语法说明查询缓冲区相关命令
\e [FILE] [LINE] 				使用外部编辑器编辑查询缓冲区(或文件)
\ef [FUNCNAME [LINE]] 			使用外部编辑器编辑函数定义
\ev [VIEWNAME [LINE]] 			用外部编辑器编辑视图定义 ➎
\p 								显示查询缓冲区的内容
\r 								重置(清除)查询缓冲区
\w 文件 							将查询缓冲区写入到文件

输入/输出相关命令
\copy ... 						执行SQL COPY,将数据流发送到客户端主机
\echo [字符串] 					将字符串写到标准输出
\i 文件 							从文件执行命令
\ir FILE 						与\i类似,但是在脚本中执行时,认为目标文件的位置是当前脚本所在的目录
\o [文件] 						将所有查询结果发送到文件或|管道
\qecho [字符串] 					将字符串写入到查询输出流,该命令等效于\echo,区别是所有输出将写入由\o设置的输出通道

条件命令 ➏
\if EXPR 						开启一个条件判定块
\elif EXPR 						当前条件判定块中的分支条件判定
\else 							当前条件判定块中的最终条件判定
\endif 							条件块结束符

信息查询命令
(选项:S = 显示系统对象,+ =附加的详细信息)

\d[S+] 							输出表、视图和序列列表
\d[S+] 名称 						描述表、视图、序列或索引
\da[S] [模式] 					输出聚合函数列表
\dA[+] [模式] 					列出访问方法 ➐
\db[+] [模式] 					输出表空间列表
\dc[S] [模式] 					输出编码转换(conversion)列表
\dC [模式] 						输出类型强制转换(cast)列表
\dd[S] [模式] 					显示对象上的注释
\ddp [模式] 						输出默认权限列表
\dD[S] [模式] 					输出域列表
\det[+] [模式] 					输出外部表列表
\des[+] [模式] 					输出外部服务器列表
\deu[+] [模式] 					输出用户映射列表\dew[+] [模式] 输出外部数据封装器列表
\df[antw][S+] [模式] 			输出特定类型函数(仅a-聚合函数/n-常规函数/t-触发器函数/w-窗口函数)列表
\dF[+] [模式] 					输出文本搜索配置列表
\dFd[+] [模式] 					输出文本搜索字典列表
\dFp[+] [模式] 					输出文本搜索解析器列表
\dFt[+] [模式] 					输出文本搜索模版列表
\dg[S+] [模式] 					输出角色列表
\di[S+] [模式] 					输出索引列表
\dl 							输出大对象列表,与\lo_list相同
\dL[S+] [模式] 					输出过程式语言列表
\dm[S+] [模式] 					输出物化视图列表
\dn[S+] [模式] 					输出schema列表
\do[S] [模式] 					输出运算符列表
\dO[S+] [模式] 					输出排序规则列表
\dp [模式] 						输出表、视图和序列访问权限列表
\drds [模式1 [模式2]] 			输出每个database的角色设置列表
\dRp[+] [PATTERN] 				列出逻辑复制的数据源定义 ➑
\dRs[+] [PATTERN] 				列出逻辑复制的订阅定义 ➒
\ds[S+] [模式] 					输出序列列表
\dt[S+] [模式] 					输出表列表
\dT[S+] [模式] 					输出数据类型列表
\du[S+] [模式] 					输出角色列表
\dv[S+] [模式] 					输出视图列表
\dE[S+] [模式] 					输出外部表列表
\dx[+] [模式] 					输出扩展列表
\dy [模式] 						输出事件触发器列表
\l[+] 							输出数据库列表
\sf[+] FUNCNAME 				显示函数定义
\sv[+] VIEWNAME 				显示一个视图的定义 ➓
\z [模式] 						和\dp的功能相同

格式化相关命令
\a 								在非对齐输出模式和对齐输出模式之间切换
\C [字符串] 						设置表标题;或者如果没有,则不设置
\f [字符串] 						显示或设置非对齐查询输出的字段分隔符
\H 								切换HTML输出模式(当前关闭)
\pset NAME [VALUE] 				设置表输出选项(NAME的可选项有format、border、expanded、fieldsep、
								fieldsep_zero、footer、null、numericlocale、
								recordsep、tuples_only、title、tableattr、pager、
								pager_min_lines、recordsep、recordsep_zero、tableattr、
								title、tuples_only、unicode_border_linestyle、
								unicode_column_linestyle、unicode_header_linestyle)
\t [on|off] 					仅显示行(当前关闭)
\T [字符串] 						设置HTML
\x [on|off] 					切换扩展输出(当前关闭)

连接相关命令
\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo} 连接到新数据库(当前是"postgres")
\encoding [编码名称] 									显示或设置客户端编码
\password [USERNAME] 									安全地为用户更改密码
\conninfo 												显示当前连接的相关信息

操作系统相关命令
\cd [目录] 					更改当前工作目录
\setenv NAME [VALUE] 		设置或取消设置环境变量
\timing [on|off] 			切换命令计时开关(当前关闭)
! [命令] 					在shell中执行命令或启动交互式shell

➊➋➌ PostgreSQL 10 中引入的新特性。所有的条件参数都是新引入的。
➍➎➏➐➑➒➓ PostgreSQL 9.6 中引入的新特性。
⓫ PostgreSQL 9.5 中引入的新特性。

B.5 非交互模式下的psql命令

示例 B-5 psql 基本帮助信息

psql --help
psql是PostgreSQL的交互式终端。

使用方法:
psql [选项]... [database名称 [用户名]]

通用选项:
-c,--command=命令 						仅运行单个命令(SQL或内部命令),然后退出
-d, --dbname=数据库名称 					要连接到的数据库名称
-f, --file=文件名 						从文件执行命令,然后退出
-l, --list 								列出可用的数据库,然后退出
-v, --set=, --variable=NAME=VALUE		设置psql变量NAME为VALUE(例如,-v ON_ERROR_STOP=1)
-X, --no-psqlrc 						不读取启动文件(~/.psqlrc)
-1 ("one"), --single-transaction 		将命令文件作为单一事务执行
-?, --help[=options] 					显示此帮助,然后退出
--help=commands 						列出反斜线命令,然后退出 ➊
--help=variables 						列出特殊变量,然后退出 ➋
--version 								输出版本信息并退出

输入和输出选项:
-a, --echo-all 							回显所有来自于脚本的输入
-b, --echo-errors 						回显失败的命令 ➌
-e, --echo-queries 						回显发送给服务器的命令
-E, --echo-hidden 						显示内部命令生成的查询
-L, --log-file=文件名 					将会话日志发送给文件
-n, --no-readline 						禁用增强命令行编辑功能(readline)
-o, --output=FILENAME 					将查询结果发送给文件(或|管道)
-q, --quiet 							以静默模式运行(不显示消息,仅显示查询输出)
-s, --single-step 						单步模式(每个查询均需确认)
-S, --single-line 						单行模式(SQL命令不允许跨行)

输出格式选项:
-A, --no-align 							非对齐表输出模式
-F, --field-separator=字符串				设置字段分隔符(默认为“|”)
-H, --html 								HTML表输出模式
-P, --pset=VAR[=ARG] 					将打印选项VAR设置为AR(参见\pset命令)
-R, --record-separator=字符串			设置记录分隔符(默认为换行符)
-t, --tuples-only 						仅打印行
-T, --table-attr=文本 					设置HTML表标记属性(例如:宽度、边框等)
-x, --expanded 							打开扩展表输出
-z, --field-separator-zero 				将字段分隔符设置为零字节
-0, --record-separator-zero 			将记录分隔符设置为零字节

连接选项:
-h, --host=主机名 						数据库服务器主机或套接字目录
-p, --port=端口 							数据库服务器端口(默认为“5432”)
-U, --username=用户名 					数据库用户名
-w, --no-password 						永远不提示输入密码
-W, --password 							强制要求输入密码(应该自动发生)

如需了解更多信息,请在psql中输入“\?”(用于内部命令)或者“\help”(用于SQL命令),或者参考PostgreSQL官方手册中的psql部分

➊➋➌ PostgreSQL 9.5 中引入的新特性。

上一篇:canvas实战之简易钟表


下一篇:IDEA中output窗口悬浮问题