openGauss daily practice day 8 | A database in openGauss can be stored in multiple table spaces

1. Learning objectives

Learn about the relationship between tablespaces and database objects.
All tables created in the musicdb database do not specify the name of the table space, so they are all created in the default table space music_tbs of the database. When we create the table warehouse_t1 in the musicdb database, we explicitly specify when creating it in the table space ds_location1 , the table will be stored in the specified tablespace. That is, objects in a database can be located in different tablespaces.

2. Course study

1. Connect to the database and prepare the test environment

--进入数据库omm,创建表空间、测试数据库
su - omm
gsql -r
drop DATABASE  IF EXISTS  musicdb;
drop DATABASE  IF EXISTS  musicdb1;
drop DATABASE  IF EXISTS  musicdb2;
drop DATABASE  IF EXISTS  musicdb3;
drop tablespace IF EXISTS music_tbs;

CREATE TABLESPACE music_tbs RELATIVE LOCATION 'tablespace/test_ts1';
CREATE DATABASE musicdb  WITH TABLESPACE = music_tbs;

--执行下面的SQL语句,创建用户user1:

 CREATE USER user1 IDENTIFIED BY 'kunpeng@1234';
 
--授予user1数据库系统的SYSADMIN权限:

ALTER USER user1 SYSADMIN;
root@modb:~# su - omm
omm@modb:~$ gsql -r
gsql ((openGauss 3.0.0 build 02c14696) compiled at 2022-04-01 18:12:00 commit 0 last mr  )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

omm=# drop DATABASE  IF EXISTS  musicdb;
NOTICE:  database "musicdb" does not exist, skipping
DROP DATABASE
omm=# drop DATABASE  IF EXISTS  musicdb1;
NOTICE:  database "musicdb1" does not exist, skipping
DROP DATABASE
omm=# drop DATABASE  IF EXISTS  musicdb2;
NOTICE:  database "musicdb2" does not exist, skipping
DROP DATABASE
omm=# drop DATABASE  IF EXISTS  musicdb3;
NOTICE:  database "musicdb3" does not exist, skipping
DROP DATABASE
omm=# drop tablespace IF EXISTS music_tbs;
NOTICE:  Tablespace "music_tbs" does not exist, skipping.
DROP TABLESPACE
omm=# CREATE TABLESPACE music_tbs RELATIVE LOCATION 'tablespace/test_ts1';
CREATE TABLESPACE
omm=# CREATE DATABASE musicdb  WITH TABLESPACE = music_tbs;

CREATE DATABASE
omm=# 
omm=# CREATE USER user1 IDENTIFIED BY 'kunpeng@1234';
NOTICE:  The encrypted password contains MD5 ciphertext, which is not secure.
CREATE ROLE
omm=# ALTER USER user1 SYSADMIN;
ALTER ROLE

2. Create table space, view table space

--执行下面的命令,查看当前表空间:
\db
--创建一个新的名为ds_location1的表空间:
 CREATE TABLESPACE ds_location1 RELATIVE LOCATION 'tablespace/tablespace_1';
--执行下面的命令,查看实例当前有哪些表空间:
\db
omm=# \db
           List of tablespaces
    Name    | Owner |      Location       
------------+-------+---------------------
 music_tbs  | omm   | tablespace/test_ts1
 pg_default | omm   | 
 pg_global  | omm   | 
(3 rows)

omm=# CREATE TABLESPACE ds_location1 RELATIVE LOCATION 'tablespace/tablespace_1';
CREATE TABLESPACE
omm=# \db
              List of tablespaces
     Name     | Owner |        Location         
--------------+-------+-------------------------
 ds_location1 | omm   | tablespace/tablespace_1
 music_tbs    | omm   | tablespace/test_ts1
 pg_default   | omm   | 
 pg_global    | omm   | 
(4 rows)

omm=# 

3. Use the user user1 to access the musicdb database, create the table warehouse_t1 in the table space ds_location1, and check which tables currently exist in the musicdb database:

\c musicdb user1
 create table warehouse_t1 (col1 char(10)) tablespace ds_location1;
select table_catalog, table_schema, table_name, table_type
  from information_schema.tables
   where table_schema not in ('pg_catalog', 'information_schema','dbe_perf');
musicdb=> \c musicdb user1
Password for user user1: 
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "musicdb" as user "user1".
musicdb=> create table warehouse_t1 (col1 char(10)) tablespace ds_location1;
CREATE TABLE
musicdb=> select table_catalog, table_schema, table_name, table_type
musicdb->   from information_schema.tables
musicdb->    where table_schema not in ('pg_catalog', 'information_schema','dbe_perf');
 table_catalog |  table_schema   |  table_name  | table_type 
---------------+-----------------+--------------+------------
 musicdb       | db4ai           | snapshot     | BASE TABLE
 musicdb       | dbe_pldeveloper | gs_errors    | BASE TABLE
 musicdb       | dbe_pldeveloper | gs_source    | BASE TABLE
 musicdb       | public          | warehouse_t1 | BASE TABLE
(4 rows)

musicdb=> 

4. Which tablespace is the query table in?
The system table is in the default tablespace, and the non-system table is in the specified tablespace (otherwise it is in the default tablespace)

--建表warehouse_t1指定表空间ds_location1,查看表warehouse_t1所在的表空间:
select * from pg_tables where tablename = 'warehouse_t1';

--创建表warehouse_t12未指定表空间,则在默认表空间(不显示默认表空间名)
create table warehouse_t12 (col1 char(10));
select * from pg_tables where tablename = 'warehouse_t12';
musicdb=> select * from pg_tables where tablename = 'warehouse_t1';
 schemaname |  tablename   | tableowner |  tablespace  | hasindexes | hasrules | hastriggers | tablecreator |            created            |         last_ddl_time      
   
------------+--------------+------------+--------------+------------+----------+-------------+--------------+-------------------------------+----------------------------
---
 public     | warehouse_t1 | user1      | ds_location1 | f          | f        | f           | user1        | 2022-12-01 11:24:42.613711+08 | 2022-12-01 11:24:42.613711+
08
(1 row)

musicdb=> create table warehouse_t12 (col1 char(10));
CREATE TABLE
musicdb=> select * from pg_tables where tablename = 'warehouse_t12';
 schemaname |   tablename   | tableowner | tablespace | hasindexes | hasrules | hastriggers | tablecreator |            created            |         last_ddl_time       
  
------------+---------------+------------+------------+------------+----------+-------------+--------------+-------------------------------+-----------------------------
--
 public     | warehouse_t12 | user1      |            | f          | f        | f           | user1        | 2022-12-01 11:27:36.858823+08 | 2022-12-01 11:27:36.858823+0
8
(1 row)

musicdb=> 

6. View the default tablespace of the openGuass database

select datname,dattablespace,spcname from pg_database d, pg_tablespace t where d.dattablespace=t.oid
musicdb=> select datname,dattablespace,spcname from pg_database d, pg_tablespace t where d.dattablespace=t.oid;
  datname  | dattablespace |  spcname   
-----------+---------------+------------
 template1 |          1663 | pg_default
 omm       |          1663 | pg_default
 musicdb   |         16389 | music_tbs
 template0 |          1663 | pg_default
 postgres  |          1663 | pg_default
(5 rows)

musicdb=> 

7. Query the objects on the default tablespace of the database

select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)),reltablespace,relowner  
from pg_class a  
where a.relkind in ('r', 'i')  
and reltablespace='0'  
order by a.relpages desc;
musicdb=> select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)),reltablespace,relowner  
musicdb-> from pg_class a  
musicdb-> where a.relkind in ('r', 'i')  
and reltablespace='0'  
musicdb-> musicdb-> order by a.relpages desc;
                    relname                     | relkind | relpages | pg_size_pretty | reltablespace | relowner 
------------------------------------------------+---------+----------+----------------+---------------+----------
 pg_attribute                                   | r       |      184 | 1472 kB        |             0 |       10
 pg_proc                                        | r       |      140 | 1120 kB        |             0 |       10
 pg_depend                                      | r       |       59 | 472 kB         |             0 |       10
 pg_class                                       | r       |       52 | 416 kB         |             0 |       10
 pg_attribute_relid_attnam_index                | i       |       44 | 352 kB         |             0 |       10
 pg_proc_proname_all_args_nsp_index             | i       |       41 | 328 kB         |             0 |       10
 pg_proc_proname_args_nsp_new_index             | i       |       39 | 312 kB         |             0 |       10
 pg_proc_proname_args_nsp_index                 | i       |       39 | 312 kB         |             0 |       10
 pg_rewrite                                     | r       |       37 | 296 kB         |             0 |       10
 pg_description                                 | r       |       31 | 248 kB         |             0 |       10
 pg_attribute_relid_attnum_index                | i       |       30 | 240 kB         |             0 |       10
 pg_depend_depender_index                       | i       |       34 | 272 kB         |             0 |       10
 pg_depend_reference_index                      | i       |       34 | 272 kB         |             0 |       10
 pg_type                                        | r       |       20 | 160 kB         |             0 |       10
 pg_statistic                                   | r       |       19 | 152 kB         |             0 |       10
 pg_operator                                    | r       |       15 | 120 kB         |             0 |       10
 pg_class_relname_nsp_index                     | i       |       14 | 112 kB         |             0 |       10
 pg_proc_oid_index                              | i       |       13 | 104 kB         |             0 |       10
 pg_class_tblspc_relfilenode_index              | i       |       10 | 80 kB          |             0 |       10
 pg_amop                                        | r       |        9 | 72 kB          |             0 |       10
--More-- pg_description_o_c_o_index                     | i       |       16 | 128 kB         |             0 |       10
 pg_class_oid_index                             | i       |        7 | 56 kB          |             0 |       10
 sql_features                                   | r       |        7 | 56 kB          |             0 |       10
 pg_type_typname_nsp_index                      | i       |        7 | 56 kB          |             0 |       10
 pg_index                                       | r       |        7 | 56 kB          |             0 |       10
 pg_amop_fam_strat_index                        | i       |        6 | 48 kB          |             0 |       10
 pg_operator_oprname_l_r_n_index                | i       |        6 | 48 kB          |             0 |       10
 pg_amop_opr_fam_index                          | i       |        6 | 48 kB          |             0 |       10
 pg_amop_oid_index                              | i       |        5 | 40 kB          |             0 |       10
 pg_operator_oid_index                          | i       |        5 | 40 kB          |             0 |       10
 pg_type_oid_index                              | i       |        5 | 40 kB          |             0 |       10
 pg_opclass_am_name_nsp_index                   | i       |        4 | 32 kB          |             0 
...
 gs_column_keys_args                            | r       |        0 | 0 bytes        |             0 |       10
 gs_client_global_keys_args                     | r       |        0 | 0 bytes        |             0 |       10
 gs_client_global_keys                          | r       |        0 | 0 bytes        |             0 |       10
 pg_publication_rel                             | r       |        0 | 0 bytes        |             0 |       10
 gs_matview                                     | r       |        0 | 0 bytes        |             0 |       10
 gs_encrypted_proc                              | r       |        0 | 0 bytes        |             0 |       10
 gs_job_argument                                | r       |        0 | 0 bytes        |             0 |       10
 warehouse_t12                                  | r       |        0 | 0 bytes        |             0 |    16391
 gs_asp                                         | r       |        0 | 0 bytes        |             0 |       10
 gs_matview_dependency                          | r       |        0 | 0 bytes        |             0 |       10
 pg_object                                      | r       |        0 | 8192 bytes     |             0 |       10
 gs_auditing_policy_privileges                  | r       |        0 | 0 bytes        |             0 |       10
 pg_synonym                                     | r       |        0 | 0 bytes        |             0 |       10
(316 rows)

8. Query objects on tablespace ds_location1

\c musicdb user1
select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)),reltablespace,relowner  
from pg_class a, pg_tablespace tb  
where a.relkind in ('r', 'i')  
and a.reltablespace=tb.oid  
and tb.spcname='ds_location1'  
order by a.relpages desc;
musicdb=> \c musicdb user1
Password for user user1: 
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "musicdb" as user "user1".
musicdb=> musicdb-> select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)),reltablespace,relowner  
musicdb-> from pg_class a, pg_tablespace tb  
where a.relkind in ('r', 'i')  
musicdb-> and a.reltablespace=tb.oid  
musicdb-> and tb.spcname='ds_location1'  
musicdb-> order by a.relpages desc;
   relname    | relkind | relpages | pg_size_pretty | reltablespace | relowner 
--------------+---------+----------+----------------+---------------+----------
 warehouse_t1 | r       |        0 | 0 bytes        |         16396 |    16391
(1 row)

musicdb=> 

3. Homework

1. Create tablespace newtbs1, ds_location1, view tablespace

create tablespace newtbs1 relative location ‘tablespace/tablespace_2’;
create tablespace ds_location1 relative location ‘tablespace/tablespace_1’;

musicdb=> \db
           List of tablespaces
    Name    | Owner |      Location       
------------+-------+---------------------
 music_tbs  | omm   | tablespace/test_ts1
 pg_default | omm   | 
 pg_global  | omm   | 
(3 rows)

musicdb=> 
musicdb=> 
musicdb=> create tablespace newtbs1 relative location 'tablespace/tablespace_2';
CREATE TABLESPACE
musicdb=> create tablespace ds_location1 relative location 'tablespace/tablespace_1';
CREATE TABLESPACE
musicdb=> \db
              List of tablespaces
     Name     | Owner |        Location         
--------------+-------+-------------------------
 ds_location1 | user1 | tablespace/tablespace_1
 music_tbs    | omm   | tablespace/test_ts1
 newtbs1      | user1 | tablespace/tablespace_2
 pg_default   | omm   | 
 pg_global    | omm   | 
(5 rows)

musicdb=> 

2. Create a database newdb1, the default table space is newtbs1

CREATE DATABASE newdb1 WITH TABLESPACE = newtbs1;
\l

musicdb=> CREATE DATABASE newdb1  WITH TABLESPACE = newtbs1;
CREATE DATABASE
musicdb=> \l
                         List of databases
   Name    | Owner | Encoding | Collate | Ctype | Access privileges 
-----------+-------+----------+---------+-------+-------------------
 musicdb   | omm   | UTF8     | C       | C     | 
 newdb1    | user1 | UTF8     | C       | C     | 
 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
(6 rows)

3. Create user user5 and grant SYSADMIN permission to access database newdb1, and create a table newt1 in table space ds_location1 (table structure customization)

--执行下面的SQL语句,创建用户user5:
 CREATE USER user5 IDENTIFIED BY 'kunpeng@1234';
--授予user1数据库系统的SYSADMIN权限:
ALTER USER user5 SYSADMIN;
--使用user5用户,访问newdb1数据库
\c newdb1 user5
create table newt1 (id int primary key,col1 char(10)) tablespace ds_location1;

musicdb=> CREATE USER user5 IDENTIFIED BY 'kunpeng@1234';
NOTICE:  The encrypted password contains MD5 ciphertext, which is not secure.
musicdb=> CREATE ROLE

musicdb=> ALTER USER user5 SYSADMIN;
ALTER ROLE
musicdb=> \du
 omm       | Sysadmin, Create role, Create DB, Replication, Administer audit, Monitoradmin, Operatoradmin, Policyadmin, UseFT | {
    
    }
 user1     | Sysadmin                                                                                                         | {
    
    }
 user5     | Sysadmin                                                                                                         | {
    
    }

                                                              List of roles
 Role name |                                                    Attributes                                                    | Member of 
-----------+------------------------------------------------------------------------------------------------------------------+-----------
 gaussdb   | Sysadmin                                                                                                         | {
    
    }
musicdb=> 
musicdb=> \c newdb1 user5
Password for user user5: 
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "newdb1" as user "user5".
newdb1=> create table newt1 (id int primary key,col1 char(10)) tablespace ds_location1;
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "newt1_pkey" for table "newt1"
CREATE TABLE
newdb1=> 

4. View the table space where the table is located

–Create table newt1, specify table space ds_location1, and view the table space where table newt1 is located:
select * from pg_tables where tablename = 'newt1';

newdb1=> select * from pg_tables where tablename = 'newt1';
 schemaname | tablename | tableowner |  tablespace  | hasindexes | hasrules | hastriggers | tablecreator |            created            |         last_ddl_time         
------------+-----------+------------+--------------+------------+----------+-------------+--------------+-------------------------------+-------------------------------
 public     | newt1     | user5      | ds_location1 | t          | f        | f           | user5        | 2022-12-01 11:47:28.821703+08 | 2022-12-01 11:47:28.821703+08
(1 row)

newdb1=> 

5. Check the objects on tablespace newtbs1 and ds_location1

\c newdb1 user5
select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)),reltablespace,relowner  
from pg_class a, pg_tablespace tb  
where a.relkind in ('r', 'i')  
and a.reltablespace=tb.oid  
and tb.spcname='newtbs1'  
order by a.relpages desc;

select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)),reltablespace,relowner  
from pg_class a, pg_tablespace tb  
where a.relkind in ('r', 'i')  
and a.reltablespace=tb.oid  
and tb.spcname='ds_location1'  
order by a.relpages desc;

newdb1=> \c newdb1 user5
Password for user user5: 
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "newdb1" as user "user5".
newdb1=> 
newdb1=> 
newdb1=> select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)),reltablespace,relowner  
newdb1-> from pg_class a, pg_tablespace tb  
newdb1-> where a.relkind in ('r', 'i')  
newdb1-> and a.reltablespace=tb.oid  
newdb1-> and tb.spcname='newtbs1'  
newdb1-> order by a.relpages desc;
 relname | relkind | relpages | pg_size_pretty | reltablespace | relowner 
---------+---------+----------+----------------+---------------+----------
(0 rows)

newdb1=> select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)),reltablespace,relowner  
newdb1-> from pg_class a, pg_tablespace tb  
newdb1-> where a.relkind in ('r', 'i')  
newdb1-> and a.reltablespace=tb.oid  
newdb1-> newdb1-> and tb.spcname='ds_location1'  
order by a.relpages desc;
 relname | relkind | relpages | pg_size_pretty | reltablespace | relowner 
---------+---------+----------+----------------+---------------+----------
 newt1   | r       |        0 | 0 bytes        |         16408 |    16410
(1 row)

newdb1=> 

Guess you like

Origin blog.csdn.net/qq_40220309/article/details/128131944