OpenGauss轻量级安装

1.官网

# OpenGauss官网
https://opengauss.org/zh/

安装网址

mkdir -p opengauss && cd opengauss
wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/3.1.1/x86/openGauss-Lite-3.1.1-CentOS-x86_64.tar.gz
tar -zxvf openGauss-Lite-3.1.1-CentOS-x86_64.tar.gz

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && setenforce 0
systemctl disable firewalld.service
systemctl stop firewalld.service

2.docker安装

version:  '3.0'
services:
  opengauss:
    image: enmotech/opengauss:3.0.0
    hostname: opengauss
    container_name: opengauss
    environment :
        GS_PASSWORD: Admin@123456
    restart: always
    privileged: true
    user: root
    ports:
       - 5432:5432
    volumes:
       - $PWD/openguass:/var/lib/opengauss
       - /etc/localtime:/etc/localtime:ro   

GS_PASSWORD:必须设置该参数,该参数设置了openGauss数据库的超级用户omm以及测试用户gaussdb的密码。openGauss安装时默认会创建omm超级用户,该用户名暂时无法修改。测试用户gaussdb是在entrypoint.sh中自定义创建的用户。openGauss镜像配置了本地信任机制,因此在容器内连接数据库无需密码,但是如果要从容器外部(其它主机或者其它容器)连接则必须要输入密码。
openGauss的密码长度8个字符以上,必须同时包含大写字母、小写字母、数字、以及特殊符号(特殊符号仅包含“#?!@%^&*-”,并且“!&”需要用转义符“\”进行转义)。

GS_NODENAME:指定数据库节点名称,默认为gaussdb。

GS_USERNAME:指定数据库连接用户名,默认为gaussdb。

GS_PORT:指定数据库端口,默认为5432;

-u root:参数用于指定容器启动的时候以root用户执行脚本,否则会遇到没有权限创建数据文件目录的问题

使用OpenGauss数据库

3.使用OpenGauss数据库

3.1. 连接数据库

(1)进入容器
# 进入容器
docker exec -it opengauss /bin/bash

# 切换“omm”用户,默认是“root”用户是不能使用的
su omm

(2)连接数据库

数据库安装完成后,默认生成名称为postgres的数据库。第一次连接数据库时可以连接到此数据库。

gsql -d postgres -p 5432
(3)连接成功
omm@9482536f66e7:/$ gsql -d postgres -p 5432
gsql ((openGauss 3.0.0 build 02c14696) compiled at 2022-04-01 18:12:34 commit 0 last mr  )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

openGauss=# 
(4)创建新用户

注意:必须创建新用户,用于工具和应用的数据连接,默认的用户“omm”不能用于远程连接。

# 将会在postgres下创建用户ga_mason,在其他数据库下是无法删除此用户
openGauss=# CREATE USER ga_mason WITH Sysadmin IDENTIFIED BY 'OpenGauss@123';

# 给用户授权
openGauss=# GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO ga_mason;
openGauss=# GRANT USAGE,SELECT ON ALL SEQUENCES IN SCHEMA ga_mason TO ga_mason;

# 查看用户列表
openGauss=# \du

# 查看用户ga_mason
openGauss=# \du ga_mason

# 删除用户
openGauss=# drop user ga_mason;

# 切换用户,需要输入密码
openGauss=# \c - ga_mason

3.2. 创建数据库

数据库:表空间>数据库>表

(1)查看表空间
openGauss=# \db
      List of tablespaces
    Name    | Owner | Location 
------------+-------+----------
 pg_default | omm   | 
 pg_global  | omm   | 
(2 rows)

(2)查看数据库
# 查看数据库
openGauss=# \l
                         List of databases
   Name    | Owner | Encoding | Collate | Ctype | Access privileges 
-----------+-------+----------+---------+-------+-------------------
 omm       | omm   | UTF8     | C       | C     | 
 postgres  | omm   | UTF8     | C       | C     | 
 template0 | omm   | UTF8     | C       | C     | =c/omm           +
           |       |          |         |       | omm=CTc/omm
 template1 | omm   | UTF8     | C       | C     | =c/omm           +
           |       |          |         |       | omm=CTc/omm
(4 rows)

(3)创建数据库
  • 可以不创建表空间

  • 创建数据库对象时可以指定表空间;

  • 创建数据库对象时不指定表空间,相关的数据库对象会默认保存在PG_DEFAULT空间中。

# 创建新的表空间my_tbs;
openGauss=# CREATE TABLESPACE my_tbs RELATIVE LOCATION 'tablespace/my_tbs';

# 创建my_db数据库,指定表空间my_tbs
openGauss=# CREATE DATABASE my_db WITH TABLESPACE = my_tbs;

不指定表空间

openGauss=# CREATE DATABASE my_db;

删除数据库

openGauss=# DROP DATABASE my_db;

切换数据库

openGauss=# \c my_db

3.3. 在数据库中创建表

(1)表的简单介绍

​ openGauss支持行列混合存储。行、列存储模型各有优劣,一般情况下,如果表的字段比较多(大宽表),查询中涉及到的列不多的情况下,适合列存储。如果表的字段个数比较少,查询大部分字段,那么选择行存储比较好。通常openGauss用于TP场景的数据库,默认使用行存储,仅对执行复杂查询且数据量大的AP场景时,才使用列存储。

行存表和列存表的选择

  1. 更新频繁程度:数据如果频繁更新,选择行存表。

  2. 插入频繁程度:频繁的少量插入,选择行存表。一次插入大批量数据,选择列存表。

  3. 表的列数:表的列数很多,选择列存表。

  4. 查询的列数:如果每次查询时,只涉及了表的少数(<50%总列数)几个列,选择列存表。

  5. 压缩率:列存表比行存表压缩率高。但高压缩率会消耗更多的CPU资源。

储模型优点缺点适用场景
行存数据被保存在一起。INSERT/UPDATE容易。选择(Selection)时即使只涉及某几列,所有数据也都会被读取。点查询(返回记录少,基于索引的简单查询)。增、删、改操作较多的场景。
列存查询时只有涉及到的列会被读取。投影(Projection)很高效。任何列都能作为索引。选择完成时,被选择的列要重新组装。INSERT/UPDATE比较麻烦。统计分析类查询(关联、分组操作较多的场景)。即席查询(查询条件不确定,行存表扫描难以使用索引)。
(2)行存表

先登录到自己创建的“my_db”数据库

gsql -d my_db -p 5432

默认创建表的类型。数据按行进行存储,即一行数据是连续存储。适用于对数据需要经常更新的场景。

# 创建表,注意尽量不要使用user等比较特殊的名称
my_db=# CREATE TABLE tb_user ( u_id CHAR(2), u_name VARCHAR2(40), u_age NUMBER );

# 删除表
my_db=# DROP TABLE tb_user;
(3)列存表

数据按列进行存储,即一列所有数据是连续存储的。单列查询IO小,比行存表占用更少的存储空间。适合数据批量插入、更新较少和以查询为主统计分析类的场景。列存表不适合点查询。

# 创建表
my_db=# CREATE TABLE tb_user_col ( u_id CHAR(2), u_name VARCHAR2(40), u_age NUMBER ) WITH (ORIENTATION = COLUMN);

# 删除表
my_db=# DROP TABLE tb_user_col;
(4)查看表
# 查看表
my_db=# \d
                              List of relations
 Schema |    Name     | Type  | Owner |               Storage                
--------+-------------+-------+-------+--------------------------------------
 public | tb_user     | table | omm   | {orientation=row,compression=no}
 public | tb_user_col | table | omm   | {orientation=column,compression=low}
(2 rows)

# 查看表的字段信息
my_db=# \d+ tb_user

# 查看表的基本信息
my_db=# \dt+ tb_user
(5)插入数据
# 插入数据
my_db=# INSERT INTO tb_user (u_id, u_name, u_age) VALUES (1, '张三', 20), (2, '李四', 30), (3, 'wangwu', 40);
INSERT 0 3
(6)查询数据
my_db=# SELECT * FROM tb_user;
 u_id | u_name | u_age 
------+--------+-------
 1    | 张三   |    20
 2    | 李四   |    30
 3    | wangwu |    40
(3 rows)
Logo

鲲鹏展翅 立根铸魂 深耕行业数字化

更多推荐