文档章节

PostgreSQL学习手册(客户端命令Ⅰ)

Junn
 Junn
发布于 2016/01/07 10:52
字数 2731
阅读 36
收藏 0
点赞 0
评论 0

零、口令文件:

    
在 给出其它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) 不显示响应。
-ttable[(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. 命令行选项列表:

选项 说明
-cnumber 设置新创建用户的最大连接数,缺省为没有限制。
-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;

本文转载自:http://www.cnblogs.com/stephen-liu74/archive/2011/12/29/2306493.html

共有 人打赏支持
Junn
粉丝 145
博文 412
码字总数 288918
作品 0
海淀
高级程序员
PostgreSQL连接和认证选项

Linux下面经常用到psql命令。 切换Linux系统账号到root账号。 该账号下即可输入psql命令。演示代码如下 psql帮助信息如下 PostgreSQL默认不允许非本机连接,非本机连接数据库服务器需要修改p...

白豆腐徐长卿
2017/11/06
0
0
Ubuntu 12.04下PostgreSQL-9.1安装与配置详解(在线安装)

说明: 我是用root用户在终端登陆的,如果是非root用户,那在命令前需要加上"sudo",你懂的... 第一步:在Ubuntu下安装Postgresql 1.使用 apt-get install安装 root@server2-virtual-machine...

今幕明
2015/03/17
0
0
Oracle DBA 增值 PostgreSQL,Greenplum 学习计划

标签 PostgreSQL , Oracle , Greenplum 背景 去O很大程度上是国家层面的战略考虑,比如斯诺登事件,最近贸易战的“中兴”事件,使得去O成为一个不可不做的事情。 但是去O喊了若干年,并没有真...

德哥
05/06
0
0
记一次在 Linux 上创建 Django 应用的过程

0 环境与目标 0.1 环境 服务器端 操作系统: Ubuntu 14.04.2 LTS 运行时: Python 3.4.0 客户机端 浏览器: Firefox 37.0.1 数据库客户端: Navicat Premium 11.1.10 0.2 目标 在服务器端开始...

辛木
2015/04/06
0
0
PostgreSQL入门篇学习笔记(一)

PostgreSQL最强大的开源数据库,以前一直以为是mysql。可谓无知者,无畏也。井底之娃,一个八线城市的python运维dba的悲哀。 以下把PostgreSQL简称为pg。 1,pg是唯一能做到数据零丢失的开源...

落叶刀
2015/11/21
0
0
PostgreSQL 数据库初体验

高强,“DBA+济南群”联合发起人。现就职于山东华鲁科技发展股份有限公司。擅长Oracle、AIX、Linux、PostgreSQL和DB2等产品的实施、运维和故障处理。曾是一名存储工程师,负责实施存储、双机...

高强
2015/10/15
0
0
用Eclipse追PostgreSQL源码

本篇主要讲述了怎么用Eclipse追PostgreSQL源码的过程。使用的Eclipse版本是Juno Service Release 2,PG的版本是postgresql 9.2.2。 首先第一步就是要安装编译好的PostgreSQL(见Eclipse编译P...

Triangle23
2013/03/20
0
0
初识Postgresql和Sqoop

1 在CentOS 6.4上安装PostgreSql 9.3 1.1 用yum安装PostgreSql Server: CentOS 6.4用yum默认安装的PostgreSql版本是8.x,比目前最新的9.3差了一代,需要更新yum repository之后,才能用y...

smile_zjw
2013/12/01
0
0
postgresql常见命令及操作

  pgsql已经更新到beta11了不同版本的服务器启动或相关命令、配置可能会有不同所以得根据pg版本进行操作。下面记录一些工作中常用到的一些操作主要包括服务启动、备份/恢复数据、数据目录迁...

zhoujie0111
06/02
0
0
查看Postgresql的连接状况

今天遇到一个问题,就是pg一直报错,说有太多的客户端连接到数据库上面。但现在不知道是什么程序连接。pg默认的max_connection是100,我并没有修改过,以为平时公司内部用,应该够了,但现在...

CLLam
2013/06/17
0
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

17.TCP:传输控制协议

介绍 TCP和UDP使用同一网络层(IP),但TCP提供了面向连接、可靠的传输层服务 TCP传输给IP层的信息单位称为报文段或段 TCP通过如下方式保证可靠性: 应用数据被分割成TCP认为最合适发送的数据...

loda0128
11分钟前
0
0
重装Oracle时出现environment variable "PATH"错误的解决办法

在win7 64位下重新安装oracle 11g,一直报environment variable "PATH"的错误,按说明将path里多余的路径删除,但没办法解决。选择忽略错误继续安装,装一半会报CRC错误,还是安装失败。最好...

良言
16分钟前
0
0
TensorFlow 全连接的mnist

全连接的mnist import tensorflow as tf# 导入 MINST 数据集from tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets("MNIST_data/", one_ho......

阿豪boy
17分钟前
0
0
JAVA 三种WebService 规范

JAVA 中共有三种WebService 规范,分别是JAX-WS(JAX-RPC)、JAXM&SAAJ、JAX-RS。 1. Jaxws(掌握) JAX-WS 的全称为 Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务...

onedotdot
36分钟前
0
0
将博客搬至CSDN

将博客搬至CSDN

xpbob
37分钟前
1
0
Aidl进程间通信详细介绍

目录介绍 1.问题答疑 2.Aidl相关属性介绍 2.1 AIDL所支持的数据类型 2.2 服务端和客户端 2.3 AIDL的基本概念 3.实际开发中案例操作 3.1 aidl通信业务需求 3.2 操作步骤伪代码 3.3 服务端操作...

潇湘剑雨
54分钟前
0
0
python爬虫日志(3)下载图片

import urlliburl='https://xxx.jpg'#图片地址res=urllib.request.urlopen(url)#此函数用于对url的访问data=res.read() #字节流with open(r'D:\1.jpg',"wb") as code: c...

茫羽行
今天
0
0
vue中$emit的用法

1、父组件可以使用 props 把数据传给子组件。 2、子组件可以使用 $emit 触发父组件的自定义事件。 vm.$emit( event, arg ) //触发当前实例上的事件 vm.$on( event, fn );//监听event事件后运...

JamesView
今天
0
0
bash审计系统搭建

step1:使用saltstack工具bash部署>>>>>> # salt -N clienta state.sls audit step2:安装elasticsearch>>>>>> 注意: 1.不能以root用户进行启动,需要创建用户,并对解压的elasticsearch目录赋......

硅谷课堂
今天
0
0
Linux sar性能分析

Linux使用sar进行性能分析 sar简介 sar命令常用格式 sar常用性能数据分析 整体CPU使用统计-u 各个CPU使用统计-P 内存使用情况统计-r 整体IO情况-b 各个IO设备情况-d 网络统计-n sar日志保存-...

易野
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部