### [PostgreSQL学习手册(客户端命令<一>)](http://www.cnblogs.com/stephen-liu74/archive/2012/05/30/2306493.html)
Posted on 2012-05-30 09:02 [Stephen_Liu](http://www.cnblogs.com/stephen-liu74/) 阅读(1496) 评论(1) [编辑](http://www.cnblogs.com/stephen-liu74/admin/EditPosts.aspx?postid=2306493) [收藏](http://www.cnblogs.com/stephen-liu74/archive/2012/05/30/2306493.html#) ![](https://box.kancloud.cn/2015-10-30_5632e1c33431d.jpg)
**零、口令文件:
****
**在给出其它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? (y/n)* **n***
Shall the new role be allowed to create databases? (y/n)* **y***
Shall the new role be allowed to create more new roles? (y/n)* **n***
CREATE ROLE myuser NOSUPERUSER CREATEDB NOCREATEROLE INHERIT LOGIN;
* # 通过psql登录后查看系统视图,以验证该用户是否成功创建,以及新角色的权限是否正确。*
* /> psql*
* postgres=# SELECT rolname,rolsuper,rolinherit,rolcreaterole,rolcreatedb,rolcanlogin FROM pg_roles WHERE rolname = 'myuser';*
rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin
---------+----------+------------+---------------+-------------+-------------
myuser | f | t | f | t | t
(1 row)
* # 为了保证自动化脚本不会被该命令的提示挂起,我们需要在执行该命令时指定所有没有缺省值的选项。*
* /> createuser -U postgres -e -S -D -R myuser2*
CREATE ROLE myuser2 NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;
* # 我们可以在创建用户时即刻指定该用户的密码,该操作由-P选项完成,然而这样的用法一定会挂起自动化脚本,*
* # 因此我们可以采用一种折中的办法,即在创建用户时不指定密码,在自动化脚本执行成功后再手工该用户的密码。*
* /> createuser -P -s -e myuser3*
Enter password for new role:
Enter it again:
CREATE ROLE myuser3 PASSWORD 'md5fe54c4f3129f2a766f53e4f4c9d2a698' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;
**六、dropuser:**
删除一个PostgreSQL用户帐户,需要说明的是只有超级用户或带有CREATEROLE权限的用户可以执行该命令,如果要删除超级用户,只能通过超级用户的身份执行该命令。该命令的使用方式如下:
dropuser [option...] [username]
1. 命令行选项列表:
| 选项 | 说明 |
|-----|-----|
| -e(--echo) | 回显dropuser生成的命令并且把它发送到服务器。 |
| -i(--interactive) | 在做任何破坏性动作前提示。 |
| -h(--host=host) | 指定PostgreSQL服务器的主机名。 |
| -p(--port=port) | 指定服务器的监听端口,如不指定,则为缺省的5432。 |
| -U(--username=username) | 本次操作的登录用户名。 |
| -w(--no-password) | 如果当前登录用户没有密码,可以指定该选项直接登录。 |
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;
分类: [PostgreSQL](http://www.cnblogs.com/stephen-liu74/category/343171.html)
- 数据表
- 模式Schema
- 表的继承和分区
- 常用数据类型
- 函数和操作符-一
- 函数和操作符-二
- 函数和操作符-三
- 索引
- 事物隔离
- 性能提升技巧
- 服务器配置
- 角色和权限
- 数据库管理
- 数据库维护
- 系统表
- 系统视图
- SQL语言函数
- PL-pgSQL过程语言
- PostgreSQL 序列(SEQUENCE)
- PostgreSQL的时间-日期函数使用
- PostgreSQL 查看数据库,索引,表,表空间大小
- 用以查询某表的详细 包含表字段的注释信息
- PostgreSQL 系统表查看系统信息
- postgre存储过程简单实用方法
- PostgreSQL实用日常维护SQL
- PostgreSQL的时间函数使用整理
- 命令
- pg_ctl控制服务器
- initdb 初始化数据库簇
- createdb创建数据库
- dropdb 删除数据库
- createuser创建用户
- dropuser 删除用户
- psql交互式工具
- psql命令手册
- pg_dump 数据库转储
- pg_restore恢复数据库
- vacuumdb 清理优化数据库
- reindexdb 数据库重创索引
- createlang 安装过程语言
- droplang 删除过程语言
- pg_upgrade 升级数据库簇
- 调试存储过程
- 客户端命令-一
- 客户端命令-二
- 使用技巧
- PostgreSQL删除重复数据
- postgresql 小技巧
- PostgreSQL的10进制与16进制互转
- PostgreSQL的汉字转拼音
- Postgres重复数据的更新一例
- PostgreSQL使用with一例
- PostgreSQL在函数内返回returning
- PostgreSQL中的group_concat使用
- PostgreSQL数据库切割和组合字段函数
- postgresql重复数据的删除
- PostgreSQL的递归查询(with recursive)
- PostgreSQL函数如何返回数据集
- PostgreSQL分区表(Table Partitioning)应用 - David_Tang - 博客园
- PostgreSQL: function 返回结果集多列和单列的例子
- 利用pgAgent创建定时任务
- 浅谈 PostgreSQL 类型转换类似Oracle
- postgresql在windows(包括win7)下的安装配置
- PostgreSQL简介、安装、用户管理、启动关闭、创建删除数据库 (2010-11-08 12-52-51)转载▼标签: 杂谈分类: PostgreSQL
- PostgreSQL的generate_series函数应用
- PostgreSQL 8.3.1 全文检索(Full Text Search)
- postgresql record 使用
- 备份恢复
- PostgreSQL基于时间点恢复(PITR)
- Postgresql基于时间点恢复PITR案例(二)
- Postgres逻辑备份脚本
- Postgres invalid command \N数据恢复处理