目录
- 前言
- 1. 启动/停止/重启数据库
- (1)极简版启动/停止/重启命令
- (2)企业版启动/停止/重启命令
- 2. 登录数据库
- (1)登录数据库时的基本连接参数
- (2)登录数据库时的常用连接参数
- (3)登录数据库时的其他连接参数
- 3. 数据库元命令
- 4. 数据库常用操作语句
- (1)数据库操作
- (2)表空间操作
- (3)表模式操作
- (4)创建表
- (5)创建约束
- (6)创建索引
- (7)创建序列
- (8)查询表数据
- (9)插入表数据
- (10)修改表数据
- (11)删除表数据
- 5. 数据库权限管理
- (1)用户
- (2)授权
- 6. 图形化客户端
- (1)Data Studio客户端
- (2)navicat客户端
前言
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;
注意:
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数据库了