openGauss数据库的使用

前言

openGauss数据库系统架构
在这里插入图片描述

1. 启动/停止/重启数据库

(1)极简版启动/停止/重启命令
启动数据库实例
gs_ctl start -D $GAUSSHOME/data/single_node -Z single_node

停止数据库实例
gs_ctl stop -D $GAUSSHOME/data/single_node -Z single_node

重启数据库实例
gs_ctl restart -D $GAUSSHOME/data/single_node -Z single_node
(2)企业版启动/停止/重启命令
启动数据库实例
gs_om -t start
或者是
gs_ctl start -D /opt/huawei/install/data/dn

停止数据库实例
gs_om -t stop
或者是
gs_ctl stop -D /opt/huawei/install/data/dn

重启数据库实例
gs_om -t restart
或者是
gs_om -t stop && gs_om -t start

查看数据库实例状态
gs_om -t status
或者是
gs_ctl status -D /opt/huawei/install/data/dn

2. 登录数据库

以初始化安装用户登录数据库,不需要输入密码
gsql -d postgres -p 5432

以初始化安装用户登录数据库,不需要输入密码,并且进入之后可编辑操作语句
gsql -d postgres -p 5432 -r

以创建的用户(jamy)登录数据库,需要输入密码
gsql -d test -p 5432 -U jamy

以创建的用户(jamy)登录数据库,需要输入密码,并且进入之后可编辑操作语句
gsql -d test -p 5432 -U jamy -r

直接非交互模式登录数据库并执行sql,执行完sql立即退出
gsql -d test -U jamy -W "Sjm214325*" -r -c "insert into song.tb_user values(6, 'andy',32);"
gsql -d test -U jamy -W "Sjm214325*" -r -c "select * from song.tb_user;"

在这里插入图片描述

(1)登录数据库时的基本连接参数

在这里插入图片描述

(2)登录数据库时的常用连接参数

在这里插入图片描述

(3)登录数据库时的其他连接参数

在这里插入图片描述

3. 数据库元命令

(1)登录之后可以输入下面这些命令操作数据库:
在这里插入图片描述

(2)操作案例

查询所有数据库的信息,包括数据库的名称,属主,字符集编码以及使用权限
\l

在这里插入图片描述

查询出所有可用的表空间
\db

在这里插入图片描述

列出所有的数据库角色
\du

在这里插入图片描述

列出所有的索引
\di

待更新

列出所有的序列
\ds

待更新

列出具体表的详细信息
\d tableName

在这里插入图片描述

列出所有的函数
\df

待更新

显示每条sql语句的执行时间
\timing  sql

待更新

从文件FILE中读取内容,并将其当作输入,执行查询
\i file.sql

待更新

查看gsql 的帮助命令(元命令,其实就是一些查询sql的别名,这样执行非常方便!!!)
\?

在这里插入图片描述

查询当前连接的数据库的信息
\conninfo

在这里插入图片描述

列出当前search_path中模式下所有的表、视图和序列
\d

在这里插入图片描述

列出所有的模式(名称空间)
\dn

在这里插入图片描述

列出数据库中的表
\dt

在这里插入图片描述

列出所有的视图
\dv

待更新

列出权限信息
\dp

在这里插入图片描述

列出索引的详细信息
\d Indexname

待更新

列出函数的定义
\sf

待更新

把字符串写到标准输出
\echo [string]

待更新

执行操作系统命令
\! os_command

待更新

查看SQL语法帮助
\h

在这里插入图片描述

更换连接的数据库和用户
\c  数据库名
例如:\c  test

在这里插入图片描述

退出gsql
\q

在这里插入图片描述

4. 数据库常用操作语句

(1)数据库操作
创建数据库示例1:
create database mydb;

创建数据库示例2:
create database mydb with owner=jack encoding='UTF-8' LC_COLLATE='zh_CN.UTF-8' LC_CTYPE='zh_CN.UTF-8'
DBCOMPATIBILITY='A' TABLESPACE=tbs1 CONNECTION LIMIT=1000;

修改数据库名称
alter database mydb rename to mydb2;

修改数据库所有者
alter database mydb2 owner to user1;

修改数据库的表空间
alter database mydb2 set tablespace tbs1;

删除数据库
drop database mydb2;

查询数据库
select * from pg_database;

在这里插入图片描述
在这里插入图片描述

(2)表空间操作
创建表空间示例1:
create tablespace tbs2 relative location 'tablespace/tbs2' maxsize '100G';

创建表空间示例2:
create tablespace tbs3 owner jack location '/gauss/data/tbs3';

查询表空间
select * from pg_tablespace_location((select oid from pg_tablespace where spcname='tbs2'));
select oid,* from pg_tablespace;

修改表空间名称
alter tablespace tbs3 rename to tbs4;

修改表空间所有者
alter tablespace tbs4 owner to jack;

修改表空间大小
alter tablespace tbs4 resize maxsize unlimited;

重置表空间分页
alter tablespace tbs4 reset (random_page_cost);

删除表空间(删除表空间的前提条件是该表空间内容为空)
drop tablespace tbs4;

(3)表模式操作

这里模式,它是针对数据库而言的,如果把数据库看做成一个班级,那么模式就相当于这个班级里面的小组,大家都知道,一个班级里面会有多个小组,所以同理一个数据库里面也会有多个模式,同名的模式只能有一个,一个数据库里面的表可以分布在不同的模式里面,但是一个表只能同时存在于一个模式里面,通俗来说一个班级里面的学生,他只能在一个组里面,不可能同时横跨两个组。我们在查询一个表时,它会按照模式的搜索顺序来查询,第一个模式里面如果没找到,会接着到第二个模式里面找,依次类推。

创建模式示例1:
create schema sch1;

创建模式示例2:
create schema sch2 authorization jack;

修改模式名称
alter schema sch2 rename to sch3;

修改模式所有者
alter schema sch1 owner to jack;

删除模式
drop schema sch3;

修改模式查询的范围(当前会话有效,临时有效)
set  search_path to  public,song;

修改数据库里面的模式的访问顺序(搜索路径)
alter database 数据库名 set  search_path=模式1,模式2,模式3...;
例如:
alter database test  set search_path=ming,jamysong,song;
查询表的时候会按照我们设置的顺序去找到表,如果所有模式都查询了一遍,还没找到这个表,那么说名这个表不存在或者不在当前这个数据库。

注意:
a. 不建议创建以PG_为前缀的schema名,该类的schema是为数据库系统预留的
b. 搜索路径(search_path)始终以pg_temp和pg_catalog这两个schema作为搜索路径顺序中的前两位

(4)创建表
创建表示例1:
create table emp1 as select * from emp where sal<2000;

创建表示例2:
create table emp2 as table emp;

创建表示例3:
CREATE TABLE IF NOT EXISTS warehouse_t1 -- 表不存在时才创建,使得当该表存在时该建表语句不会报错
(
W_WAREHOUSE_SK INTEGER NOT NULL,
W_WAREHOUSE_ID CHAR(16) NOT NULL,
W_WAREHOUSE_NAME VARCHAR(20) UNIQUE DEFERRABLE, -- 事务结束时检查字段是否有重复
W_STREET_NAME VARCHAR(60) DICTIONARY, -- 压缩算法Dictionary
W_SUITE_NUMBER CHAR(10) ,
W_STATE CHAR(2) DEFAULT 'GA', -- 缺省值为'GA'
W_GMT_OFFSET DECIMAL(5,2)
) TABLESPACE tbs1;

创建表示例4:
CREATE UNLOGGED TABLE warehouse_t2 -- 不写入预写日志
(
W_WAREHOUSE_SK INTEGER PRIMARY KEY, -- 主键约束
W_WAREHOUSE_ID CHAR(16) NOT NULL, -- 非空约束
W_WAREHOUSE_NAME VARCHAR(20) UNIQUE, -- 唯一键约束
W_GMT_OFFSET DECIMAL(5,2) ,
CONSTRAINT W_CONSTR_KEY2 CHECK(W_WAREHOUSE_SK > 0 AND W_WAREHOUSE_NAME IS NOT NULL) -- 检查列约束
) WITH(fillfactor=70);

创建表示例5(创建临时表):
CREATE TEMPORARY TABLE warehouse_t3 -- 创建临时表(临时表不能指定schema)
(
W_WAREHOUSE_SK INTEGER NOT NULL,
W_WAREHOUSE_ID CHAR(16) NOT NULL,
PRIMARY KEY(W_WAREHOUSE_SK) -- 主键约束
) ON COMMIT DELETE ROWS;

创建表示例6:
CREATE TABLE warehouse_t4
(
W_WAREHOUSE_SK INTEGER NOT NULL,
W_WAREHOUSE_ID CHAR(16) NOT NULL,
W_WAREHOUSE_NAME VARCHAR(20) UNIQUE USING INDEX TABLESPACE tbs1, -- 指定该列索引存储的表空间
CONSTRAINT W_CSTR_KEY1 PRIMARY KEY(W_WAREHOUSE_SK, W_WAREHOUSE_ID) -- 复合主键约束W_CSTR_KEY1
) COMPRESS;

创建表示例7:
CREATE TABLE warehouse_t5
(
W_WAREHOUSE_SK INTEGER PRIMARY KEY CHECK (W_WAREHOUSE_SK > 0), -- 检查列约束
W_WAREHOUSE_ID CHAR(16) NOT NULL,
W_WAREHOUSE_NAME VARCHAR(20) CHECK (W_WAREHOUSE_NAME IS NOT NULL), -- 检查列约束
W_GMT_OFFSET DECIMAL(5,2) REFERENCES DEPT(DEPTNO) -- 外键约束
);

创建表示例8:
CREATE TABLE warehouse_t6
(
W_WAREHOUSE_SK INTEGER NOT NULL,
W_WAREHOUSE_ID CHAR(16) NOT NULL,
W_WAREHOUSE_NAME VARCHAR(20) ,
W_GMT_OFFSET DECIMAL(5,2),
PARTIAL CLUSTER KEY(W_WAREHOUSE_SK, W_WAREHOUSE_ID) -- 局部聚簇存储
) WITH (ORIENTATION = COLUMN, COMPRESSION=HIGH); -- 带有压缩特性的列存储表(列存储表不支持约束)

修改列属性
alter table emp1 modify sal number(10,2); 

重命名列
alter table emp1 rename column ename to name; 
(5)创建约束
添加主键约束
alter table emp1 add primary key (empno); 

添加check约束
alter table emp1 add constraint chk_dept check (deptno is not null); 

添加外键约束
alter table emp1 add constraint fk_dept foreign key (deptno) references dept(deptno); 

修改列约束条件
alter table emp1 modify sal constraint chk_sal not null; 

重命名约束
alter table emp1 rename constraint chk_dept to chk_deptno; 

设置所属schema
alter table emp1 set schema jack; 

重命名表
alter table jack.emp1 rename to emp2; 

行级访问控制的目的是控制表中行级数据可见性,行访问控制策略针对特定数据库用户、特定SQL操作生效。
create user alice password 'gauss@123';
create table all_data(id int, role varchar(100), data varchar(100));
insert into all_data values(1, 'alice', 'alice data');
insert into all_data values(2, 'bob', 'bob data' );
insert into all_data values(3, 'peter', 'peter data');
grant select on all_data to alice;
alter table all_data enable row level security;
create row level security policy all_data_rls on all_data using(role = current_user);
\c - alice
select * from all_data; -- 仅能看到指定用户的数据,系统管理员不受行访问控制影响
explain select * from public.all_data;
(6)创建索引
创建唯一索引
create unique index t1_fn_idx on t1(relfilenode); 

 创建复合索引
create index t1_owner_tbs_idx on t1(relowner,reltablespace);

创建部分索引
create index t1_lttbs_idx on t1(reltablespace) where reltablespace<20; 

创建函数索引
create index t1_upname_idx on t1(upper(relname)); 

创建分区表的本地索引
create index pt1_id_idx on pt1(id) local; 

创建分区表的全局索引
create index pt1_score_idx on pt1(score) global tablespace tbs1; 

修改索引
alter index t1_fn_idx rename to t1_fn_idx2;
alter index t1_fn_idx2 set tablespace tbs2;
alter index t1_lttbs_idx unusable;
alter index t1_lttbs_idx rebuild;

修改分区索引
alter index pt1_id_idx rebuild partition p1_id_idx;
alter index pt1_id_idx modify partition p1_id_idx unusable;
alter index pt1_id_idx rename partition p1_id_idx to p1_id_idx2;
alter index pt1_id_idx move partition p1_id_idx2 tablespace tbs1;

删除索引
drop index t1_lttbs_idx;

在这里插入图片描述

(7)创建序列
创建序列
create sequence seq01;
create sequence seq02 increment by 1 minvalue 1 maxvalue 99999 cache 1 nocycle;

查看序列
\d t2_id_seq
select * from t2_id_seq;

使用序列
select nextval('seq01');  --递增序列并返回新值
select seq01.nextval;
select currval('seq01');  --最近一次nextval返回的值
select seq01.currval;
select lastval();  --最近一次nextval返回的值
select setval('seq01',1);  --设置序列的当前数值

修改序列属性
alter sequence seq01 maxvalue 99999;
alter sequence seq01 owner to jack;

删除序列
drop sequence seq01;
drop sequence seq02 cascade;

在这里插入图片描述

(8)查询表数据

待更新

(9)插入表数据

待更新

(10)修改表数据

待更新

(11)删除表数据

待更新

5. 数据库权限管理

(1)用户

在这里插入图片描述

创建用户示例1(普通用户):
create user jamy2 identified by 'Abc123456*';

授予用户所有权限(将sysadmin权限赋予指定的角色或者用户)
grant all privileges to jamy2;

在这里插入图片描述

将角色或用户的权限授权给其他角色或用户
grant jamy to jamy5 with admin option;

在这里插入图片描述

创建用户示例2(直接创建带有管理员权限的用户):
create user jamy3 with sysadmin password 'Abc123456*';

在这里插入图片描述

创建用户示例3(普通用户)
create user jamy4 identified by 'Abc123456*';

修改用户权限
alter user jamy4 with CREATEDB;

在这里插入图片描述

创建用户示例4(直接创建带有创建数据库权限的用户)
create role jamy5 with CREATEDB password "Abc123456*";

在这里插入图片描述

创建用户示例5(创建用户带有限制条件:有效期、连接数):
create user jamy6 with VALID BEGIN '2022-11-30 23:59:59' VALID UNTIL '2023-12-01 00:00:00' identified
by 'Abc123456*' CONNECTION LIMIT 100;

在这里插入图片描述

修改用户权限,拥有创建角色的权限
alter user jamy4 with CREATEROLE;

在这里插入图片描述

删除用户
drop user jamy4;

在这里插入图片描述

(2)授权
数据库授权
grant all privileges on database mydb to jamy3;

表空间授权
grant all privileges on tablespace tbs1 to jamy3;

schema授权
grant usage on schema sch1 to jamy3;

函数授权
grant execute on function func_add_sql(int,int) to jamy3;
grant execute on function proc_emp(var_empno int, OUT v_name varchar, OUT v_job varchar) to jamy3;

表授权
grant select (empno,ename,sal),update (comm) on emp TO jamy3;
grant select,insert,update,delete on all tables in schema sch1 to jamy3;
grant all privileges on emp to jamy3 with grant option;

授权jack角色给jamy1用户,且jamy1用户可授权其他用户
grant jack to jamy1 with admin option;
将管理员权限授予给用户jamy
grant all privileges to jamy;

权限回收
revoke jack from jamy1;

6. 图形化客户端

(1)Data Studio客户端

Data Studio是华为openGauss数据库连接的官方图形化客户端,登录只需要做如下两步步操作即可:
(1)编辑postgresql.conf文件

将listen_addresses这一行修改成:
listen_addresses = '*'

(2)编辑pg_hba.conf文件

在# IPv4 local connections这一行下面添加如下内容
host    all    all    0.0.0.0/0            sha256

注意:完成以上两步需要重启数据库
在这里插入图片描述
在这里插入图片描述

(2)navicat客户端

要想使用navicat登录openGauss数据库,需要做如下三步操作
(1)编辑postgresql.conf文件

将listen_addresses这一行修改成:
listen_addresses = '*'
将password_encryption_type这一行修改成:
password_encryption_type = 1

(2)编辑pg_hba.conf文件

在# IPv4 local connections这一行下面添加如下内容
host    all    all    0.0.0.0/0            md5

注意:以上两步步完成后重启数据库
gs_om -t restart
在这里插入图片描述
(3)修改用户登录密码
因为加密方式改变了,所以需要重新设置密码(采用了新的加密方式)

修改密码,新密码不能和原密码一样
alter user jamysong identified by 'Sjm214325*';

在这里插入图片描述
以上三步完成后就可以使用navicat登录openGauss数据库了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u010080562/article/details/128173243