一、概述
mysql中每张表几乎都使用独立表空间,所以索引名可以几张表同名而不受影响
opengauss对于PRIMARY KEY索引会统一命名为"表名_pkey"
opengauss对于索引同一个数据库索引名唯一,即使两张表创建在不同的表空间
opengauss对于索引也会建成表的格式,可以用查询表结构的语句查询
二、试验
1、准备工作
1、连接数据库
gsql -d postgres -p 26000 -r
2、创建用户
CREATE USER joe WITH PASSWORD 'Mysql@123456';
3、创建数据库
CREATE DATABASE database_test WITH OWNER joe ENCODING 'utf8' dbcompatibility='B';
4、创建表空间
CREATE TABLESPACE example1 RELATIVE LOCATION 'tablespace1/tablespace_1';
5、切换用户并创建joe模式
\c database_test
create schema AUTHORIZATION joe;
6、额外补充
此处对dbcompatibility做补充
DBCOMPATIBILITY [ = ] compatibility_type
指定兼容的数据库的类型,默认兼容O。
取值范围:A、B、C、PG。分别表示兼容Oracle、MySQL、Teradata和PostgreSQL
如果不指定B,要是建表语句有COMMENT注释就会报错:
"ERROR: Comment is supported only in B compatible database."
2、直接使用还是退出重新登录
在准备工作中已经使用切换到database_test数据库
gsql -d postgres -p 26000 -r
\c database_test
此时要不要退出重新使用joe登录
可以肯定此时登陆的用户肯定不是joe
1、创建试验用户
database_test=# CREATE TABLE TEST1 (
database_test(# ID int4 NOT NULL COMMENT 'ID号'
database_test(# );
2、查看用户
\d
public | test1 | table | omm | {orientation=row,compression=no}
可以看到表创建到public下面了,根据search_path优先级第一的应该是$USER
3、解决办法
最简单的办法:
gsql -d database_test -p 26000 -r -U joe -W Mysql@123456 #重新使用joe登录
另一种办法:
gsql -d postgres -p 26000 -r
\c database_test joe 192.168.10.131 26000 #回车输入密码切换过去
3、创建表
1、创建第一张表
CREATE TABLE TEST (
ID int4 NOT NULL COMMENT 'ID号',
NAME varchar(10) NOT NULL COMMENT '姓名',
UNIQUE INDEX INDEX_TEST_NAME (NAME) USING BTREE,
PRIMARY KEY (ID) USING BTREE
)COMMENT='这是一个测试表';
2、查看表
database_test=> \d+ test
Table "public.test"
Column | Type | Modifiers | Storage | Stats target | Description
--------+-----------------------+-----------+----------+--------------+-------------
id | integer | not null | plain | | ID号
name | character varying(10) | not null | extended | | 姓名
Indexes:
"test_pkey" PRIMARY KEY, btree (id) TABLESPACE pg_default
"index_test_name" UNIQUE CONSTRAINT, btree (name) TABLESPACE pg_default
Has OIDs: no
Options: orientation=row, compression=no
3、查看表空间
database_test=> select spcname from pg_tablespace;
spcname
-------------
pg_default
pg_global
example1
4、创建第二张表
drop table test2;
CREATE TABLE TEST2 (
ID int4 NOT NULL COMMENT 'ID号',
NAME varchar(10) NOT NULL COMMENT '姓名',
UNIQUE INDEX INDEX_TEST_NAME1 (NAME) USING BTREE,
PRIMARY KEY (ID) USING BTREE
)COMMENT='这是一个测试表' TABLESPACE example1;
直接报错
"ERROR: relation "index_test_name" already exists"
使用不同的表空间建表都会报错
5、有意思的是可以直接用查表的语句查索引名
database_test=> \d+ index_test_name
Index "joe.index_test_name"
Column | Type | Definition | Storage
--------+-----------------------+------------+----------
name | character varying(10) | name | extended
unique, btree, for table "joe.test"
4、联想primary是不是也可以查询
1、查询表
database_test=> \d+ test
Table "joe.test"
Column | Type | Modifiers | Storage | Stats target | Description
--------+-----------------------+-----------+----------+--------------+-------------
id | integer | not null | plain | | ID号
name | character varying(10) | not null | extended | | 姓名
Indexes:
"test_pkey" PRIMARY KEY, btree (id) TABLESPACE pg_default
"index_test_name" UNIQUE CONSTRAINT, btree (name) TABLESPACE pg_default
Has OIDs: no
Options: orientation=row, compression=no
2、查询主键索引
database_test=> \d+ test_pkey
Index "joe.test_pkey"
Column | Type | Definition | Storage
--------+---------+------------+---------
id | integer | id | plain
primary key, btree, for table "joe.test"
3、查询其他索引
database_test=> \d+ index_test_name
Index "joe.index_test_name"
Column | Type | Definition | Storage
--------+-----------------------+------------+----------
name | character varying(10) | name | extended
unique, btree, for table "joe.test"