美文网首页
postgresql基本命令使用

postgresql基本命令使用

作者: _火山_ | 来源:发表于2020-10-09 19:19 被阅读0次

    基本命令使用

    psql命令行

    pg的命令行操作与mysql的有很大的差异,进入pg命令行后可以使用?查看pg的操作命令

    查看pg的操作命令
    #首先在linux命令行登录pg,postgres是pg的默认用户
    psql -h localhost -p 5432 -U postgres
    
    #查看有哪些用户
    \dg
    
    #查看有哪些数据库
    \l
    
    #查看有哪些表
    \d
    
    #切换数据库
    \c dnname
    #例如切换为数据库test,则使用命令
    \c test
    
    还有很多的命令可以执行\?查看它们的使用方法和作用
    

    linux命令行

    #基于linux命令行创建postgresql用户,createuser命令用法可通过createuser --help查看
    createuser -h localhost -U postgres -s -P -e test
    
    #基于linux命令行创建数据库,createdb 命令用法可通过createdb --help查看
    createdb  -h localhost  -p 5432 -e -U test Privilege -E UTF-8
    
    #在linux命令行对数据库进行授权
    psql -h localhost -p 5432 -U postgres -c "grant all privileges on database Privilege to rbac"
    
    #基于linux命令行导入sql文件数据到指定数据库,数据库通过-d参数进行指定。
    psql  -h localhost  -p 5432 -U test -d Privilege -f privilege.sql
    
    #指定psql以用户rbac访问数据库Privilege,非postgres用户登录pg需要指定数据库,通过-d参数指定。
    psql  -h localhost -p 5432 -U rbac -d Privilege
    
    ##postgresql报表不存在,原因是我指定的数据库是Privilege,但由于psql默认为大小写不敏感的,所以创建时变成了privilege了,这个库里面没有表存在;而同时还存在一个Privilege,它里面是有表的,所以我一直以为程序访问的是Privilege,但实际上访问的却是privilege,它里面还没有表,创建了表之后就好啦。
    

    脚本封装命令

    由于上述命令在执行过程需要输入密码,如果封装成脚本执行的话,我们是断不应该再与服务器交互的,而应该让脚本自己实现自动交互的功能,自己输入密码。
    我通过expect命令来实现的这个功能,代码如下:
    编写一个自动交互脚本,脚本的命名格式为xxx.exp,即脚本的后缀为.exp,现我创建一个脚本文件为create_pg.exp
    vim create_pg.exp

    #!/usr/bin/expect
    
    #下面这5行是传入的参数,按编号分别为第1到第5个参数
    set user [lindex $argv 0]
    set passwd [lindex $argv 1]
    #这个是pg的默认用户postgres的密码
    set rootpw [lindex $argv 2]
    set host [lindex $argv 3]
    set db [lindex $argv 4]
    
    spawn createuser -h $host -p 5432 -U postgres -s -P -e $user
    
    expect "Enter password for new role: "
    send "$passwd\r"
    expect "Enter it again: "
    send "$passwd\r"
    expect "Password: "
    send "$rootpd\r"
    
    set result [wait result]
    set ret [lindex $result 3]
    #puts $ret
    if {$ret > 0} {
       puts stdout "create user error\n"
       exit 1
    }
    
    spawn createdb -h $host -p 5432 -e -U $user $db -E UTF-8
    expect "Password: "
    send "$passwd\r"
    
    set result [wait result]
    set ret [lindex $result 3]
    #puts $ret
    if {$ret > 0} {
       puts stdout "create db error\n"
       exit 2
    }
    
    spawn psql -h $host -p 5432 -U postgres -c "grant all privileges on database $db to $user"
    expect "Password for user postgres: "
    send "$rootpw\r"
    
    set result [wait result]
    set ret [lindex $result 3]
    #puts $ret
    if {$ret > 0} {
       puts stdout "grant db error\n"
       exit 3
    }
    

    这个脚本通过自动交互的方式可以实现自动创建用户、数据库以及完成授权操作。
    脚本调用方式:

    expect create_pg.exp test 123456 123456 localhost testdb
    

    创建表

    vim create_db.sql

    DROP TABLE IF EXISTS permission;
    
    CREATE TABLE permission (
      id serial,
      name varchar(255) DEFAULT '',
      type varchar(255) DEFAULT '',
      content varchar(255) DEFAULT '',
      setting int DEFAULT '0',
      modify_time timestamp DEFAULT NULL,
      cluster_name varchar(10) DEFAULT NULL,
      wb varchar(1) DEFAULT 'w',
      flag int DEFAULT '0',
      PRIMARY KEY (id)
    ) ;
    
    ALTER TABLE permission OWNER TO rbac;
    
    注:其中serial表示主键id自增,相当于mysql的auto_increament
    

    创建数据表,通过linux命令行方式创建:

    psql  -h localhost  -p 5432 -U test -d Privilege -f create_db.sql
    

    初始化表

    vim init_table.sql

    insert into permission(name,type,content,setting,cluster_name,wb) values('work_hdfs_super','HDFS','/',7,'hdp','w');
    insert into permission(name,type,content,setting,cluster_name,wb) values('yarn_hdfs_super','HDFS','/home/yarn',7,'hdp','w');
    insert into permission(name,type,content,setting,cluster_name,wb) values('yarn_hdfs_super','HDFS','/',7,'hdp','w');
    insert into permission(name,type,content,setting,cluster_name,wb) values('mr_hdfs_super','HDFS','/home/mr',7,'hdp','w');
    insert into permission(name,type,content,setting,cluster_name,wb) values('hbase_hdfs_super','HDFS','/home/hbase',7,'hdp','w');
    insert into permission(name,type,content,setting,cluster_name,wb) values('hive_hdfs_super','HDFS','/home/hive',7,'hdp','w');
    insert into permission(name,type,content,setting,cluster_name,wb) values('hbase_hbase_super','HBASE','/',31,'hdp','w');
    insert into permission(name,type,content,setting,cluster_name,wb) values('ALL_hbase_super','HBASE','/-ROOT-',31,'hdp','w');
    insert into permission(name,type,content,setting,cluster_name,wb) values('ALL_hbase_super','HBASE','/.META.',31,'hdp','w');
    

    通过linux命令行方式初始化pg数据表:

    psql  -h localhost  -p 5432 -U test -d Privilege -f init_table.sql
    

    相关文章

      网友评论

          本文标题:postgresql基本命令使用

          本文链接:https://www.haomeiwen.com/subject/zcfrpktx.html