数据库管理
1、Role
member role:一个role继承其他role的权限,从而成为member role
group role:拥有member role的role
- ###问题:角色不存在
1.1 创建、删除、查询
创建可login role
创建group role
删除role
查询role
\du
1.2 Role属性
一个数据库角色可以有一系列属性,这些属性定义他的权限,以及与客户认证系统的交互。
1. 登录权限:
只有具有LOGIN属性的角色才可以用于数据库连接,具有该属性的角色视为登录用户,创建方法:
CREATE ROLE name LOGIN PASSWORD '123456';
CREATE USER name PASSWORD '123456';
2. 超级用户:
和创建普通用户不同,创建超级用户必须是以超级用户的身份执行以下命令:
CREATE ROLE name SUPERUSER;
3. 创建数据库:
角色要想创建数据库,必须明确赋予创建数据库的属性,见如下命令:
CREATE ROLE name CREATEDB;
4. 创建角色:
一个角色要想创建更多角色,必须明确给予创建角色的属性,见如下命令:
CREATE ROLE name CREATEROLE;
1.3 Role权限
数据库对象在被创建时都会被赋予一个owner,owner就是执行对象创建语句的角色。对于大多数类型的对象,其初始状态是只有owner(或superuser)可以对该对象做任何事情。如果要允许其它用户可以使用该对象,必须赋予适当的权限。Postgresql中预定义了许多不同类型的内置权限,如:SELECT、INSERT、UPDATE、DELETE、RULE、REFERENCES、TRIGGER、CREATE、TEMPORARY、EXECUTE、USAGE。
使用GRANT命令来赋予权限:
其含义为:将tbl_name表的update权限赋予role_0角色。
GRANT UPDATE ON tbl_name TO role_0;
使用REVOKE命令撤销权限:
其含义为:对所有角色(PUBLIC)撤销在tbl_name对象上的所有权限(ALL)。
REVOKE ALL ON tbl_name FROM PUBLIC;
2、DataBase
2.1 创建、删除
创建数据库。
CREATE DATABASE database_name;
drop database database_name;
2.2数据库访问
2.2.1 登录
参数含义如下:-U指定用户,-d指定数据库,-h指定服务器,-p指定端口
psql -U dbuser -d exampledb -h 127.0.0.1 -p 5432
2.2.2 修改数据库默认帐号的密码
以Linux用户"postgres"的身份(此时只有该用户有psql命令)执行psql客户端。如果Postgresql内部存在“dbname”和“username”同名,则dbname可省略(系统用户名、数据库用户名、数据库名都为postgres,故简写)
sudo -u postgres psql
postgres=# alter user postgres with password '123456';
sudo -u postgres psql -d postgres
2.2.3 实战
### 创建一个角色
create user springboot with password '111111';
### 给这个角色创建专属数据库
create database pgdb_test owner springboot;
###### 一、peer authentication Failed for user "springboot"
tu@ddouble:~$ psql -U springboot -d pgdb_test psql: FATAL: Peer authentication Failed for user "springboot"
Open /etc/postgresql/9.5/main/pg_hba.conf with root access sudo nano /etc/postgresql/9.5/main/pg_hba.conf Change peer to md5 in these lines. Before changing # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 peer # IPv6 local connections: host all all ::1/128 peer After your change # "local" is for Unix domain socket connections only local all all md5 # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 Save the file with pressing Ctrl-O. Exit nano with Ctrl-X Restart postgresql using sudo service postgresql restart
2.3 database、 table 、schema 的三者关系
- ### 《Postgresql即学即用》人民邮电-丁奇鹏[译]
schema对database中的table进行逻辑分组管理。
- ### Postgresql模式(架构)亿百教程
schema(架构)是指定的表集合。 它还可以包含视图,索引,序列,数据类型,运算符和函数。
- ### 关系 [ 照我看就是分类,命名的时候省点事 ]
DB之间互相独立,故而DB各自的schema、table也独立
DB下属schema(nums >=1),初始有一个public schema
schema下属“相关table”
2.4 schema管理
2.4.1添加/删除schema
### 添加 | 语法
CREATE SCHEMA schema_name;
### 添加 | 指定拥有的user
CREATE SCHEMA schema_name AUTHORIZATION user_name;
### 添加 | 确保模式被创建
CREATE SCHEMA IF NOT EXISTS schema_name;
### 删除 | 语法
DROP SCHEMA schema_name;
DROP SCHEMA schema_name CASCADE;
2.4.2 schema间对象移动
### 单个对象移动
ALTER TABLE table_name SET SCHEMA another_schema_name;
### 所有对象移动
应用条件:第二模式不存在同名对象。如果存在,则为每个对象执行alter table
ALTER SCHEMA first_schema_name RENAME TO second_schema_name;原文链接:https://www.f2er.com/postgresql/193962.html