openGauss数据库源码解析系列文章——openGauss开发快速入门(二)
在上一篇openGauss数据库源码解析系列文章——openGauss开发快速入门(上)中,我们介绍了openGauss的安装部署方法,本篇将具体介绍openGauss基本使用。
二、 openGauss基本使用
openGauss安装完成后会自动启动,用户可以使用openGauss自带的gsql(openGauss交互终端)客户端连接数据库进行相关SQL操作。
(一) 连接数据库
本篇为您介绍如何使用gsql客户端连接数据库。gsql是openGauss自带的客户端工具。使用gsql连接数据库,可以交互式地输入、编辑、执行SQL语句。
1. 确认连接信息
gsql客户端工具通过数据库主节点连接数据库。因此连接前需获取数据库主节点所在服务器的IP地址及数据库主节点的端口号信息。
操作步骤:
(1) 以操作系统用户omm登录数据库主节点。
(2) 使用“gs_om -t status --detail”命令查询openGauss各实例情况。
gs_om -t status --detail
查询结果如下。
[ DBnode State ]
node node_ip instance state
-----------------------------------------------------------------------------1plat1 192.168.0.11 5001 /srv/BigData/gaussdb/data1/dbnode Normal
如上所示,部署了数据库主节点实例的服务器IP地址为192.168.10.11。数据库主节点数据路径“/srv/BigData/gaussdb/data1/dbnode”。
(3) 确认数据库主节点的端口号。
在(2)中查到的数据库主节点数据路径下的postgresql.conf文件中查看端口号信息。示例如下。
cat /srv/BigData/gaussdb/data1/dbnode/postgresql.conf | grep port
查询结果如下,8000为数据库主节点的端口号。
port = 8000 # (change requires restart)
#comm_sctp_port = 1024 # Assigned by installation (change requires restart)
#comm_control_port = 10001 # Assigned by installation (change requires restart)# supported by the operating system:# e.g. 'localhost=10.145.130.2 localport=12211 remotehost=10.145.130.3 remoteport=12212, localhost=10.145.133.2 localport=12213 remotehost=10.145.133.3 remoteport=12214'# e.g. 'localhost=10.145.130.2 localport=12311 remotehost=10.145.130.4 remoteport=12312, localhost=10.145.133.2 localport=12313 remotehost=10.145.133.4 remoteport=12314'# %r = remote host and port
alarm_report_interval = 10
support_extended_features=true
2. 使用gsql本地连接
gsql是openGauss提供的在命令行下运行的数据库连接工具。此工具除了具备操作数据库的基本功能,还提供了若干高级特性,便于用户使用。本节只介绍如何使用gsql本地连接数据库。
1) 注意事项:
缺省情况下,客户端连接数据库后处于空闲状态时会根据参数“session_timeout”的默认值自动断开连接。如果要关闭超时设置,设置参数“session_timeout”为0即可。
2) 前提条件:
已确认连接信息,获取数据库主节点端口号信息。
3) 操作步骤:
(1)以操作系统用户omm登录数据库主节点。
(2)连接数据库。数据库安装完成后默认生成名称为postgres的数据库,第一次连接数据库时可以连接到此数据库。执行如下命令连接数据库。
gsql -d postgres -p 8000
其中postgres为需要连接的数据库名称,8000为数据库主节点的端口号。请根据实际情况替换。
连接成功后,系统显示类似如下信息。
gsql ((openGauss 1.0.0 build 290d125f) compiled at 2020-05-08 02:59:43 commit 2143 last mr 131
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
openGauss=#
omm用户是管理员用户,因此系统显示“postgres=#”。若使用普通用户身份登录和连接数据库,系统显示“postgres=>”。
“Non-SSL connection”表示未使用SSL方式连接数据库。如果需要高安全性时,请使用SSL连接。
(3)首次登录需要修改密码。原始密码为安装openGauss数据库时手动输入的密码,此处需将原始密码修改为自定义的密码,例如Mypwd123,命令如下。
postgres=# ALTER ROLE omm IDENTIFIED BY 'Mypwd123' REPLACE 'XuanYuan@2012';
(4) 退出数据库。
postgres=# \q
(二) 使用数据库
本篇描述使用数据库的基本操作。通过此篇用户可以完成创建数据库、创建表及向表中插入数据和查询表中数据等数据管理和基础权限管理操作。
1. 从这里开始
本篇为您完整地介绍一个使用数据库的示例,帮助您更好了解数据库,更多关于SQL语句的使用请参见后续章节。
(1)以操作系统用户omm登录数据库主节点。
(2)执行如下命令连接数据库。
gsql -d postgres -p 8000
当结果显示为如下信息,则表示连接成功。
gsql ((openGauss 1.0.0 build 290d125f) compiled at 2020-05-08 02:59:43 commit 2143 last mr 131)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
openGauss=#
(3) 创建数据库用户。
默认只有openGauss安装时创建的管理员用户可以访问初始数据库,您还可以创建其他数据库用户账号访问数据库。
postgres=# CREATE USER joe WITH PASSWORD "Bigdata@123";
当结果显示为如下信息,则表示创建成功。
CREATE ROLE
如上创建了一个用户名为joe,密码为Bigdata@123的用户。
(4) 创建数据库。
postgres=# CREATE DATABASE db_tpcc OWNER joe;
当结果显示为如下信息,则表示创建成功。
CREATE DATABASE
db_tpcc数据库创建完成后,就可以按如下方法退出postgres数据库,使用新用户joe连接db_tpcc数据库执行创建表等操作。您也可以选择继续在默认的postgres数据库下进行后续的体验。
openGauss=# \q
gsql -d db_tpcc -p 8000 -U joe -W Bigdata@123
gsql ((openGauss 1.0.0 build 290d125f) compiled at 2020-05-08 02:59:43 commit 2143 last mr 131)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
db_tpcc=>
(5) 创建schema。
db_tpcc=> CREATE SCHEMA joe AUTHORIZATION joe;
当结果显示为如下信息,则表示创建schema成功。
CREATE SCHEMA
(6) 创建表。
① 创建一个名称为mytable,只有一列的表。字段名为firstcol,字段类型为integer。
db_tpcc=> CREATE TABLE mytable (firstcol int);
当结果显示为如下信息,则表示表创建成功。
CREATE TABLE
② 向表中插入数据:
db_tpcc=> INSERT INTO mytable values (100);
当结果显示为如下信息,则表示插入数据成功。
INSERT 0 1
③ 查看表中数据:
db_tpcc=> SELECT * FROM mytable;firstcol
----------100
(1 row)
2. 简单数据管理
在openGuass中拥有多种对象进行数据管理,例如表、数据库。用户可以通过创建表存储数据,查询表检索数据。也可以通过创建数据库进行数据隔离。本节为您介绍openGauss中如何创建数据库、表以及查看数据库中的对象。
1) 创建数据库
创建一个新的数据库。缺省情况下新数据库将通过复制标准系统数据库template0来创建,且仅支持使用template0来创建。
(1)注意事项:
① 只有拥有CREATEDB权限的用户才可以创建新数据库,系统管理员默认拥有此权限。
② 不能在事务块中执行创建数据库语句。
③ 在创建数据库过程中,若出现类似“could not initialize database directory”的错误提示,可能是由于文件系统上数据目录的权限不足或磁盘满等原因引起。
(2)语法格式:
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 ]}[...] ];
(3) 示例:
--创建jim和tom用户。
openGauss=# CREATE USER jim PASSWORD 'Bigdata@123';
openGauss=# CREATE USER tom PASSWORD 'Bigdata@123';
--创建一个GBK编码的数据库music(本地环境的编码格式必须也为GBK)。
openGauss=# CREATE DATABASE music ENCODING 'GBK' template = template0;
--创建数据库music2,并指定所有者为jim。
openGauss=# CREATE DATABASE music2 OWNER jim;
--用模板template0创建数据库music3,并指定所有者为jim。
openGauss=# CREATE DATABASE music3 OWNER jim TEMPLATE template0;
--设置music数据库的连接数为10。
openGauss=# ALTER DATABASE music CONNECTION LIMIT= 10;
--将music名称改为music4。
openGauss=# ALTER DATABASE music RENAME TO music4;
--将数据库music2的所属者改为tom。
openGauss=# ALTER DATABASE music2 OWNER TO tom;
--设置music3的表空间为PG_DEFAULT。
openGauss=# ALTER DATABASE music3 SET TABLESPACE PG_DEFAULT;
--关闭在数据库music3上缺省的索引扫描。
openGauss=# ALTER DATABASE music3 SET enable_indexscan TO off;
--重置enable_indexscan参数。
openGauss=# ALTER DATABASE music3 RESET enable_indexscan;
--删除数据库。
openGauss=# DROP DATABASE music2;
openGauss=# DROP DATABASE music3;
openGauss=# DROP DATABASE music4;
--删除jim和tom用户。
openGauss=# DROP USER jim;
openGauss=# DROP USER tom;
--创建兼容TD格式的数据库。
openGauss=# CREATE DATABASE td_compatible_db DBCOMPATIBILITY 'C';
--创建兼容ORA格式的数据库。
openGauss=# CREATE DATABASE ora_compatible_db DBCOMPATIBILITY 'A';
--删除兼容TD、ORA格式的数据库。
openGauss=# DROP DATABASE td_compatible_db;
openGauss=# DROP DATABASE ora_compatible_db;
2) 创建表
在当前数据库中创建一个新的空白表,该表为命令执行者所有。
创建表时,如未指定表的存储方式,默认创建的是行存储表;如未指定分布列时,取表的主键列(如果有的话)或首个可以作为分布列的列。
(1) 语法格式:
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name ({ column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ]| table_constraint| LIKE source_table [ like_option [...] ] }[, ... ])[ WITH ( {storage_parameter = value} [, ... ] ) ][ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ][ COMPRESS | NOCOMPRESS ][ TABLESPACE tablespace_name ];
其中列约束column_constraint为:
[ CONSTRAINT constraint_name ]
{ NOT NULL |NULL |CHECK ( expression ) |DEFAULT default_expr |UNIQUE index_parameters |PRIMARY KEY index_parameters }
[ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
其中列的压缩可选项compress_mode为:
{ DELTA | PREFIX | DICTIONARY | NUMSTR | NOCOMPRESS }
其中表约束table_constraint为:
[ CONSTRAINT constraint_name ]
{ CHECK ( expression ) |UNIQUE ( column_name [, ... ] ) index_parameters |PRIMARY KEY ( column_name [, ... ] ) index_parameters |PARTIAL CLUSTER KEY ( column_name [, ... ] ) }
[ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
其中like选项like_option为:
{ INCLUDING | EXCLUDING } { DEFAULTS | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | PARTITION | RELOPTIONS | ALL }
其中索引参数index_parameters为:
[ WITH ( {storage_parameter = value} [, ... ] ) ]
[ USING INDEX TABLESPACE tablespace_name ]
3) 查询数据
SELECT用于从表或视图中取出数据。
SELECT语句就像叠加在数据库表上的过滤器,利用SQL关键字从数据表中过滤出用户需要的数据。
(1)注意事项:
① 必须对每个在SELECT命令中使用的字段有SELECT权限。
② 使用FOR UPDATE或FOR SHARE还要求UPDATE权限。
(2)语法格式:
查询数据。
[ WITH [ RECURSIVE ] with_query [, ...] ]
SELECT [/*+ plan_hint */] [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
{ * | {expression [ [ AS ] output_name ]} [, ...] }
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY grouping_element [, ...] ]
[ HAVING condition [, ...] ]
[ WINDOW {window_name AS ( window_definition )} [, ...] ]
[ { UNION | INTERSECT | EXCEPT | MINUS } [ ALL | DISTINCT ] SELECT ]
[ ORDER BY {expression [ [ ASC | DESC | USING operator ] | nlssort_expression_clause ] [ NULLS { FIRST | LAST } ]} [, ...] ]
[ LIMIT { [offset,] count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
[ {FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ]} [...] ];
其中子查询with_query为:
with_query_name [ ( column_name [, ...] ) ] AS ( {SELECT | values | INSERT | update | delete} )
其中指定查询源from_item为:
{[ ONLY ] table_name [ * ] [ partition_clause ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
[ TABLESAMPLE sampling_method ( argument [, ...] ) [ REPEATABLE ( seed ) ] ]
|( SELECT ) [ AS ] alias [ ( column_alias [, ...] ) ]
|with_query_name [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
|function_name ( [ argument [, ...] ] ) [ AS ] alias [ ( column_alias [, ...] | column_definition [, ...] ) ]
|function_name ( [ argument [, ...] ] ) AS ( column_definition [, ...] )
|from_item [ NATURAL ] join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]}
其中group子句为:
( )
| expression
| ( expression [, ...] )
| ROLLUP ( { expression | ( expression [, ...] ) } [, ...] )
| CUBE ( { expression | ( expression [, ...] ) } [, ...] )
| GROUPING SETS ( grouping_element [, ...] )
其中指定分区partition_clause为:
PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) }
指定分区只适合普通表。
其中设置排序方式nlssort_expression_clause为:
NLSSORT ( column_name, ' NLS_SORT = { SCHINESE_PINYIN_M | generic_m_ci } ' )
简化版查询语法,功能相当于SELECT * FROM table_name。
TABLE { ONLY {(table_name)| table_name} | table_name [ * ]};
本篇从连接数据库和使用数据库两方面介绍了openGauss基本使用,你掌握了吗?下篇我们将接着介绍数据库的开发和编译,敬请期待!
Gauss松鼠会是汇集数据库爱好者和关注者的大本营, 大家共同学习、探索、分享数据库前沿知识和技术, 互助解决问题,共建数据库技术交流圈。
openGauss数据库源码解析系列文章——openGauss开发快速入门(二)相关推荐
- openGauss数据库源码解析系列文章--openGauss简介(一)
openGauss数据库是华为深度融合在数据库领域多年经验,结合企业级场景要求推出的新一代企业级开源数据库.此前,Gauss松鼠会已经发布了openGauss数据库核心技术系列文章,介绍了openGa ...
- openGauss数据库源码解析系列文章——openGauss开发快速入门(一)
作为openGauss数据库开发者,在基于开源社区的openGauss版本进行二次开发的过程中,需要完成软件包获取.源码了解.代码修改.编译发布等过程,同时还需要安装数据库以了解数据库的基本特点.验证 ...
- openGauss数据库源码解析系列文章—— AI技术之“自调优”
上一篇介绍了第七章执行器解析中"7.6 向量化引擎"及"7.7 小结"的相关内容,本篇我们开启第八章 AI技术中"8.1 概述"及" ...
- ⭐openGauss数据库源码解析系列文章—— 对象权限管理⭐
在前面文章中介绍过"9.3 角色管理整",本篇我们介绍第9章 安全管理源码解析中"9.4 对象权限管理"的相关精彩内容介绍. 9.4 对象权限管理 权限管理是安 ...
- ⭐openGauss数据库源码解析系列文章—— 角色管理⭐
在前面介绍过"9.1 安全管理整体架构和代码概览.9.2 安全认证",本篇我们介绍第9章 安全管理源码解析中"9.3 角色管理"的相关精彩内容介绍. 9.3 角 ...
- openGauss数据库源码解析系列文章—— SQL引擎源解析(一)
本篇我们开启"SQL引擎源解析"中"6.1 概述"及"6.2 SQL解析"的精彩内容介绍. 第6章 SQL引擎源解析 SQL引擎作为数据库系 ...
- openGauss数据库源码解析系列文章——SQL引擎源码解析(一)
SQL引擎作为数据库系统的入口 , 主要承担了对SQL语言进行解析 . 优化 . 生成执行计划的 作用.对于用户输入的SQL语句,SQL引擎会对语句进行语法/ 语义上的分析以 判断是否满足语法规则等, ...
- openGauss数据库源码解析系列文章——存储引擎源码解析(四)
上一篇我们详细讲述"3. astore元组多版本机制"."4.astore访存管理"及"5.astore空间管理和回收"相关内容.本篇我们将 ...
- prometheus变量_TiKV 源码解析系列文章(四)Prometheus(下)
本文为 TiKV 源码解析系列的第四篇,接上篇继续为大家介绍 rust-prometheus.上篇主要介绍了基础知识以及最基本的几个指标的内部工作机制,本篇会进一步介绍更多高级功能的实现原理. 与上篇 ...
最新文章
- 使用dotnet-dump 查找 .net core 3.0 占用CPU 100%的原因
- 深入理解Redis的持久化机制和原理
- 使用Maven Assembly plugin将依赖打包进jar
- swift 同步 网络请求_IOS开发中异步网络请求上实现同步逻辑
- 【Kaggle微课程】Natural Language Processing - 2.Text Classification
- JDK与Java SE/EE/ME的区别
- 转贴: mysql-5.7.20 编码由 utf8 改为 utf8mb4
- CCF 2022:DPU评测技术白皮书发布【附白皮书下载】
- matlab峰值提取,如何从MATLAB中的自相关数据中提取峰值?
- keytool密钥和证书管理工具-使用详解(整理)
- 机器学习(十)——支持向量机
- 斩断***黑手:如何使用IceSword冰刃
- 生产质量分析方案,人机料法环全面解析,必看好文
- 物联网小课堂之模组SIM卡相关秘籍
- 后缀自动机入门/基本概念
- 关于CAJViewer阅读器如何修改做标记的颜色?
- 程序无法正常启动0xc0000142解决方法
- 国内cdn免费加速出现了,您知道吗?
- 由MAVEN入手浅谈项目构建与管理
- MySQL数据类型 -- 日期时间型
热门文章
- 泰拉瑞亚服务器修改物品,泰拉瑞亚1.4自定义物品名称方法 自定义物品名称详细教程_逗游网...
- 阿里P8大牛透漏高薪背后的真正逻辑
- 从肖战的105张买起到阅文新合同 背后是腾讯的背水一战(转载)
- 玩游戏显示计算机丢失,win7玩游戏提示缺少D3DCompiler_47.dll文件怎么处理
- 物联网知识点(总结)
- 量子计算机原理与退火算法的通俗解释
- 按键精灵:函数之可选参数
- 【Java】Java获取昨天日期的正确姿势
- 你嗑的瓜子要涨价啦?域名你“嗑”懂了吗?
- udp攻击的PHP木马