零、口令文件:
在给出其它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-Upostgres-Omyuser-Dmy_tablespace-emydatabase
CREATE DATABASE mydatabase OWNER myuser TABLESPACE my_tablespace;
#5. 重新登录,通过查询系统表查看该数据库是否创建成功,以及表空间和所有者是否一致。
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. 命令行选项列表:
-i(--interactive) | 在做任何破坏性动作前提示。 | |||||||||||||||||||||||||||||||||||||||||||||||||
-q(--quiet) | 不显示响应。 | |||||||||||||||||||||||||||||||||||||||||||||||||
指定服务器的监听端口,如不指定,则为缺省的5432。 | ||||||||||||||||||||||||||||||||||||||||||||||||||
本次操作的登录用户名。 | ||||||||||||||||||||||||||||||||||||||||||||||||||
#以postgres的身份连接服务器,删除mydatabase数据库。 /> dropdb-Upostgres-emydatabase 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] -a(-all) |
重建整个数据库的索引。 | |||||||||||||||||||||||||||||||||||||||||||||||||
回显reindexdb生成的命令并且把它发送到服务器。 | ||||||||||||||||||||||||||||||||||||||||||||||||||
-i(--index=index) | 仅重建指定的索引。 | |||||||||||||||||||||||||||||||||||||||||||||||||
-q(--quiet) | -s(--system) | 重建数据库系统表的索引。 | ||||||||||||||||||||||||||||||||||||||||||||||||
-t(--table=table) | 仅重建指定数据表的索引。 | |||||||||||||||||||||||||||||||||||||||||||||||||
-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. 命令行选项列表:
|