opengauss教程FG013-openGauss数据库与模式管理
目录大纲
Part01-基础概念与理论知识
1.1 数据库概述
数据库是openGauss中存储数据的容器,了解数据库的概念和管理方法对于数据库的使用和管理至关重要。风哥教程参考opengauss官方文档,数据库具有以下特点:
- 逻辑容器:数据库是存储表、视图、索引等对象的逻辑容器
- 独立空间:每个数据库有自己独立的命名空间和权限体系
- 隔离性:不同数据库之间的数据相互隔离
- 管理单位:数据库是openGauss的基本管理单位
1.2 模式概述
模式是数据库中对象的集合,用于组织和管理数据库对象:
- 命名空间:模式提供了一个命名空间,用于组织数据库对象
- 对象组织:可以将相关的表、视图、函数等组织在一个模式中
- 权限控制:可以对模式设置权限,控制用户对模式中对象的访问
- 多模式支持:一个数据库可以包含多个模式
1.3 数据库与模式的关系
数据库与模式的关系可以理解为:
- 数据库是顶级容器,包含多个模式
- 模式是数据库中的子容器,包含表、视图等对象
- 一个数据库可以有多个模式,一个模式属于一个数据库
- 模式可以跨数据库引用,但通常在同一数据库内使用
风哥提示:合理的数据库和模式规划可以提高数据管理的效率和安全性。
Part02-生产环境规划与建议
2.1 数据库规划
生产环境数据库规划
- 数据库数量:
- 根据业务需求规划数据库数量
- 避免将所有业务数据放在一个数据库中
- 考虑数据隔离和管理的便利性
- 数据库命名:
- 使用有意义的名称
- 遵循统一的命名规范
- 避免使用特殊字符
- 数据库大小:
- 根据数据量估算数据库大小
- 预留足够的空间余量
- 考虑数据增长趋势
2.2 模式规划
生产环境的模式规划建议:
- 模式数量:
- 根据业务模块创建不同的模式
- 将相关的对象组织在同一个模式中
- 避免模式过多导致管理复杂
- 模式命名:
- 使用有意义的名称
- 遵循统一的命名规范
- 可以使用业务模块名称作为模式名
风哥提示:
- 模式权限:
- 根据用户角色设置模式权限
- 限制用户对模式的访问
- 使用角色管理模式权限
2.3 命名规范
生产环境的命名规范建议:
- 数据库命名:
- 使用小写字母
- 使用下划线分隔单词
- 示例:fgedudb、fgedudb_hr、fgedudb_finance
- 模式命名:
- 使用小写字母
- 使用下划线分隔单词
- 示例:public、hr、finance、sales
- 对象命名:
- 学习交流加群风哥微信: itpux-com
- 表名:使用fgedu_前缀,如fgedu_employee
- 索引名:使用idx_前缀,如idx_fgedu_employee_name
- 视图名:使用v_前缀,如v_fgedu_employee
Part03-生产环境项目实施方案
3.1 数据库创建与管理
# 创建数据库
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss
Password for user opengauss:
gsql ((openGauss 5.0.0 build 12345) compiled at 2024-01-01 00:00:00)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type “help” for help.
postgres=# CREATE DATABASE fgedudb WITH OWNER opengauss ENCODING ‘UTF8’ TABLESPACE pg_default;
CREATE DATABASE
postgres=# CREATE DATABASE fgedudb_hr WITH OWNER opengauss ENCODING ‘UTF8’ TABLESPACE fgedu_data_tbs;
CREATE DATABASE
postgres=# CREATE DATABASE fgedudb_finance WITH OWNER opengauss ENCODING ‘UTF8’ TABLESPACE fgedu_data_tbs;
CREATE DATABASE
# 修改数据库
postgres=# ALTER DATABASE fgedudb_hr RENAME TO fgedudb_human_resources;
ALTER DATABASE
# 删除数据库
postgres=# DROP DATABASE IF EXISTS fgedudb_test;
DROP DATABASE
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss
Password for user opengauss:
gsql ((openGauss 5.0.0 build 12345) compiled at 2024-01-01 00:00:00)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type “help” for help.
postgres=# CREATE DATABASE fgedudb WITH OWNER opengauss ENCODING ‘UTF8’ TABLESPACE pg_default;
CREATE DATABASE
postgres=# CREATE DATABASE fgedudb_hr WITH OWNER opengauss ENCODING ‘UTF8’ TABLESPACE fgedu_data_tbs;
CREATE DATABASE
postgres=# CREATE DATABASE fgedudb_finance WITH OWNER opengauss ENCODING ‘UTF8’ TABLESPACE fgedu_data_tbs;
CREATE DATABASE
# 修改数据库
postgres=# ALTER DATABASE fgedudb_hr RENAME TO fgedudb_human_resources;
ALTER DATABASE
# 删除数据库
postgres=# DROP DATABASE IF EXISTS fgedudb_test;
DROP DATABASE
3.2 模式创建与管理
# 连接到数据库
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss
Password for user opengauss:
gsql ((openGauss 5.0.0 build 12345) compiled at 2024-01-01 00:00:00)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type “help” for help.
# 创建模式
学习交流加群风哥QQ113257174
fgedudb=# CREATE SCHEMA hr;
CREATE SCHEMA
fgedudb=# CREATE SCHEMA finance;
CREATE SCHEMA
fgedudb=# CREATE SCHEMA sales;
CREATE SCHEMA
# 修改模式
fgedudb=# ALTER SCHEMA hr RENAME TO human_resources;
ALTER SCHEMA
# 删除模式
fgedudb=# DROP SCHEMA IF EXISTS test CASCADE;
DROP SCHEMA
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss
Password for user opengauss:
gsql ((openGauss 5.0.0 build 12345) compiled at 2024-01-01 00:00:00)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type “help” for help.
# 创建模式
学习交流加群风哥QQ113257174
fgedudb=# CREATE SCHEMA hr;
CREATE SCHEMA
fgedudb=# CREATE SCHEMA finance;
CREATE SCHEMA
fgedudb=# CREATE SCHEMA sales;
CREATE SCHEMA
# 修改模式
fgedudb=# ALTER SCHEMA hr RENAME TO human_resources;
ALTER SCHEMA
# 删除模式
fgedudb=# DROP SCHEMA IF EXISTS test CASCADE;
DROP SCHEMA
3.3 权限管理
# 授予数据库权限
postgres=# GRANT CONNECT ON DATABASE fgedudb TO fgedu;
GRANT
postgres=# GRANT ALL PRIVILEGES ON DATABASE fgedudb TO fgedu_admin;
GRANT
# 授予模式权限
fgedudb=# GRANT USAGE ON SCHEMA hr TO fgedu;
GRANT
fgedudb=# GRANT CREATE ON SCHEMA hr TO fgedu_admin;
GRANT
fgedudb=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA hr TO fgedu;
GRANT
postgres=# GRANT CONNECT ON DATABASE fgedudb TO fgedu;
GRANT
postgres=# GRANT ALL PRIVILEGES ON DATABASE fgedudb TO fgedu_admin;
GRANT
# 授予模式权限
fgedudb=# GRANT USAGE ON SCHEMA hr TO fgedu;
GRANT
fgedudb=# GRANT CREATE ON SCHEMA hr TO fgedu_admin;
GRANT
fgedudb=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA hr TO fgedu;
GRANT
Part04-生产案例与实战讲解
4.1 数据库创建实战
# 查看现有数据库
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “\l”
Password for user opengauss:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
———–+———-+———-+———+——-+———————–
更多视频教程www.fgedu.net.cn
fgedudb | opengauss | UTF8 | C | C |
postgres | opengauss | UTF8 | C | C |
template0 | opengauss | UTF8 | C | C | =c/opengauss +
| | | | | opengauss=CTc/opengauss
template1 | opengauss | UTF8 | C | C | =c/opengauss +
| | | | | opengauss=CTc/opengauss
(4 rows)
# 创建新数据库
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “CREATE DATABASE fgedudb_sales WITH OWNER opengauss ENCODING ‘UTF8’ TABLESPACE fgedu_data_tbs;
“
Password for user opengauss:
CREATE DATABASE
# 验证数据库创建
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “\l”
Password for user opengauss:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
———–+———-+———-+———+——-+———————–
fgedudb | opengauss | UTF8 | C | C |
fgedudb_sales | opengauss | UTF8 | C | C |
postgres | opengauss | UTF8 | C | C |
template0 | opengauss | UTF8 | C | C | =c/opengauss +
| | | | | opengauss=CTc/opengauss
template1 | opengauss | UTF8 | C | C | =c/opengauss +
| | | | | opengauss=CTc/opengauss
(5 rows)
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “\l”
Password for user opengauss:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
———–+———-+———-+———+——-+———————–
更多视频教程www.fgedu.net.cn
fgedudb | opengauss | UTF8 | C | C |
postgres | opengauss | UTF8 | C | C |
template0 | opengauss | UTF8 | C | C | =c/opengauss +
| | | | | opengauss=CTc/opengauss
template1 | opengauss | UTF8 | C | C | =c/opengauss +
| | | | | opengauss=CTc/opengauss
(4 rows)
# 创建新数据库
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “CREATE DATABASE fgedudb_sales WITH OWNER opengauss ENCODING ‘UTF8’ TABLESPACE fgedu_data_tbs;
“
Password for user opengauss:
CREATE DATABASE
# 验证数据库创建
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “\l”
Password for user opengauss:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
———–+———-+———-+———+——-+———————–
fgedudb | opengauss | UTF8 | C | C |
fgedudb_sales | opengauss | UTF8 | C | C |
postgres | opengauss | UTF8 | C | C |
template0 | opengauss | UTF8 | C | C | =c/opengauss +
| | | | | opengauss=CTc/opengauss
template1 | opengauss | UTF8 | C | C | =c/opengauss +
| | | | | opengauss=CTc/opengauss
(5 rows)
4.2 模式管理实战
# 连接到数据库
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss
Password for user opengauss:
gsql ((openGauss 5.0.0 build 12345) compiled at 2024-01-01 00:00:00)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type “help” for help.
# 查看现有模式
fgedudb=# \dn
List of schemas
Name | Owner
—————–+———-
更多学习教程公众号风哥教程itpux_com
blockchain | opengauss
cstore | opengauss
db4ai | opengauss
dbe_perf | opengauss
dbe_pldebugger | opengauss
dbe_pldeveloper | opengauss
information_schema | opengauss
pg_catalog | opengauss
pg_toast | opengauss
public | opengauss
(10 rows)
# 创建新模式
fgedudb=# CREATE SCHEMA hr;
CREATE SCHEMA
fgedudb=# CREATE SCHEMA finance;
CREATE SCHEMA
# 验证模式创建
fgedudb=# \dn
List of schemas
Name | Owner
—————–+———-
blockchain | opengauss
cstore | opengauss
db4ai | opengauss
dbe_perf | opengauss
dbe_pldebugger | opengauss
dbe_pldeveloper | opengauss
finance | opengauss
hr | opengauss
information_schema | opengauss
from DB视频:www.itpux.com
pg_catalog | opengauss
pg_toast | opengauss
public | opengauss
(12 rows)
# 在模式中创建表
fgedudb=# CREATE TABLE hr.fgedu_employee (id serial primary key, name varchar(50), age int, department varchar(50));
CREATE TABLE
fgedudb=# CREATE TABLE finance.fgedu_account (id serial primary key, account_name varchar(50), balance decimal(10,2));
CREATE TABLE
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss
Password for user opengauss:
gsql ((openGauss 5.0.0 build 12345) compiled at 2024-01-01 00:00:00)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type “help” for help.
# 查看现有模式
fgedudb=# \dn
List of schemas
Name | Owner
—————–+———-
更多学习教程公众号风哥教程itpux_com
blockchain | opengauss
cstore | opengauss
db4ai | opengauss
dbe_perf | opengauss
dbe_pldebugger | opengauss
dbe_pldeveloper | opengauss
information_schema | opengauss
pg_catalog | opengauss
pg_toast | opengauss
public | opengauss
(10 rows)
# 创建新模式
fgedudb=# CREATE SCHEMA hr;
CREATE SCHEMA
fgedudb=# CREATE SCHEMA finance;
CREATE SCHEMA
# 验证模式创建
fgedudb=# \dn
List of schemas
Name | Owner
—————–+———-
blockchain | opengauss
cstore | opengauss
db4ai | opengauss
dbe_perf | opengauss
dbe_pldebugger | opengauss
dbe_pldeveloper | opengauss
finance | opengauss
hr | opengauss
information_schema | opengauss
from DB视频:www.itpux.com
pg_catalog | opengauss
pg_toast | opengauss
public | opengauss
(12 rows)
# 在模式中创建表
fgedudb=# CREATE TABLE hr.fgedu_employee (id serial primary key, name varchar(50), age int, department varchar(50));
CREATE TABLE
fgedudb=# CREATE TABLE finance.fgedu_account (id serial primary key, account_name varchar(50), balance decimal(10,2));
CREATE TABLE
4.3 权限管理实战
# 创建用户
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “CREATE USER fgedu_hr WITH PASSWORD ‘Fgedu@123’;
“
Password for user opengauss:
CREATE ROLE
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “CREATE USER fgedu_finance WITH PASSWORD ‘Fgedu@123’;
“
Password for user opengauss:
CREATE ROLE
# 授予数据库权限
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “GRANT CONNECT ON DATABASE fgedudb TO fgedu_hr, fgedu_finance;”
Password for user opengauss:
GRANT
# 授予模式权限
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “GRANT USAGE ON SCHEMA hr TO fgedu_hr;”
Password for user opengauss:
GRANT
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “GRANT USAGE ON SCHEMA finance TO fgedu_finance;”
Password for user opengauss:
GRANT
# 授予表权限
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “GRANT ALL PRIVILEGES ON hr.fgedu_employee TO fgedu_hr;”
Password for user opengauss:
GRANT
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “GRANT ALL PRIVILEGES ON finance.fgedu_account TO fgedu_finance;”
Password for user opengauss:
GRANT
# 测试用户权限
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu_hr -c “INSERT INTO hr.fgedu_employee (name, age, department) VALUES (‘Zhang San’, 30, ‘IT’);
“
Password for user fgedu_hr:
INSERT 0 1
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu_hr -c “SELECT * FROM hr.fgedu_employee;
“
Password for user fgedu_hr:
id | name | age | department
—-+———-+—–+————
1 | Zhang San | 30 | IT
(1 row)
# 测试权限隔离
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu_hr -c “SELECT * FROM finance.fgedu_account;
“
Password for user fgedu_hr:
ERROR: permission denied for relation fgedu_account
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “CREATE USER fgedu_hr WITH PASSWORD ‘Fgedu@123’;
“
Password for user opengauss:
CREATE ROLE
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “CREATE USER fgedu_finance WITH PASSWORD ‘Fgedu@123’;
“
Password for user opengauss:
CREATE ROLE
# 授予数据库权限
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “GRANT CONNECT ON DATABASE fgedudb TO fgedu_hr, fgedu_finance;”
Password for user opengauss:
GRANT
# 授予模式权限
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “GRANT USAGE ON SCHEMA hr TO fgedu_hr;”
Password for user opengauss:
GRANT
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “GRANT USAGE ON SCHEMA finance TO fgedu_finance;”
Password for user opengauss:
GRANT
# 授予表权限
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “GRANT ALL PRIVILEGES ON hr.fgedu_employee TO fgedu_hr;”
Password for user opengauss:
GRANT
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “GRANT ALL PRIVILEGES ON finance.fgedu_account TO fgedu_finance;”
Password for user opengauss:
GRANT
# 测试用户权限
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu_hr -c “INSERT INTO hr.fgedu_employee (name, age, department) VALUES (‘Zhang San’, 30, ‘IT’);
“
Password for user fgedu_hr:
INSERT 0 1
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu_hr -c “SELECT * FROM hr.fgedu_employee;
“
Password for user fgedu_hr:
id | name | age | department
—-+———-+—–+————
1 | Zhang San | 30 | IT
(1 row)
# 测试权限隔离
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu_hr -c “SELECT * FROM finance.fgedu_account;
“
Password for user fgedu_hr:
ERROR: permission denied for relation fgedu_account
Part05-风哥经验总结与分享
5.1 数据库管理最佳实践
- 数据库规划:
- 根据业务需求合理规划数据库数量
- 为每个数据库设置合适的表空间
- 考虑数据库的备份和恢复策略
- 数据库管理:
- 定期检查数据库状态
- 监控数据库空间使用情况
- 优化数据库参数
- 安全管理:
- 为数据库设置合适的权限
- 定期审查用户权限
- 启用审计日志
5.2 模式管理要点
- 模式规划:
- 根据业务模块创建模式
- 将相关的对象组织在同一个模式中
- 使用有意义的模式名称
- 模式管理:
- 定期清理不需要的模式
- 监控模式中的对象
- 合理设置模式权限
- 性能优化:
- 将不同类型的对象放在不同的模式中
- 使用模式来组织大型数据库
- 优化模式级别的权限管理
5.3 常见问题与解决方案
常见数据库与模式问题及解决方法
- 问题1:数据库创建失败
- 症状:创建数据库时提示权限不足或表空间不存在
- 解决方案:确保用户有创建数据库的权限,确保表空间存在
- 问题2:模式访问权限不足
- 症状:用户无法访问模式中的对象
- 解决方案:授予用户模式的USAGE权限和对象的相应权限
- 问题3:数据库空间不足
- 症状:数据库操作时提示空间不足
- 解决方案:扩展表空间,清理无用数据,执行VACUUM操作
- 问题4:模式命名冲突
- 症状:创建模式时提示名称已存在
- 解决方案:使用不同的模式名称,或删除已存在的模式
风哥提示:数据库与模式管理是数据库管理的重要组成部分,合理的数据库和模式规划可以提高数据管理的效率和安全性。在生产环境中,应该建立完善的数据库和模式管理体系,定期审查和优化数据库结构,确保数据库的稳定运行。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
