Bootstrap

postgresql linux 命令,postgresql基本命令使用

基本命令使用

psql命令行

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

c4ef1e70f0ff

查看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

;