1、创建用户与授权流程

TBase的层级关系为:

Database => Schema => Table

1.如开发商需要一个独立的环境,开发商需要在这个独立的环境进行任何操作

创建用户设置密码:
Create role username with password ‘密码’;

设置用户可以登录数据库:
Alter role username login;

设置该用户的连接数:
Alter role 用户名 connection limit 连接数;
alter role jdsk connection limit 500;

(可选)创建独立的schema:
Create schema schema_name;

(可选)将scheme的拥有者设置为用户
Alter schema schema_name owner to username;

授权所有权限
grant all on SCHEMA wsx_schema to wangshx;
grant all on all tables in schema schema_name to user_name;

2.需要给厂商授权表的权限。

首先我们需要知道这个表是哪个库(database)下面的,哪个模式(schema)下面的。

比如:
Database:postgres
Schema:public
Table:test

需要授权的用户:test_user
Grant usage on schema public to test_user;
Grant select on public.test to test_user;

授权模式下的所有表:scheme_name(模式的名字)
grant select on all tables in schema schema_name to 用户;

授权模式给某一用户
grant usage on schema schema_name to 用户;

授权模式下的表给用户
grant select on 模式名.表名 to 用户; 
grant select on 表名 to 用户;
这里select可以是你需要添加的任何权限

例如:schema:sk_XXX,用户名:sk_XXX_user
Create schema sk_XXX;
Create role sk_XXX_user with password ‘sk@XXX;

2、 获取用户下所有对象

select
nsp.nspname as SchemaName
,cls.relname as ObjectName
,rol.rolname as ObjectOwner
,case cls.relkind
when 'r' then 'TABLE'
when 'm' then 'MATERIALIZED_VIEW'
when 'i' then 'INDEX'
when 'S' then 'SEQUENCE'
when 'v' then 'VIEW'
when 'c' then 'TYPE'
else cls.relkind::text
end as ObjectType
from pg_class cls
join pg_roles rol
on rol.oid = cls.relowner
join pg_namespace nsp
on nsp.oid = cls.relnamespace
where nsp.nspname not in ('information_schema', 'pg_catalog')
and nsp.nspname not like 'pg_toast%'
and rol.rolname = 'postgres'
order by nsp.nspname, cls.relname;

效果:

image-20220906102415142

3、postgresql设置开机启动

1、打开源码找到./contrib/start-scripts/linux文件

2、复制linux文件到/etc/init.d文件夹下

cp {源码路径}/contrib/start-scripts/linux /etc/init.d

3、修改文件名为postgresql

mv /etc/init.d/linux /etc/init.d/postgresql

4、修改postgresql文件配置

  vim /etc/init.d/postgresql

    prefix设置为你的安装路径

    PGUSER设置为操作postgreSQL的用户(默认为postgres)

    PGLOG是日志路径

      注:如果设置的日志路径没有server.log,需要手动创建此文档

image-20220910152611544

5、给postgresql分配执行权限

chmod a+x /etc/init.d/postgresql

6、添加开机启动

chkconfig –add postgresql

7、重启服务器验证设置是否成功

reboot

8、查询服务启动是否正常 systemctl status postgresql

4、postgresql导入数据库脚本文件

psql -1 -f支持在一个事务中的脚本,要么所有sql执行成功,要么所有sql执行失败,文件所有sql回滚

--编写脚本文件

[postgres@localhost ~]$ cat test_2.sql
create table test_2(id int4);
insert into test_2 values (1);
insert into test_2 values (2);
insert into test_2 values (3);
insert into test_2 values (4);

导入数据(也可以指定库,用户),加上参数q之后可以不在显示具体信息

[postgres@localhost ~]$ psql -f test_2.sql
CREATE TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1

或者

[postgres@localhost ~]$ psql -q -f test_2.sql

psql -1 -f支持在一个事务中的脚本,要么所有sql执行成功,要么所有sql执行失败,文件所有sql回滚

img img

通过-v参数传递变量

–编写test_2.sql脚本

[postgres@localhost ~]$ cat test_2.sql
select * from test_2 where id=:v_id;
通过-v传递参数
[postgres@localhost ~]$ psql -v v_id=1 -f test_2.sql
id
----
1
(1 row)

5、通过配置.psqlrc文件,定制日常维护脚本

编辑cat ~/.psqlrc文件

添加脚本

[postgres@localhost ~]$ cat ~/.psqlrc
\set active_session ' select pid,usename,datname,query,client_addr from pg_stat_activity where pid <> pg_backend_pid() and state=\'active\' order by query;'

使用方法:冒号后面接变量名

postgres=# :active_session
 pid | usename | datname | query | client_addr
-----+---------+---------+-------+-------------
(0 rows)

查询等待事件脚本

[postgres@localhost ~]$ cat ~/.psqlrc
\set active_session ' select pid,usename,datname,query,client_addr from pg_stat_activity where pid <> pg_backend_pid() and state=\'active\' order by query;'
\set wait_event 'select pid,usename,datname,query,client_addr,wait_event_type,wait_event_type from pg_stat_activity where pid <> pg_backend_pid() and wait_event_type is not null order by wait_event_type;'

img