postgresql基本命令使用

2020-10-09  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读