OpenGauss 学习和实践 很好的文章啊
openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核源自PostgreSQL,深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续构建竞争力特性。同时openGauss也是一个开源的数据库平台,鼓励社区贡献、合作。
openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核源自PostgreSQL,深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续构建竞争力特性。同时openGauss也是一个开源的数据库平台,鼓励社区贡献、合作openGauss 数据库特征
1.用户必须拥有数据库创建的权限或者是数据库的系统管理员权限才能创建数据库。
2.openGauss 默认包含两个模板数据库 template0、template1,以及一个默认的用户数据库 postgres。
3.用户创建数据库时实际上就是通过拷贝模板数据库(默认template1)来创建新的数据库,同时要避免使用客户端或其他手段连接及操作两个模板数据库。
4.openGauss 允许创建的数据库总数目上限为 128 个。数据库系统中会有多个数据库,但是客户端程序一次只能连接一个数据库。也不能在不同的数据库之间互相查询。
使用 gsql 本地连接数据库
gsql 是 openGauss 提供的在命令行下运行的数据库连接工具。平台连接数据库语句:
gsql -d postgres -U gaussdb -W’passwd’;
其中 -d 参数代表数据库,-U 参数代表用户名,-W 参数代表密码;
连接成功后和 mySQL 一样会有提示语句。(退出用 \q)
常用操作语句
openGauss 常用数据库操作语句:
切换数据库:
test
上述语句代表从当前数据库切换到test数据库。
查看数据库列表:
\l
查看表列表及表信息:
\d
创建数据库:
创建一个新的数据库。缺省情况下新数据库将通过复制标准系统数据库 template0来创建,且仅支持使用 template0 来创建。另外需要注意的是,在创建数据库过程中,若出现类似“could not initialize database directory”的错误提示,可能是由于文件系统上数据目录的权限不足或磁盘满等原因引起。
语法格式:
CREATE DATABASE database_name
[ [ WITH ] { [ OWNER [=] user_name ] |
[ TEMPLATE [=] template ] |
[ ENCODING [=] encoding ] |
[ LC_COLLATE [=] lc_collate ] |
[ LC_CTYPE [=] lc_ctype ] |
[ DBCOMPATIBILITY [=] compatibilty_type ] |
[ TABLESPACE [=] tablespace_name ] |
[ CONNECTION LIMIT [=] connlimit ]}[…] ];
上述建表语句中,OWNER 参数可用于指定表的所属用户,TEMPLATE 参数可用于指定模板数据库,ENCODING 参数可用于编码格式,TABLESPACE 参数可用于指定表空间。
创建数据库示例:
–创建一个GBK编码的数据库music(本地环境的编码格式必须也为GBK)。
postgres=> CREATE DATABASE music ENCODING ‘GBK’ template = template0;
–创建数据库music2,并指定所有者为jim。
postgres=> CREATE DATABASE music2 OWNER jim;
–用模板template0创建数据库music3,并指定所有者为jim。
postgres=> CREATE DATABASE music3 OWNER jim TEMPLATE template0;
修改数据库示例:
–设置music数据库的连接数为10。
postgres=# ALTER DATABASE music CONNECTION LIMIT= 10;
–将music名称改为music4。
postgres=# ALTER DATABASE music RENAME TO music4;
–将数据库music2的所属者改为tom。
postgres=# ALTER DATABASE music2 OWNER TO tom;
–设置music3的表空间为PG_DEFAULT。
postgres=# ALTER DATABASE music3 SET TABLESPACE PG_DEFAULT;
–关闭在数据库music3上缺省的索引扫描。
postgres=# ALTER DATABASE music3 SET enable_indexscan TO off;
–重置enable_indexscan参数。
postgres=# ALTER DATABASE music3 RESET enable_indexscan;
删除数据库:
–删除数据库。
postgres=# DROP DATABASE music2;
openGauss 常用表操作语句:
创建
表是建立在数据库中的,在不同的数据库中可以存放相同的表。甚至可以通过使用模式在同一个数据库中创建相同名称的表。
建表语句示例:
CREATE TABLE tb1
(
c_sk integer,
c_id char(5),
c_name char(6),
c_sex char(8)
);
上述建表语句中, c_sk 、c_id、c_name 和 c_sex 代表表的字段名,integer、char(5)、char(6) 和 char(8) 分别是这四字段名称的数据类型。
插入
示例:
INSERT INTO tb1(c_sk, c_id, c_name,c_sex) VALUES (3769, ‘a’, ‘Grace’,‘women’);
INSERT INTO tb1 VALUES (3769, ‘a’, ‘Grace’,‘women’);
INSERT INTO tb1 (c_sk, c_name) VALUES (3769, ‘Grace’);
INSERT INTO tb1(c_sk, c_id, c_name,c_sex) VALUES (3769, ‘a’, ‘Grace’,DEFAULT);
INSERT INTO tb1 DEFAULT VALUES;
INSERT INTO tb1(c_sk, c_id, c_name,c_sex) VALUES (3769, ‘a’, ‘Grace’,‘women’),(3777, ‘b’, ‘bob’,‘women’);
更新
提供 表的名称;要更新的字段名;字段的新值;要更新的行
示例:
UPDATE mytb SET c__sk = 1234 WHERE c_sk = 5678;
UPDATE mytb SET c__sk = c_sk+8;
UPDATE mytb SET c__sk = 1234,c_name=‘agrin’ WHERE c_sk = 5678;
删除
示例:
DELETE FROM mytb WHERE c_sk = 1234;
DELETE FROM mytb;
TRUNCATE TABLE mytb;
删除表
DROP TABLE mydb;
更新
提供 表的名称;要更新的字段名;字段的新值;要更新的行
示例:
UPDATE mytb SET c__sk = 1234 WHERE c_sk = 5678;
UPDATE mytb SET c__sk = c_sk+8;
UPDATE mytb SET c__sk = 1234,c_name=‘agrin’ WHERE c_sk = 5678;
删除
示例:
DELETE FROM mytb WHERE c_sk = 1234;
DELETE FROM mytb;
TRUNCATE TABLE mytb;
删除表
DROP TABLE mydb;
更新
提供 表的名称;要更新的字段名;字段的新值;要更新的行
示例:
UPDATE mytb SET c__sk = 1234 WHERE c_sk = 5678;
UPDATE mytb SET c__sk = c_sk+8;
UPDATE mytb SET c__sk = 1234,c_name=‘agrin’ WHERE c_sk = 5678;
删除
示例:
DELETE FROM mytb WHERE c_sk = 1234;
DELETE FROM mytb;
TRUNCATE TABLE mytb;
删除表
DROP TABLE mydb;
1三权分立三权分立是对系统权限管理机制的补充,核心思想是将管理数据库对象的权限、管理用户的权限和管理审计日志的权限分离,从而避免一个管理员拥有过度集中的权利带来的高风险。通过将GUC参数enableSeparationOfDuty设置为on来打开三权分立开关。三权分立开关打开后, SYSADMIN的权限范围将缩小,不再包括允许创建用户/角色的权限,也不再包括允许查看、删除数据库审计日志的权限。SYSADMIN,CREATEROLE,AUDITADMIN三种系统权限的权限范围互相隔离,互不影响,而且一个用户仅能被赋予其中一个属性。三权分立打开后的权限范围如下:系统权限权限范围SYSADMIN允许用户创建数据库,创建表空间CREATEROLE允许用户创建用户/角色AUDITADMIN允许用户查看、删除审计日志2列级访问控制在一些业务场景中,数据表中的某些列存储了重要的信息,需要对用户不可见,但其他列的数据又需要用户能够查看或操作,此时就需要针对数据表的特定列做访问控制,实现针对用户的列级别的访问控制。openGauss提供SQL语句GRANT/REVOKE实现针对列对象的权限授予和回收行级访问控制在实际业务中还存在另外一种场景,同一张数据表,只允许用户查看满足特定条件的行数据,此时就需要将访问控制精确到数据表的行级别,使得不同用户执行相同的SQL查询、更新或删除操作,读取到的结果是不同的。用户可以在数据表上创建行级访问控制(row level security)策略,该策略是针对特定数据库用户、特定SQL操作生效的表达式。当数据库用户访问数据表时,满足策略条件的行对用户可见,不满足条件的行对用户不可见,从而实现针对用户的行级别的访问控制