opengauss维护管理之基本操作

author author     2023-03-18     534

关键词:

一、概述

openGauss维护管理之基本操作_表空间

二、数据库开发试验

1、登录数据库

su - omm
[omm@gsdb01 ~]$ gsql -d postgres -p 26000 -r
gsql ((openGauss 3.1.1 build 70980198) compiled at 2023-01-06 09:27:09 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

2、创建和管理用户

1、创建用户
通过CREATE USER创建的用户,默认具有LOGIN权限;
通过CREATE USER创建用户的同时系统会在执行该命令的数据库中,为该用户创建一个同名的SCHEMA;其他数据库中,则不自动创建同名的SCHEMA;
用户可使用CREATE SCHEMA命令,分别在其他数据库中,为该用户创建同名SCHEMA。
系统管理员在普通用户同名schema下创建的对象,所有者为schema的同名用户(非系统管理员)。
创建用户jim,登录密码为Bigdata@123。
openGauss=# create user jim password Bigdata@123;
NOTICE: The encrypted password contains MD5 ciphertext, which is not secure.
CREATE ROLE
同样的下面语句也可以创建用户。
openGauss=# create user dim identified by Bigdata@123;
如果创建有“创建数据库”权限的用户,则需要加CREATEDB关键字。
openGauss=# create user kim createdb password Bigdata@123;

2、管理用户
将用户jim的登录密码由Bigdata@123修改为Abcd@123。
alter user jim identified by Abcd@123 replace Bigdata@123;
为用户jim追加CREATEROLE权限。
alter user jim createrole;
将enable_seqscan的值设置为on,设置成功后,在下一会话中生效。
alter user jim set enable_seqscan to on;
锁定jim帐户。
alter user jim account lock;
删除用户。
openGauss=# drop user jim cascade;
openGauss=# drop user dim cascade;
openGauss=# drop user kim cascade;

3、创建和管理表空间

1、创建和管理表空间
步骤 1 执行如下命令创建用户jack。
create user jack identified by Bigdata@123;
步骤 2 执行如下命令创建表空间。
create tablespace fastspace relative location tablespace/tablespace_1;
CREATE TABLESPACE
其中“fastspace”为新创建的表空间,“数据库节点数据目录pg_location/tablespace/tablespace_1”是用户拥有读写权限的空目录,
如 /opt/huawei/install/data/dn01/pg_location/tablespace/tablespace_1/。
步骤 3 数据库系统管理员执行如下命令将“fastspace”表空间的访问权限赋予数据用户jack。
grant CREATE on TABLESPACE fastspace to jack;

2、管理表空间
查询表空间
方式1:检查pg_tablespace系统表。如下命令可查到系统和用户定义的全部表空间。
openGauss=# select spcname from pg_tablespace ;
spcname
------------
pg_default
pg_global
fastspace
(3 rows)
方式2:使用gsql程序的元命令查询表空间。
openGauss=# \\db
List of tablespaces
Name | Owner | Location
------------+-------+-------------------------
fastspace | omm | tablespace/tablespace_1
pg_default | omm |
pg_global | omm |
(3 rows)
查询表空间使用率
步骤 1 查询表空间的当前使用情况。
openGauss=# select pg_tablespace_size(fastspace);
pg_tablespace_size
--------------------
4096
(1 row)
其中4096表示表空间的大小,单位为字节。
步骤 2 计算表空间使用率。
表空间使用率=PG_TABLESPACE_SIZE/表空间所在目录的磁盘大小。

3、修改表空间
执行如下命令对表空间fastspace重命名为fspace。
alter tablespace fastspace rename to fspace;

4、删除表空间
执行如下命令删除用户jack。
drop user jack cascade;
执行如下命令删除表空间fspace。
drop tablespace fspace;
说明:用户必须是表空间的owner或者系统管理员才能删除表空间。

4、创建和管理数据库

1、创建数据库
步骤 1 使用如下命令创建一个新的表空间tpcds_local。
create tablespace tpcds_local relative location tablespace/tablespace_2;
步骤 2 使用如下命令创建一个新的数据库db_tpcc。
create database db_tpcc with tablespace = tpcds_local ;

2、管理数据库
查看数据库
使用\\l元命令查看数据库系统的数据库列表(l表示list)。
openGauss=# \\l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+------------+------------+-------------------
db_test | joe | UTF8 | en_US.utf8 | en_US.utf8 |
db_tpcc | omm | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | omm | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | omm | UTF8 | en_US.utf8 | en_US.utf8 | =c/omm +
| | | | | omm=CTc/omm
template1 | omm | UTF8 | en_US.utf8 | en_US.utf8 | =c/omm +
| | | | | omm=CTc/omm
(5 rows)
使用如下命令通过系统表pg_database查询数据库列表。
openGauss=# select datname from pg_database;
datname
-----------
template1
db_test
template0
db_tpcc
postgres
(5 rows)

3、修改数据库
用户可以使用如下命令修改数据库属性(比如:owner、名称和默认的配置属性)。
使用以下命令为数据库设置默认的模式搜索路径。
alter database db_tpcc set search_path to pa_catalog,public;
使用如下命令为数据库重新命名。
alter database db_tpcc rename to human_tpcds;

4、删除数据库
用户可以使用DROP DATABASE命令删除数据库。此命令删除了数据库中的系统目录,并且删除了带有数据的磁盘上的数据库目录。
用户必须是数据库的owner或者系统管理员才能删除数据库。当有人连接数据库时,删除操作会失败。删除数据库时请先连接到其他的数据库。
使用如下命令删除数据库:
drop database human_tpcds ;

5、创建和管理表

1、创建表
表是建立在数据库中的,在不同的数据库中可以存放相同的表。甚至可以通过使用模式在同一个数据库中创建相同名称的表。
执行如下命令创建表。
CREATE TABLE customer_t1
(
c_customer_sk integer,
c_customer_id char(5),
c_first_name char(6),
c_last_name char(8)
);

其中c_customer_sk 、c_customer_id、c_first_name和c_last_name是表的字段名,
integer、char(5)、char(6)和char(8)分别是这四字段名称的类型。

2、向表中插入数据
向表customer_t1中插入一行数据
数据值是按照这些字段在表中出现的顺序列出的,并且用逗号分隔。通常数据值是文本(常量),但也允许使用标量表达式。
insert into customer_t1(c_customer_sk,c_customer_id,c_first_name) values(3769,hello,Grace);
如果用户已经知道表中字段的顺序,也可无需列出表中的字段。例如以下命令与上面的命令效果相同。
INSERT INTO customer_t1 VALUES (3769, hello, Grace);
如果用户不知道所有字段的数值,可以忽略其中的一些。没有数值的字段将被填充为字段的缺省值。例如:
INSERT INTO customer_t1 (c_customer_sk, c_first_name) VALUES (3769, Grace);

INSERT INTO customer_t1 VALUES (3769, hello);
用户也可以对独立的字段或者整个行明确缺省值:
INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES (3769, hello, DEFAULT);

INSERT INTO customer_t1 DEFAULT VALUES;

向表中插入多行数据
命令如下:
INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES
(6885, maps, Joes),
(4321, tpcds, Lily),
(9527, world, James);
如果需要向表中插入多条数据,除此命令外,也可以多次执行插入一行数据命令实现。但是建议使用此命令可以提升效率。

从指定表插入数据到当前表
如果从指定表插入数据到当前表,例如在数据库中创建了一个表customer_t1的备份表customer_t2,现在需要将表customer_t1中的数据插入到表
customer_t2中,则可以执行如下命令。
CREATE TABLE customer_t2
(
c_customer_sk integer,
c_customer_id char(5),
c_first_name char(6),
c_last_name char(8)
);
插入数据:
INSERT INTO customer_t2 SELECT * FROM customer_t1;
删除备份表:
DROP TABLE customer_t2 CASCADE;

3、更新表中数据
修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行,所有行或者指定的部分行。还可以独立更新每个字段,而其他字段则不受影响。
需要将表customer_t1中c_customer_sk为9527的字段重新定义为9876:
update customer_t1 set c_customer_sk=9876 where c_customer_sk=9527;
这里的表名称也可以使用模式名修饰,否则会从默认的模式路径找到这个表。SET后面紧跟字段和新的字段值。新的字段值不仅可以是常量,也可以是
变量表达式。比如,把所有c_customer_sk的值增加100:
update customer_t1 set c_customer_sk=c_customer_sk+100;
用户可以在一个UPDATE命令中更新更多的字段,方法是在SET子句中列出更多赋值,比如:
update customer_t1 set c_customer_id=Admin,c_first_name=local where c_customer_sk=4421;

4、查看数据
使用系统表pg_tables查询数据库所有表的信息。
select * from pg_tables;
使用gsql的\\d+命令查询表的结构。
\\d+ customer_t1
执行如下命令查询表customer_t1的数据量。
select count(*) from customer_t1 ;
执行如下命令查询表customer_t1的所有数据。
select * from customer_t1 ;
执行如下命令只查询字段c_customer_sk的数据。
select c_customer_sk from customer_t1 ;
执行如下命令过滤字段c_customer_sk的重复数据。
select distinct(c_customer_sk) from customer_t1 ;
执行如下命令查询字段c_customer_sk为3869的所有数据。
select * from customer_t1 where c_customer_sk=3869;
执行如下命令按照字段c_customer_sk进行排序。
select * from customer_t1 order by c_customer_sk;
执行如下命令查询ROWNUM伪列。
select rownum,c_customer_sk,c_customer_id from customer_t1 ;
rownum | c_customer_sk | c_customer_id
--------+---------------+---------------
1 | 3869 | hello
2 | 6985 | maps
3 | 9976 | world
4 | 4421 | Admin
(4 rows)
执行如下命令使用别名进行查询(CNB、CSK、CID为列别名,T 为表别名)。
openGauss=# select rownum CNB,c_customer_sk CSK,c_customer_id CID from customer_t1 ;
cnb | csk | cid
-----+------+-------
1 | 3869 | hello
2 | 6985 | maps
3 | 9976 | world
4 | 4421 | Admin
(4 rows)

5、删除表中数据
在使用表的过程中,可能会需要删除已过期的数据,删除数据必须从表中整行的删除。
使用DELETE命令删除行,如果删除表customer_t1中所有c_customer_sk为3869的记录:
delete from customer_t1 where c_customer_sk=3869;
如果执行如下命令之一,会删除表中所有的行。
delete from customer_t1 ;
或:
TRUNCATE TABLE customer_t1;
全表删除的场景下,建议使用truncate,不建议使用delete。
删除创建的表:
drop table customer_t1 ;

6、创建和管理schema

1、创建schema
执行如下命令来创建一个schema。
create schema myschema;

如果需要在模式中创建或者访问对象,其完整的对象名称由模式名称和具体的对象名称组成。中间由符号“.”隔开。例如:myschema.table。
执行如下命令在创建schema时指定owner。
CREATE SCHEMA myschema AUTHORIZATION omm;

2、使用schema
在特定schema下创建对象或者访问特定schema下的对象,需要使用有schema修饰的对象名。该名称包含schema名以及对象名,他们之间用“.”号分开。
执行如下命令在myschema下创建mytable表。
create table myschema.mytable(id int,name varchar(20));

如果在数据库中指定对象的位置,就需要使用有schema修饰的对象名称。
执行如下命令查询myschema下mytable表的所有数据。
select * from myschema.mytable;

3、schema的搜索路径
可以设置search_path配置参数指定寻找对象可用schema的顺序。在搜索路径列出的第一个schema会变成默认的schema。如果在创建对象时不指定
schema,则会创建在默认的schema中。
执行如下命令查看搜索路径。
openGauss=# show search_path;
search_path
----------------
"$user",public
(1 row)

执行如下命令将搜索路径设置为myschema、public,首先搜索myschema。
set search_path to myschema,public;
openGauss=# select * from mytable;
id | name
----+------
(0 rows)

4、schema的权限控制
默认情况下,用户只能访问属于自己的schema中的数据库对象。如果需要访问其他schema的对象,则该schema的所有者应该赋予他对该schema的
usage权限。
通过将模式的CREATE权限授予某用户,被授权用户就可以在此模式中创建对象。注意默认情况下,所有角色都拥有在public模式上的USAGE权限,但是
普通用户没有在public模式上的CREATE权限。普通用户能够连接到一个指定数据库并在它的public模式中创建对象是不安全的,如果普通用户具有在
public模式上的CREATE权限,则建议通过如下语句撤销该权限。
撤销PUBLIC在public模式下创建对象的权限,下面语句中第一个“public”是模式,第二个“PUBLIC”指的是所有角色。
postgres=# REVOKE CREATE ON SCHEMA public FROM PUBLIC;
使用以下命令查看现有的schema:
openGauss=# select current_schema();
current_schema
----------------
myschema
(1 row)
执行如下命令创建用户jack,并将myschema的usage权限赋给用户jack。
create user jack identified by Bigdata@123;
grant usage on schema myschema to jack;
将用户jack对于myschema的usage权限收回。
revoke usage on schema myschema from jack;

5、删除schema
当schema为空时,即该schema下没有数据库对象,使用DROP SCHEMA命令进行删除。例如删除名为nullschema的空schema。
openGauss=# drop schema if exists nullschema;
NOTICE: schema "nullschema" does not exist, skipping
DROP SCHEMA
当schema非空时,如果要删除一个schema及其包含的所有对象,需要使用CASCADE关键字。例如删除myschema及该schema下的所有对象。
openGauss=# drop schema myschema cascade;
NOTICE: drop cascades to table mytable
DROP SCHEMA
执行如下命令删除用户jack。
openGauss=# drop user jack cascade;
DROP ROLE

7、创建和管理分区表

1、创建分区表
步骤 1 创建schema。
CREATE SCHEMA tpcds;
步骤 2 创建表空间。
create tablespace example1 relative location tablespace1/tablespace_1;
create tablespace example2 relative location tablespace2/tablespace_2;
create tablespace example3 relative location tablespace3/tablespace_3;
create tablespace example4 relative location tablespace4/tablespace_4;
步骤 3 创建分区表并插入数据。
CREATE TABLE tpcds.web_returns_p2
(
ca_address_sk integer NOT NULL ,
ca_address_id character(16) NOT NULL ,
ca_street_number character(10) ,
ca_street_name character varying(60) ,
ca_street_type character(15) ,
ca_suite_number character(10) ,
ca_city character varying(60) ,
ca_county character varying(30) ,
ca_state character(2) ,
ca_zip character(10) ,
ca_country character varying(20) ,
ca_gmt_offset numeric(5,2) ,
ca_location_type character(20)
)
TABLESPACE example1
PARTITION BY RANGE (ca_address_sk)
(
PARTITION P1 VALUES LESS THAN(5000),
PARTITION P2 VALUES LESS THAN(10000),
PARTITION P3 VALUES LESS THAN(15000),
PARTITION P4 VALUES LESS THAN(20000),
PARTITION P5 VALUES LESS THAN(25000),
PARTITION P6 VALUES LESS THAN(30000),
PARTITION P7 VALUES LESS THAN(40000),
PARTITION P8 VALUES LESS THAN(MAXVALUE) TABLESPACE example2
)
ENABLE ROW MOVEMENT;

插入数据。
insert into tpcds.web_returns_p2 values(1, a, 1, a, a, a, a, a, a, a, a, 1.0, a),
(2, b, 2, b, b, b, b, b, b, b, b, 1.1, b),
(5050, c, 300, c, c, c, c, c, c, c, c, 1.2, c),
(14888, d, 400, d, d, d, d, d, d, d, d, 1.5, d);

2、管理分区表
修改分区表行迁移属性
alter table tpcds.web_returns_p2 disable row movement;
删除分区P8
alter table tpcds.web_returns_p2 drop partition P8;
增加分区P8,范围为 40000<= P8<=MAXVALUE
alter table tpcds.web_returns_p2 add partition P8 values less than (maxvalue);
重命名分区P8为P_9。
alter table tpcds.web_returns_p2 rename partition P8 to P_9;
重命名分区P_9为P8。
alter table tpcds.web_returns_p2 rename partition for (40000) to P8;
修改分区P6的表空间为example3。
alter table tpcds.web_returns_p2 move partition P6 tablespace example3;
修改分区P4的表空间为example4。
alter table tpcds.web_returns_p2 move partition P4 tablespace example4;

3、查询分区
select * from tpcds.web_returns_p2 partition(P1);
ca_address_sk | ca_address_id | ca_street_number | ca_street_name | ca_street_type | ca_suite_number | ca_city | ca_county | ca_state | ca_zip | ca_country | ca_gmt_offset | ca_
location_type
---------------+------------------+------------------+----------------+-----------------+-----------------+---------+-----------+----------+------------+------------+---------------+------
----------------
1 | a | 1 | a | a | a | a | a | a | a | a | 1.00 | a

2 | b | 2 | b | b | b | b | b | b | b | b | 1.10 | b

(2 rows)

4、删除分区表和表空间
drop table tpcds.web_returns_p2 ;
drop tablespace example1;
drop tablespace example2;
drop tablespace example3;
drop tablespace example4;

8、创建和管理索引

1、准备工作
步骤 1 创建表空间
create tablespace example1 relative location tablespace1/tablespace_1;
create tablespace example2 relative location tablespace2/tablespace_2;
create tablespace example3 relative location tablespace3/tablespace_3;
create tablespace example4 relative location tablespace4/tablespace_4;
步骤 2 创建表并在表中插入数据。
CREATE TABLE tpcds.web_returns_p2
(
ca_address_sk integer NOT NULL ,
ca_address_id character(16) NOT NULL ,
ca_street_number character(10) ,
ca_street_name character varying(60) ,
ca_street_type character(15) ,
ca_suite_number character(10) ,
ca_city character varying(60) ,
ca_county character varying(30) ,
ca_state character(2) ,
ca_zip character(10) ,
ca_country character varying(20) ,
ca_gmt_offset numeric(5,2) ,
ca_location_type character(20)
)
TABLESPACE example1
PARTITION BY RANGE (ca_address_sk)
(
PARTITION P1 VALUES LESS THAN(5000),
PARTITION P2 VALUES LESS THAN(10000),
PARTITION P3 VALUES LESS THAN(15000),
PARTITION P4 VALUES LESS THAN(20000),
PARTITION P5 VALUES LESS THAN(25000),
PARTITION P6 VALUES LESS THAN(30000),
PARTITION P7 VALUES LESS THAN(40000),
PARTITION P8 VALUES LESS THAN(MAXVALUE) TABLESPACE example2
)
ENABLE ROW MOVEMENT;
插入数据。
insert into tpcds.web_returns_p2 values
(1, a, 1, a, a, a, a, a, a, a, a, 1.0, a),
(2, b, 2, b, b, b, b, b, b, b, b, 1.1, b),
(5050, c, 300, c, c, c, c, c, c, c, c, 1.2, c),
(14888, d, 400, d, d, d, d, d, d, d, d, 1.5, d);

2、创建索引
创建分区表索引tpcds_web_returns_p2_index1,不指定索引分区的名称。#指定创建的分区索引为LOCAL索引。
create index tpcds_web_returns_p2_index1 on tpcds.web_returns_p2 (ca_address_id) local;

创建分区索引tpcds_web_returns_p2_index2,并指定索引分区的名称。
CREATE INDEX tpcds_web_returns_p2_index2 ON tpcds.web_returns_p2 (ca_address_sk) LOCAL
(
PARTITION web_returns_p2_P1_index,
PARTITION web_returns_p2_P2_index TABLESPACE example3,
PARTITION web_returns_p2_P3_index TABLESPACE example4,
PARTITION web_returns_p2_P4_index,
PARTITION web_returns_p2_P5_index,
PARTITION web_returns_p2_P6_index,
PARTITION web_returns_p2_P7_index,
PARTITION web_returns_p2_P8_index
) TABLESPACE example2;

2、管理索引
修改索引分区的表空间
修改索引分区web_returns_p2_P2_index的表空间为example1。
alter index tpcds.tpcds_web_returns_p2_index2 move partition web_returns_p2_P2_index tablespace example1;
修改索引分区web_returns_p2_P3_index的表空间为example2。
alter index tpcds.tpcds_web_returns_p2_index2 move partition web_returns_p2_P3_index tablespace example3;
执行如下命令对索引分区web_returns_p2_P8_index重命名web_returns_p2_P8_index_new。
alter index tpcds.tpcds_web_returns_p2_index2 rename partition web_returns_p2_P8_index to web_returns_p2_P8_index_new;

3、查询索引
执行如下命令查询系统和用户定义的所有索引。
select relname from pg_class where relkind=i;
执行如下命令查询指定索引的信息。
openGauss=# \\di+ tpcds.tpcds_web_returns_p2_index1
List of relations
Schema | Name | Type | Owner | Table | Size | Storage | Description
--------+-----------------------------+-------+-------+----------------+-------+---------+-------------
tpcds | tpcds_web_returns_p2_index1 | index | omm | web_returns_p2 | 88 kB | |
(1 row)

4、删除索引
drop index tpcds.tpcds_web_returns_p2_index1;
drop index tpcds.tpcds_web_returns_p2_index2;

5、索引创建举例
openGauss支持4种创建索引的方式:唯一索引、多字段索引、部分索引、表达式索引。
步骤 1 创建一个普通表。
CREATE TABLE tpcds.customer_address_bak AS TABLE tpcds.web_returns_p2;
步骤 2 创建普通索引。
如果对于tpcds.customer_address_bak表,需要经常进行以下查询。
SELECT ca_address_sk FROM tpcds.customer_address_bak WHERE ca_address_sk=14888;
使用以下命令创建索引。
CREATE INDEX index_wr_returned_date_sk ON tpcds.customer_address_bak (ca_address_sk);
步骤 3 创建多字段索引
假如用户需要经常查询表tpcds.customer_address_bak中ca_address_sk是5050,且ca_street_number小于1000的记录,使用以下命令进行查
询。
SELECT ca_address_sk,ca_address_id FROM tpcds.customer_address_bak WHERE ca_address_sk = 5050 AND ca_street_number
< 1000;
使用以下命令在字段ca_address_sk和ca_street_number上定义一个多字段索引。
CREATE INDEX more_column_index ON tpcds.customer_address_bak(ca_address_sk ,ca_street_number);
步骤 4 创建部分索引
如果只需要查询ca_address_sk为5050的记录,可以创建部分索引来提升查询效率。
CREATE INDEX part_index ON tpcds.customer_address_bak(ca_address_sk) WHERE ca_address_sk = 5050;
步骤 5 创建表达式索引
假如经常需要查询ca_street_number小于1000的信息,执行如下命令进行查询。
SELECT * FROM tpcds.customer_address_bak WHERE trunc(ca_street_number) < 1000;
可以为上面的查询创建表达式索引:
CREATE INDEX para_index ON tpcds.customer_address_bak (trunc(ca_street_number));
步骤 6 删除tpcds.customer_address_bak表。
postgres=# DROP TABLE tpcds.customer_address_bak;

9、创建和管理视图

1、创建视图
执行如下命令创建普通视图MyView。
create or replace view MyView as select * from tpcds.web_returns_p2 where trunc(ca_address_sk) > 10000;
执行如下命令创建物化视图MV_MyView。
create materialized view MV_MyView as select * from tpcds.web_returns_p2 where trunc(ca_address_sk) > 5000;
物化视图使用场景:报表统计、大表统计等,定期固化数据快照, 避免对多表重复跑相同的查询。
物化视图使用注意事项:
不可以在临时表或全局临时表上创建。
当基表数据发生变化时,需要使用刷新命令保持物化视图与基表同步。

2、管理视图
执行如下命令查询MyView视图。
select * from myview ;
查看普通图的具体信息
执行如下命令查询MyView视图的详细信息。
openGauss=# \\d+ myview
View "public.myview"
Column | Type | Modifiers | Storage | Description
------------------+-----------------------+-----------+----------+-------------
ca_address_sk | integer | | plain |
ca_address_id | character(16) | | extended |
ca_street_number | character(10) | | extended |
ca_street_name | character varying(60) | | extended |
ca_street_type | character(15) | | extended |
ca_suite_number | character(10) | | extended |
ca_city | character varying(60) | | extended |
ca_county | character varying(30) | | extended |
ca_state | character(2) | | extended |
ca_zip | character(10) | | extended |
ca_country | character varying(20) | | extended |
ca_gmt_offset | numeric(5,2) | | main |
ca_location_type | character(20) | | extended |
View definition:
SELECT *
FROM tpcds.web_returns_p2
WHERE trunc(web_returns_p2.ca_address_sk::double precision) > 10000::double precision;

查询物化视图
执行如下命令查询MV_MyView视图。
openGauss=# select * from mv_myview ;
ca_address_sk | ca_address_id | ca_street_number | ca_street_name | ca_street_type | ca_suite_number | ca_city | ca_county | ca_state | ca_zip | ca_country | ca_gmt_offset | ca_
location_type
---------------+------------------+------------------+----------------+-----------------+-----------------+---------+-----------+----------+------------+------------+---------------+------
----------------
5050 | c | 300 | c | c | c | c | c | c | c | c | 1.20 | c

14888 | d | 400 | d | d | d | d | d | d | d | d | 1.50 | d

(2 rows)

查看物化图的具体信息
执行如下命令查询MyView视图的详细信息。
openGauss-# \\d+ mv_myview
Materialized view "public.mv_myview"
Column | Type | Modifiers | Storage | Stats target | Description
------------------+-----------------------+-----------+----------+--------------+-------------
ca_address_sk | integer | | plain | |
ca_address_id | character(16) | | extended | |
ca_street_number | character(10) | | extended | |
ca_street_name | character varying(60) | | extended | |
ca_street_type | character(15) | | extended | |
ca_suite_number | character(10) | | extended | |
ca_city | character varying(60) | | extended | |
ca_county | character varying(30) | | extended | |
ca_state | character(2) | | extended | |
ca_zip | character(10) | | extended | |
ca_country | character varying(20) | | extended | |
ca_gmt_offset | numeric(5,2) | | main | |
ca_location_type | character(20) | | extended | |
Rules:
"_RETURN" AS
ON SELECT TO mv_myview DO INSTEAD SELECT web_returns_p2.ca_address_sk,
web_returns_p2.ca_address_id, web_returns_p2.ca_street_number,
web_returns_p2.ca_street_name, web_returns_p2.ca_street_type,
web_returns_p2.ca_suite_number, web_returns_p2.ca_city,
web_returns_p2.ca_county, web_returns_p2.ca_state, web_returns_p2.ca_zip,
web_returns_p2.ca_country, web_returns_p2.ca_gmt_offset,
web_returns_p2.ca_location_type
FROM tpcds.web_returns_p2
WHERE trunc(web_returns_p2.ca_address_sk::double precision) > 5000::double precision
Replica Identity: NOTHING
Has OIDs: no
Options: orientation=row, compression=no

给基表新增二条记录,然后刷新物化视图。
insert into tpcds.web_returns_p2 values
(7050, c, 300, c, c, c, c, c, c, c, c, 1.2, c),
(8888, d, 400, d, d, d, d, d, d, d, d, 1.5, d);
查询,如果不刷新,物化视图是不变的
openGauss=# select * from mv_myview ;
ca_address_sk | ca_address_id | ca_street_number | ca_street_name | ca_street_type | ca_suite_number | ca_city | ca_county | ca_state | ca_zip | ca_country | ca_gmt_offset | ca_
location_type
---------------+------------------+------------------+----------------+-----------------+-----------------+---------+-----------+----------+------------+------------+---------------+------
----------------
5050 | c | 300 | c | c | c | c | c | c | c | c | 1.20 | c

14888 | d | 400 | d | d | d | d | d | d | d | d | 1.50 | d

(2 rows)
由于基表数据变更过,可以执行如下命令刷新物化视图MV_MyView。
refresh materialized view mv_myview ;
再查看物化视图MV_MyView,发现多了二条记录。
openGauss=# select * from mv_myview ;
ca_address_sk | ca_address_id | ca_street_number | ca_street_name | ca_street_type | ca_suite_number | ca_city | ca_county | ca_state | ca_zip | ca_country | ca_gmt_offset | ca_
location_type
---------------+------------------+------------------+----------------+-----------------+-----------------+---------+-----------+----------+------------+------------+---------------+------
----------------
5050 | c | 300 | c | c | c | c | c | c | c | c | 1.20 | c

7050 | c | 300 | c | c | c | c | c | c | c | c | 1.20 | c

8888 | d | 400 | d | d | d | d | d | d | d | d | 1.50 | d

14888 | d | 400 | d | d | d | d | d | d | d | d | 1.50 | d

(4 rows)

3、删除视图
执行如下命令删除视图。
drop view myview ;
drop materialized view mv_myview ;

10、创建和管理序列

方法一:声明字段类型为序列整型(serial)来定义标识符字段。
例如:
CREATE TABLE T1
(id serial,
name text
);

方法二:创建序列,并通过nextval(‘sequence_name’)函数指定为某一字段的默认值。
步骤 1 创建序列。
CREATE SEQUENCE seq1 cache 100;
步骤 2 指定为某一字段的默认值,使该字段具有唯一标识属性。
CREATE TABLE T2
(
id int not null default nextval(seq1),
name text
);
步骤 3 指定序列与列的归属关系。
将序列和一个表的指定字段进行关联。删除此字段或其所在表的时候会自动删除已关联的序列。
ALTER SEQUENCE seq1 OWNED BY T2.id;

删除序列
DROP SEQUENCE seq1 CASCADE;

11、创建和管理存储过程

1、创建存储过程
步骤 1 创建表t_test。
create table t_test(c1 int, c2 int);
步骤 2 创建存储过程insert_data。
create or replace procedure insert_data
is
a int;
b int;
begin
a=1;
b=2;
insert into t_test values(a,b);
insert into t_test values(b,a);
end;
/
步骤 3 调用存储过程。
call insert_data();
步骤 4 查询表内容。
select * from t_test;
c1 | c2
----+----
1 | 2
2 | 1
(2 rows)

2、管理存储过程
管理存储过程,命令如下:
\\sf insert_data
结果如下:
CREATE OR REPLACE FUNCTION public.insert_data()
RETURNS void
LANGUAGE plpgsql
NOT FENCED NOT SHIPPABLE
AS $function$ DECLARE
a int;
b int;
begin
a=1;
b=2;
insert into t_test values(a,b);
insert into t_test values(b,a);
end$function$

3、删除存储过程,命令如下:
drop procedure insert_data;

12、创建和管理全局临时表

1、会话级全局临时表
数据会话级可见,其他会话看不到数据,但表结构可见。
步骤 1 创建临时表t_test2。
建表语句,使用ON COMMIT PRESERVE ROWS
CREATE GLOBAL TEMPORARY TABLE t_test2(
id integer,
lbl text
) ON COMMIT PRESERVE ROWS;
步骤 2 在当前会话插入数据并查询。
insert into t_test2 values(1,data1);
insert into t_test2 values(2,data2);
select * from t_test2;
id | lbl
----+-------
1 | data1
2 | data2
(2 rows)
步骤 3 退出会话再查看。
postgres=# \\q
[omm@ecs-32de ~]$ gsql -d postgres -p 26000 -r
gsql ((openGauss 1.0.1 build 13b34b53) compiled at 2020-10-12 02:01:33 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
postgres=# \\dt t_test2
List of relations
Schema | Name | Type | Owner | Storage
--------+---------+-------+-------+--------------------------------------------------------------
public | t_test2 | table | omm | orientation=row,compression=no,on_commit_delete_rows=false
(1 row)
步骤 4 查询表内容。
select * from t_test2;
id | lbl
----+-----
(0 rows)
此时可以发现,在其它会话中表结构可以看到,但是表数据看不到。
步骤 5 删除临时表。
drop table t_test2;

2、事务级全局临时表
数据事务级可见,事务提交后数据删除。
步骤 1 创建临时表t_test3。
建表语句,使用ON COMMIT DELETE ROWS
CREATE GLOBAL TEMPORARY TABLE t_test3(
id integer,
lbl text
) ON COMMIT DELETE ROWS;
步骤 2 插入数据并查询。
先用begin开始一个事务,接着给表插入数据,此时再对表进行查询,可以查出相应数据。
begin;
insert into t_test3 values(1,data1);
select * from t_test3;
id | lbl
----+-------
1 | data1
(1 row)
步骤 3 结束事务再查询。
先用commit提交来结束事务,此时再对表进行查询,可以发现已经查询不出数据了。
commit;
select * from t_test3;
id | lbl
----+-----
(0 rows) (1 row)
步骤 4 删除临时表。
drop table t_test3;

opengauss维护管理之客户端连接超时

一、概述使用命令或者navicat连接openGauss后,过一段时间会超时退出报错:"WARNING:Sessionunusedtimeout.FATAL:terminatingconnectionduetoadministratorcommand"可以退出重新登录\\qgsql-dpostgres-p26000-r二、设置vi/opt/huawei/install/data/dn01/postgresql.confsession_tim... 查看详情

opengauss维护管理之db性能检查gs_checkperf

一、概述1、背景信息openGauss提供了gs_checkperf工具来帮助对openGauss级别(主机CPU占用率、GaussCPU占用率、I/O使用情况等)、节点级别(CPU使用情况、内存使用情况、I/O使用情况)、会话/进程级别(CPU使用情况、内存使用情况、I/O... 查看详情

opengauss维护管理之db健康检查gs_check

...例如​​gs_check​​​、​​gs_checkos​​等,帮助用户在openGauss运行过程中,全量的检查openGauss运行环境、操作系统环境、网络环境及数据库执行环境,也有助于在openGauss重大操作之前对各类环境进行全面检查,有效保证操作执... 查看详情

opengauss维护管理之日志收集gs_collector

一、概述当openGauss发生故障时,使用此工具收集OS信息、日志信息以及配置文件等信息,来定位问题。可以使用-C参数,指定收集不同的信息内容,具体支持收集的内容信息如表所示。1、gs_collector内容收集对照表TypeNameContent描述... 查看详情

opengauss维护管理之最大连接数设置

...、登录服务器gsql-dpostgres-p26000-r2、查看当前已使用连接数openGauss=#selectcount(1)frompg_stat_activity;count-------10(1row)3、查看数据库设置的最大连接数openGauss=#SHOWmax_connections;max_connections-----------------5000(1row)5000表示数据库设置的最大连接个... 查看详情

opengauss维护管理之大小写敏感

一、概述1、基于PostgreSQL数据敏感openGauss源于PostgreSQLPostgreSQL对数据大小写敏感:1、PG中默认是大小写不敏感,表名、字段名等不区分大小写,大写字母会自动转换为小写字母,需要使用大写字母时需要使用双引号,或借助函数2... 查看详情

opengauss维护管理之学校数据模型

一、关系模型1、关系对于B校中的5个对象,分别建立属于每个对象的属性集合,具体属性描述如下:●学生(学号,姓名,性别,出生日期,入学日期,家庭住址)●教师(教师编号,教师姓名,职称,性别,年龄,入职日期)... 查看详情

opengauss维护管理之explain执行计划

...机模式中是被禁止使用的。假如使用,会产生如下错误。openGauss=#createtablestudent(idint,namechar(20));CREATETABLEopenGauss=#explain(nodestrue)insertintostudentvalues(5,a),(6,b);ERROR:unrecogn 查看详情

opengauss数据库日志管理

本文介绍openGauss数据库日志相关内容和管理方法,了解openGauss数据库中日志管理的内容,并对数据库进行日常管理维护、问题定位和数据库恢复的操作。环境说明组网说明本实验环境为openGauss数据库管理系统,安装在华为云openEu... 查看详情

opengauss运维操作命令及其相关介绍

一、前言​数据库作为信息系统基础底座软件,在大数据背景下,数据库的数据量和节点规模日益增长,数据库使用方越来越看重系统运行是否稳定、安全和高效,这也使数据库自身的运行与维护的要求也随之增高。是否拥有成... 查看详情

十opengauss安装用户和用户组

...概述为了实现安装过程中安装帐户权限最小化,及安装后openGauss的系统运行安全性,安装脚本在安装过程中会自动按照用户指定内容创建安装用户,并将此用户作为后续运行和维护openGauss的管理员帐户。二、用户和组1、操作系... 查看详情

opengauss数据库之sql介绍

... 1、SQL的概念 2、SQL的特点 3、SQL发展简史二、openGauss数据库的“SQL” 1、数据类型(常用)  数值类型  货币类型  布尔类型  字符类型  日期/时间类型 2、openGauss数据库SQL基... 查看详情

猿创征文|国产数据库之opengauss的单机主备部署及快速入门(代码片段)

猿创征文|国产数据库之openGauss的单机主备部署及快速入门一、openGauss介绍1.openGauss简介2.openGauss特点3.openGauss的逻辑架构图二、环境检查1.节点规划2.操作系统版本三、安装前环境配置1.检查admin普通用户2.给安装目录授权3.配置/etc/... 查看详情

上层系统之基础数据维护

...地址。普通的MES系统主要针对工厂车间级别的数据建模与维护,一个MES系统的基础数据建模大概可以分为以下几个部分:   MES系统最难的不是代码,而是逻辑。一个好的系统解决方案必然要逻辑清晰,操作便捷,能够... 查看详情

操作系统笔记进程管理之管理

调度contextswitch:savecontext(PCB),restorecontext(PCB).开销如何维护各个进程的状态:PCB+队列(job队列,ready队列,I/O设备队列)whoisthenexttorun?: CPU调度器(短期100ms):goodrepsonsetime接纳调度器(长期1+min): thedegreeofmultiprogrammin 查看详情

参赛作品101充实opengauss每日一练21天学习完成大总结

...学习到了openGauss的安装,用户的权限管理,表的基本操作,数据的导入导出,索引的维护,过程函数游标等的创建,还有执行计划的查询,特别是还体验了列存储的速度,让自己从一个openGauss小白变得强... 查看详情

0c#winform开发权限管理历程之权限管理概述

参考技术A简单的权限管理一般包括三部分用户管理可以维护可以进入系统操作的用户,一般包括用户ID,用户名称,用户密码等几个字段。用户管理一般介绍的比较多我就不详细介绍了。功能管理可以维护系统提供的全部功能,... 查看详情

oraclerman物理备份技术之管理维护

参考技术A  恢复管理维护任务  这部分主要介绍一下如何管理维护RMAN存储库和快速恢复区  没有恢复目录的情况下如何管理RMAN存储库  交叉验证备份(CROSSCHECKINGBACKUP)  删除备份  利用RMAN删除数据库  多个通... 查看详情