Postgres客户端应用程序

来源:互联网 发布:电钢琴品牌推荐 知乎 编辑:程序博客网 时间:2024/06/16 04:54
客户端应用程序
1、clusterdb
clusterdb 用于对数据库中的表进行重新群集。它寻找以前群集过的表,然后 在上次用过的同一个索引上再次群集。它不会动那些从未群集的表。 clusterdb是对 SQL 命令 CLUSTER 的封装。使用这两种方法对数据库群集实际上没有任何区别。
示例
[highgo@hgdb ~]$ clusterdb test
[highgo@hgdb ~]$ clusterdb --table testtable test


2、createdb
createdb 创建一个新数据库。 通常,执行这个命令的数据库用户将成为新数据库的所有者。不过,如果拥 有合适的权限,那么也可以通过-O 指定其它用户。
createdb 是一个 SQL 命令 CREATE DATABASE 的封装。因此,两种方法创 建的数据库都一样。
示例
用缺省数据库服务器创建一个 demo 数据库
[highgo@hgdb ~]$ createdb demo
在主机 hgdb 上创建 demo 数据库,端口是 5866,使用 utf-8 编码方式, 并且显示执行的命令
[highgo@hgdb ~]$ createdb -p 5866 -h hgdb -E UTF-8 -e demo
Password: 
CREATE DATABASE demo ENCODING 'UTF-8';


3、createlang
createlang 是一个用于向数据库中增加新编程语言的工具。createlang 只是一 个 CREATE LANGUAGE 命令的封装。
#使用 droplang 删除一种语言。
示例
把 dblink 语言安装到数据库 demo 里
[highgo@hgdb extension]$ createlang dblink demo
#注意,安装到 template1 中的语言将自动安装到随后创建的其他数据库中。


4、createuser
createuser 创建一个新的用户(更准确地说是一个角色)。只有超级用户和有 CREATEROLE 权限的用户可以创建新的用户。因此,createuser 必须由超级 用户或者是有 CREATEROLE 权限的用户执行。
如果你希望创建一个新的超级用户,你必须以超级用户身份连接,而不仅仅 是一个有 CREATEROLE 权限的用户。成为超级用户就意味着将在数据库里 绕开所有访问权限检查,因此,不要轻易赋予超级用户权限。
createuser 是 SQL 命令 CREATE ROLE 的封装。因此,这两种方法创建的新 用户没什么差别。
示例
在缺省数据库服务器上创建一个 joe 用户
[highgo@hgdb extension]$ createuser joe
在主机 hgdb 上的服务器里创建 jok 用户,端口是 5866,避免提示并且回显执行的命令
[highgo@hgdb extension]$ createuser -h hgdb -p 5866 -S -D -R -e jok
Password: 
CREATE ROLE jok NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;
把用户 joke 创建为超级用户,并且立即赋予口令
[highgo@hgdb extension]$ createuser -P -s -e joke
Enter password for new role: 
Enter it again: 
CREATE ROLE joke PASSWORD 'md579c31b727f91b33f86a27a88a85ddf8f' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;


5、dropdb
dropdb 删除一个现有的数据库。执行这条命令的人必须是数据库超级用户或 者是数据库的所有者。
dropdb 是对 SQL 命令 DROP DATABASE 的封装。因此,这两种方法删除 数据库没什么区别。
示例
[highgo@hgdb extension]$ dropdb demo


6、droplang
droplang 是一个从数据库中删除一种现有编程语言的工具。droplang 可以删 除任何过程语言。
尽管可以用 SQL 命令直接删除后端编程语言,但还是推荐使用 droplang, 因为它进行了一些检查而且更容易使用。
示例
从demo库删除 pltcl 语言
[highgo@hgdb extension]$ droplang pltcl demo


7、dropuser
dropuser 删除一个已存在的用户。只有超级用户和拥有 CREATEROLE 权限 的用户可以删除用户。要删除一个超级用户,你必须首先是超级用户。 dropuser 是 SQL 命令 DROP ROLE 的封装。因此,这两种方法删除用户没 什么区别。
示例
[highgo@hgdb extension]$ dropuser joke


8、ecpg
ecpg 是一个嵌入的用于 C 语言的 SQL 预编译器。它把嵌有 SQL 语句的 C 程序通过将 SQL 调用替换成特殊的函数调用的方法转换成普通的 C 代码。 然后输出的文件就可以用任何 C 编译工具进行处理。
ecpg 将把命令行上给出的每个输入文件转换成对应的 C 输出文件。 输入文 件最好有.pgc 扩展名,这样, 这个扩展将被替换成.c 来决定输出文件名。 如果输入文件的扩展不是.pgc,那么输出文件名将通过在全文件名后面附 加.c 来生成。输出文件名也可以用-o 选项覆盖。
示例
如果你有一个叫 prog1.pgc 的嵌入 SQL 的 C 源代码, 你可以用下面的命令 序列创建一个可执行程序:
ecpg prog1.pgc
cc -I/usr/local/pgsql/include -c prog1.c
cc -o prog1 prog1.o -L/usr/local/pgsql/lib -lecpg


9、pg_config
pg_config 工具打印当前安装的 HighgoDB 配置参数。它可以用于那些希望 与 HighgoDB 相连接的软件包,这样可以通过它找到相对应的头文件和库。
示例
[highgo@hgdb bin]$ pg_config --configure
'--prefix=/opt/HighGo/Release/hgdb2.0.4' '--enable-nls=zh_CN zh_TW' '--without-perl' '--without-python' '--without-tcl' '--without-gssapi' '--without-krb5' '--without-pam' '--without-ldap' '--without-bonjour' '--with-openssl' '--with-libxml' '--with-libxslt' '--enable-thread-safety' '--with-zlib' '--without-selinux' '--with-ossp-uuid' '--with-pgport=5866'


10、pg_dump
pg_dump 是一个用于备份 HighgoDB 数据库的工具。它甚至可以在数据库正 在使用的时候进行完整一致的备份。pg_dump 并不阻塞其它用户对数据库的 访问(读或者写)。
示例
将 test 数据库转储到一个 SQL 脚本文件
[highgo@hgdb bin]$ pg_dump test > test.sql
将上述脚本导入一个(新建的)数据库 new
[highgo@hgdb ~]$ psql -d new -f test.sql
将数据库转储为自定义格式的归档文件
[highgo@hgdb ~]$ pg_dump -Fc test > test.dump
将上述归档文件导入一个(新建的)数据库 new
[highgo@hgdb ~]$ pg_restore -d new test.dump
转储一个名为 testtb 的表
[highgo@hgdb ~]$ pg_dump -t testtb test > testtb.sql
转储 detroit 模式中所有以 emp 开头的表,但是不包括 employee_log 表:
$ pg_dump -t 'detroit.emp*' -T detroit.employee_log mydb > db.sql
转储所有以 east 或 west 开头并以 gsm 结尾的模式, 但是不包括名字中含 有 test 的模式:
$ pg_dump -n 'east*gsm' -n 'west*gsm' -N '*test*' mydb > db.sql 同上,不过这一次使用正则表达式的方法:
$ pg_dump -n '(east|west)*gsm' -N '*test*' mydb > db.sql 转储所有数据库对象,但是不包括名字以 ts_开头的表:
$ pg_dump -T 'ts_*' mydb > db.sql
在-t 等选项中指定大写字母或大小写混合的名字必须用双引号界定,否则将 被自动转换为小写。 但是因为双引号在 shell 中有特殊含义,所以必须将 双引号再放进单引号中。这样一来,要转储一个大小写混合的表名,你就需 要像下面这样:
$ pg_dump -t '"MixedCaseName"' mydb > mytab.sql


11、pg_dumpall
pg_dumpall 可以转储一个数据库集群里的所有数据库到一个脚本文件
它通过 对数据库集群里的每个数据库调用 pg_dump 实现这个功能。pg_dumpall 还 转储出所有数据库公用的全局对象。而 pg_dump 并不保存这些对象。
pg_dumpall 需要和 HighgoDB 服务器连接多次(每个数据库一次)。如果你使 用口令认证,可能每次都会询问口令。这种情况下写一个~/.pgpass 可能会比 较方便。
恢复完之后,建议在每个数据库上运行 ANALYZE。这样优化器就可以得到 有用的统计。你也可以用 vacuumdb -a -z 清理所有数据库。
pg_dumpall 要求所有需要的表空间目录在进行恢复之前就必须存在;否则, 在非标准位置创建数据库将会失败。
示例
转储所有数据库:
$ pg_dumpall > db.out 从这个文件里重载数据库,你可以用:
$ psql -f db.out highgo (执行这个命令的时候连接到哪个数据库无关紧要,因为 pg_dumpall 创建 的脚本将会包含恰当的创建和连接数据库的命令。)


12、pg_restore
pg_restore 用于恢复由 pg_dump 转储的任何非纯文本格式中的 HighgoDB 数 据库。它将发出必要的命令重建数据库,并把它恢复成转储时的样子。归档 (备份)文件还允许 pg_restore 有选择地进行恢复,甚至在恢复前重新排列条 目的顺序。归档的文件设计成可以在不同的硬件体系之间移植。
pg_restore 无法恢复那些不存在归档文件中的信息
如果你的安装给 template1 数据库增加了任何你自己的东西,那么请注意把 pg_restore 的输出恢复到一个真正空的数据库中; 否则你可能会收到因为重 复定义所追加的对象而造成的错误信息。要制作一个没有任何本地附属物的 数据库,可以从 template0 而不是 template1 拷贝,比如:
CREATE DATABASE foo WITH TEMPLATE template0; pg_restore 的局限如下:
 当向一个已经存在的表恢复数据,并且还使用了--disable-triggers 选项 时,pg_restore 在插入数据前发出一些查询关闭用户表上的触发器,在 数据插入完成后重新打开它们。如果恢复中途停止,那么系统表可能处 于错误状态。
 pg_restore 不能有选择地恢复大型对象;例如,那些只针对特定表的。 如果一个归档包含大对象,那么所有的大对象将被恢复,或者如果他们 通过-L,-t 或者其他选项被排除,那么他们中没有一个恢复。
示例
[highgo@hgdb ~]$ pg_dump -Fc test > db.dump
[highgo@hgdb ~]$ dropdb test
[highgo@hgdb ~]$ pg_restore -C -d postgres db.dump
致命错误:  数据库 "postgres" 不存在
pg_restore: [archiver (db)] connection to database "postgres" failed: 致命错误:  数据库 "postgres" 不存在
[highgo@hgdb ~]$ pg_restore -C -d new db.dump
在-d 中指定的数据库可以是当前集群中的任意数据库;pg_restore 仅用该名 字来为 test 发出 CREATE DATABASE 命令。使用-C 可以确保数据总是会 被恢复到转储文件中指定名字的数据库里面。
将转储出来的数据重新加载到一个新建的数据库 newdb 中
[highgo@hgdb ~]$ createdb -T template0 newdb
[highgo@hgdb ~]$ pg_restore -d newdb db.dump
注意,这里没有使用-C 选项,而是直接链接到将要恢复的数据库上。还要注意的是,我们从 template0 而不是 template1 创建了新数据库,以确保初始为空。
要对数据项重新排序,首先必须转储归档的目录
[highgo@hgdb ~]$ pg_restore -l db.dump > db.list
这个文件由一行头和每个条目一行组成,比如
[highgo@hgdb ~]$ vi db.list
;
; Archive created at Thu Mar 30 19:21:46 2017
;     dbname: test
;     TOC Entries: 13
;     Compression: -1
;     Dump Version: 1.12-0
;     Format: CUSTOM
;     Integer: 4 bytes
;     Offset: 8 bytes
;     Dumped from database version: 9.2.16
;     Dumped by pg_dump version: 9.2.16
;
;
; Selected TOC Entries:
;
2966; 1262 16429 DATABASE - test highgo
6; 2615 2200 SCHEMA - public highgo
2967; 0 0 COMMENT - SCHEMA public highgo
2968; 0 0 ACL - public highgo
1; 3079 12599 EXTENSION - plpgsql
2969; 0 0 COMMENT - EXTENSION plpgsql
173; 1259 16430 TABLE public testtable highgo
174; 1259 16496 TABLE public testtb highgo
2960; 0 16430 TABLE DATA public testtable highgo
2961; 0 16496 TABLE DATA public testtb highgo
2852; 2606 16434 CONSTRAINT public testtable_pkey highgo
这里分号是注释分隔符,而行开头的数字代表赋给每个项目的内部归档 ID。 文件内的行可以注释、删除和重新排列。
可以用做 pg_restore 的输入并且只会恢复项目 10 和 6(以这个顺序)
vi db.list
;2966; 1262 16429 DATABASE - test highgo
6; 2615 2200 SCHEMA - public highgo
;2967; 0 0 COMMENT - SCHEMA public highgo
;2968; 0 0 ACL - public highgo
1; 3079 12599 EXTENSION - plpgsql
;2969; 0 0 COMMENT - EXTENSION plpgsql
;173; 1259 16430 TABLE public testtable highgo
;174; 1259 16496 TABLE public testtb highgo
;2960; 0 16430 TABLE DATA public testtable highgo
;2961; 0 16496 TABLE DATA public testtb highgo
;2852; 2606 16434 CONSTRAINT public testtable_pkey highgo
[highgo@hgdb ~]$ pg_restore -L db.list db.dump


13、psql
psql 是一个以终端为基础的 HighgoDB 前端。它允许你交互地键入查询,然 后把它们发出给 HighgoDB,再显示查询的结果。另外,输入来自一个文件。 还有,它提供了一些元命令和多种类似 shell 的特性来实现书写脚本以及对 大量任务的自动化。


14、reindexdb
reindexdb 是一个重建数据库索引的工具。
reindexdb 是 SQL 命令 REINDEX 的封装。 因此,用哪种方法重建索引都一 样。
示例
重建数据库 test 中所有索引:
$ reindexdb test
重建数据库 abcd 中名为 foo 的表上的 bar 索引:
$ reindexdb --table foo --index bar abcd


15、vacuumdb
vacuumdb 是一个用于整理数据库的工具。vacuumdb 还将会生成用于查询优 化器的内部统计数据。
vacuumdb 是 SQL 命令 VACUUM 的封装。通过该实用程序和通过其他方法 访问数据库,清空和分析数据库之间没有有效的区别
示例
整理数据库 test:
$ vacuumdb test 
为优化器清理和分析一个名为 bigdb 的数据库:
$ vacuumdb --analyze bigdb
清理数据库 xyzzy 中名为 foo 的表,并且为优化器分析列 bar:
$ vacuumdb --analyze --verbose --table 'foo(bar)' xyzzy













原创粉丝点击