零、口令文件:
在给出其它PostgreSQL客户端命令之前,我们需要先介绍一下PostgreSQL中的口令文件。之所以在这里提前说明该文件,是因为我们在后面的示例代码中会大量应用该文件,从而保证我们的脚本能够自动化完成。换句话说,如果在客户端命令执行时没有提供该文件,PostgreSQL的所有客户端命令均会被口令输入提示中断。
在当前用户的HOME目录下,我们需要手工创建文件名为 .pgpass的口令文件,这样就可以在我们连接PostgreSQL服务器时,客户端命令自动读取该文件已获得登录时所需要的口令信息。该文件的格式如下:
复制代码 代码如下:
hostname:port:database:username:password
以上数据是用冒号作为分隔符,总共分为五个字段,分别表示服务器主机名(IP)、服务器监听的端口号、登录访问的数据库名、登录用户名和密码,其中前四个字段都可以使用星号(*)来表示匹配任意值。见如下示例:
复制代码 代码如下:
/> cat > .pgpass
*:5432:postgres:postgres:123456
CTRL+D
#.pgpass文件的权限必须为0600,从而防止任何全局或者同组的用户访问,否则这个文件将被忽略。
/> chmod 0600 .pgpass
在学习后面的客户端命令之前,我们需要根据自己的应用环境手工创建该文件,以便后面所有的示例代码都会用到该口令文件,这样它们就都可以以批处理的方式自动完成。
一、createdb:
创建一个新的PostgreSQL数据库。该命令的使用方式如下:
复制代码 代码如下:
createdb [option...] [dbname] [description]
1. 命令行选项列表:
选项 说明 -D(--tablespace=tablespace) 指定数据库的缺省表空间。 -e(--echo) 回显createdb生成的命令并且把它发送到服务器。 -E(--encoding=encoding) 指定用于此数据库的字符编码方式。 -l(--locale=locale) 指定用于此数据库的本地化设置。 -O(--owner=owner) 指定新建数据库的拥有者,如果未指定此选项,该值为当前登录的用户。 -T(--template=template) 指定创建此数据库的模板数据库。 -h(--host=host) 指定PostgreSQL服务器的主机名。 -p(--port=port) 指定服务器的侦听端口,如不指定,则为缺省的5432。 -U(--username=username) 本次操作的登录用户名,如果-O选项没有指定,此数据库的Owner将为该登录用户。 -w(--no-password) 如果当前登录用户没有密码,可以指定该选项直接登录。
2. 应用示例:
复制代码 代码如下:
#1. 以postgres的身份登录。(详情参照上面口令文件的内容)
/> psql
#2. 创建表空间。
postgres=# CREATE TABLESPACE my_tablespace LOCATION '/opt/PostgreSQL/9.1/mydata';
CREATE TABLESPACE
#3. 创建新数据库的owner。
postgres=# CREATE ROLE myuser LOGIN PASSWORD '123456';
CREATE ROLE
postgres=# \q
#4. 创建新数据库,其中本次连接的登录用户为postgres,新数据库的owner为myuser,表空间为my_tablespace,新数据库名为mydatabase。
/> createdb -U postgres -O myuser -D my_tablespace -e mydatabase
CREATE DATABASE mydatabase OWNER myuser TABLESPACE my_tablespace;
#5. 重新登录,通过查询系统表查看该数据库是否创建成功,以及表空间和所有者是否一致。
/> psql
postgres=# SELECT datname,rolname,spcname FROM pg_database db, pg_authid au, pg_tablespace ts WHERE datname = 'mydatabase' AND datdba = au.oid AND dattablespace = ts.oid;
datname | rolname | spcname
------------+---------+---------------
mydatabase | myuser | my_tablespace
(1 row)
二、dropdb:
删除一个现有PostgreSQL数据库。
复制代码 代码如下:
dropdb [option...] dbname
1. 命令行选项列表:
选项 说明 -e(--echo) 回显dropdb生成的命令并且把它发送到服务器。 -i(--interactive) 在做任何破坏性动作前提示。 -q(--quiet) 不显示响应。 -h(--host=host) 指定PostgreSQL服务器的主机名。 -p(--port=port) 指定服务器的监听端口,如不指定,则为缺省的5432。 -U(--username=username) 本次操作的登录用户名。 -w(--no-password) 如果当前登录用户没有密码,可以指定该选项直接登录。
2. 应用示例:
复制代码 代码如下:
#以postgres的身份连接服务器,删除mydatabase数据库。
/> dropdb -U postgres -e mydatabase
DROP DATABASE mydatabase;
#通过查看系统表验证该数据库是否已经被删除。
/> psql
postgres=# SELECT count(*) FROM pg_database WHERE datname = 'mydatabase';
count
-------
0
(1 row)
三、reindexdb:
为一个指定的PostgreSQL数据库重建索引。
复制代码 代码如下:
reindexdb [connection-option...] [--table | -t table ] [--index | -i index ] [dbname]
reindexdb [connection-option...] [--all | -a]
reindexdb [connection-option...] [--system | -s] [dbname]
1. 命令行选项列表:
选项 说明 -a(-all) 重建整个数据库的索引。 -e(--echo) 回显reindexdb生成的命令并且把它发送到服务器。 -i(--index=index) 仅重建指定的索引。 -q(--quiet) 不显示响应。 -s(--system) 重建数据库系统表的索引。 -t(--table=table) 仅重建指定数据表的索引。 -h(--host=host) 指定PostgreSQL服务器的主机名。 -p(--port=port) 指定服务器的监听端口,如不指定,则为缺省的5432。 -U(--username=username) 本次操作的登录用户名。 -w(--no-password) 如果当前登录用户没有密码,可以指定该选项直接登录。
2. 应用示例:
复制代码 代码如下:
#仅重建数据表testtable上的全部索引。
/> reindexdb -t testtable -e -U postgres postgres
REINDEX TABLE testtable;
#仅重建指定索引testtable_idx
/> reindexdb -i testtable_idx -e -U postgres postgres
REINDEX INDEX testtable_idx;
#重建指定数据库mydatabase的全部索引。
/> reindexdb mydatabase
四、vacuumdb:
收集垃圾并且分析一个PostgreSQL数据库。
复制代码 代码如下:
vacuumdb [-options] [--full | -f] [--verbose | -v] [--analyze | -z] [-t table [(column [,...])]] [dbname]
vacuumdb [-options] [--all | -a] [--full | -f] [--verbose | -v] [--analyze | -z]
1. 命令行选项列表:
选项
说明
-a(--all)
清理所有数据库。
-e(--echo)
回显vacuumdb生成的命令并且把它发送到服务器。
-f(--full)
执行完全清理。
-q(--quiet)
不显示响应。
-t table [(column[,...])]
仅仅清理或分析指定的数据表,字段名只是在与--analyze选项联合使用时才需要声明。
-v(--verbose)
在处理过程中打印详细信息。
-z(--analyze)
计算用于规划器的统计值。
-h(--host=host)
指定PostgreSQL服务器的主机名。
-p(--port=port)
指定服务器的监听端口,如不指定,则为缺省的5432。
-U(--username=username)
本次操作的登录用户名。
-w(--no-password)
如果当前登录用户没有密码,可以指定该选项直接登录。
2. 应用示例:
复制代码 代码如下:
#清理整个数据库mydatabase。
/> vacuumdb -e mydatabase
VACUUM;
#清理并分析postgres数据库中的testtable表。
/> vacuumdb -e --analyze --table 'testtable' postgres
VACUUM ANALYZE testtable;
#清理并分析postgres数据库中的testtable表的i字段。
/> vacuumdb -e --analyze -t 'testtable(i)' postgres
VACUUM ANALYZE testtable(i);
五、createuser:
定义一个新的PostgreSQL用户帐户,需要说明的是只有超级用户或者是带有CREATEROLE权限的用户才可以执行该命令。如果希望创建的是超级用户,那么只能以超级用户的身份执行该命令,换句话说,带有CREATEROLE权限的普通用户无法创建超级用户。该命令的使用方式如下:
复制代码 代码如下:
createuser [option...] [username]
1. 命令行选项列表:
选项 说明 -c number 设置新创建用户的最大连接数,缺省为没有限制。 -d(--createdb) 允许该新建用户创建数据库。 -D(--no-createdb) 禁止该新建用户创建数据库。 -e(--echo) 回显createuser生成的命令并且把它发送到服务器。 -E(--encrypted) 对保存在数据库里的用户口令加密。如果没有声明, 则使用缺省值。 -i(--inherit) 新创建的角色将自动继承它的组角色的权限。 -I(--no-inherit) 新创建的角色不会自动继承它的组角色的权限。 -l(--login) 新角色将被授予登录权限,该选项为缺省选项。 -L(--no-login) 新角色没有被授予登录权限。 -N(--unencrypted) 不对保存在数据库里的用户口令加密。如果没有声明, 则使用缺省值。 -P(--pwprompt) 如果给出该选项,在创建用户时将提示设置口令。 -r(--createrole) 新角色被授予创建数据库的权限。 -R(--no-createrole) 新角色没有被授予创建数据库的权限。 -s(--superuser) 新角色为超级用户。 -S(--no-superuser) 新角色不是超级用户。 -h(--host=host) 指定PostgreSQL服务器的主机名。 -p(--port=port) 指定服务器的监听端口,如不指定,则为缺省的5432。 -U(--username=username) 本次操作的登录用户名。 -w(--no-password) 如果当前登录用户没有密码,可以指定该选项直接登录。
2. 应用示例:
复制代码 代码如下:
# 对于有些没有缺省设置的选项,如-(d/D)、-(s/S)和-(r/R),如果在命令行中没有直接指定,那么在执行该命令是将会给出提示信息。
# 需要注意的是该提示将会挂起自动化脚本,直到输入后命令才会继续执行。
/> createuser -U postgres myuser
Shall the new role be a superuser"codetitle">复制代码 代码如下:
dropuser [option...] [username]
1. 命令行选项列表:
选项 说明 -e(--echo) 回显dropuser生成的命令并且把它发送到服务器。 -i(--interactive) 在做任何破坏性动作前提示。 -h(--host=host) 指定PostgreSQL服务器的主机名。 -p(--port=port) 指定服务器的监听端口,如不指定,则为缺省的5432。 -U(--username=username) 本次操作的登录用户名。
2. 应用示例:
复制代码 代码如下:
# 直接删除指定用户。
/> dropuser -e myuser3
DROP ROLE myuser3;
# 在删除指定用户时,该命令会给出提示信息,以免误操作。
/> dropuser -e -i myuser2
Role "myuser2" will be permanently removed.
Are you sure? (y/n) y
DROP ROLE myuser2;
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]