GaussDB(DWS)中如何创建与修改数据库
GaussDB(DWS)中如何创建与修改数据库
1. 前言
- 适用版本:基线功能
Database数据库,用于管理各类数据对象,各个数据库之间相互隔离。因此针对不同业务往往需要创建多个数据库。
数据库有多个属性,这些属性在创建数据库时指定,也可以在创建后进行修改。
本文从语法角度介绍如何在GaussDB(DWS)中创建和修改数据库。
2. 数据库创建语法
2.1 语法总结
在GaussDB(DWS)中创建数据库的SQL语法如下所示:
CREATE DATABASE database_name
[ [ WITH ] { [ OWNER [=] user_name ] |
[ TEMPLATE [=] template ] |
[ ENCODING [=] encoding ] |
[ LC_COLLATE [=] lc_collate ] |
[ LC_CTYPE [=] lc_ctype ] |
[ DBCOMPATIBILITY [=] compatibilty_type ] |
[ DBCOMPATIBILITY_BEHAVIOR [=] opt_compat_behavior] |
[ TABLESPACE [=] tablespace_name ] |
[ CONNECTION LIMIT [=] connlimit ]}
[...] ];
2.2 语法细节
-
create database:创建数据库的关键字,不区分大小写。
postgres=# CREATE DATABASE dbname1; CREATE DATABASE postgres=# CReaTE DATabASE dbname2; CREATE DATABASE postgres=# create database dbname3; CREATE DATABASE
-
database_name:数据库的名字应当符合标识符的规范,所有字符都是数字、英文字母、下划线或者$,其中首字母必须是英文字母或者下划线。数据库名不区分大小写,因此无法创建两个除了大小写外名字相同的数据库。
postgres=# create database 1; ERROR: syntax error at or near "1" LINE 1: create database 1; postgres=# create database 1_; ERROR: syntax error at or near "1" LINE 1: create database 1_; postgres=# create database $; ERROR: syntax error at or near "$" LINE 1: create database $; postgres=# create database _1<; ERROR: syntax error at or near "<" LINE 1: create database _1<; postgres=# create database _1; CREATE DATABASE postgres=# create database _$; CREATE DATABASE postgres=# create database db10; CREATE DATABASE postgres=# create database DB10; ERROR: database "db10" already exists
-
owner:该选项可以指定所创建数据库的所有者,必须是已有的用户,默认为当前用户。当创建数据库时,当前用户需要拥有创建数据库的系统权限,即createdb权限。系统管理员默认拥有createdb权限,也可以通过在创建用户时赋予createdb权限。
postgres=# create user alice LOGIN CREATEDB password '123qwe!@#'; CREATE USER postgres=# \c postgres alice Password for user alice: Non-SSL connection (SSL connection is recommended when requiring high-security) You are now connected to database "postgres" as user "alice". postgres=> create database db1; CREATE DATABASE
-
template:该选项可以指定创建数据库时所使用的模板数据库。在GaussDB初始化时,会创建两个模板数据库,template0和template1,并以template0为模板创建postgres数据库。该选项参数默认为template1,也可以指定为已存在的数据库。
-
encoding:该选项可以指定创建数据库时使用的字符编码,例如SQL_ASCII、UTF8或者GBK。只有设置template参数为template0时,才可以指定encoding参数。DWS中字符编码的介绍可以参照常用字符集介绍和编码转换原理。
-
lc_collate:该选项可以指定数据库使用的字符集,影响字符串排序时未显式指定排序规则时使用的默认规则。当执行sql语句时,如果不同表达式之间的collate存在冲突可能会报错或者返回未知的结果。如果遇到报错可以参考[GaussDB(DWS)排序规则相关错误信息整理。
-
lc_type:该选项可以指定数据库使用的字符分类,影响字符分类。
-
dbcompatibility:该选项可以指定数据库的兼容模式,可以分别兼容oracle、teradata和mysql。只有指定对应的兼容模式,部分behavior_compat_options中的兼容选项才能生效。三种兼容模式之间的区别具体可以看GaussDB(DWS) TD和Oracle兼容模式的差异。
-
dbcompatibility_behavior:该选项可以指定数据库的兼容性行为。该参数仅9.1.0及以上集群版本支持。
取值范围:td_rtrim、pg_char。分别表示TD兼容模式下变长字符串去尾空和PG兼容模式下varchar类型转为nvarchar2类型。若不指定该参数,默认为NO_BEHAVIOR表示无特殊行为。
-
tablespace:该选项可以指定数据库对应的表空间。表空间是数据库中的表数据的物理存储空间。DWS中表空间的介绍可以看[DWS的表空间布局介绍。
-
connection limit:该选项可以指定数据库可以接受的并发会话连接数。-1时表示没有连接数限制。一般来说,如果要设置连接数上限的话,至少需要设置为CN数,这是因为analyze后CN之间需要建立连接来同步统计信息。
3. 数据库修改语法
修改数据库的属性需要使用ALTER DATABASE语法,可以修改的属性包括数据库名称、数据库的所属者、数据库的默认表空间、数据库指定会话的参数值、重置数据库配置参数、数据库对象的隔离属性、以及数据库的最大连接数。
修改数据库与创建数据库一样,都需要权限。执行ALTER DATABSE需要数据库所有者权限,根据修改的属性不同,额外所需的权限也不同。
-
修改数据库名称:
ALTER DATABASE database_name RENAME TO new_name;
修改数据库名称需要持有CREATEDB权限。
数据库的新名称new_name需要符合标识符的命名规范。
注意不能修改当前正在连接的数据库的名称。
-
修改数据库所有者
ALTER DATABASE database_name OWNER TO new_owner;
修改数据库所有者时,执行该语句的用户必须是该数据库的所有者并且是new_owner的成员,且用户需要具有CREATEDB权限。
新所有者new_owner必须是有效的用户名。
-
修改数据库默认表空间
ALTER DATABASE database_name SET TABLESPACE new_tablespace;
修改数据库表空间时,执行该语句的用户需要是数据库的所有者或者是系统管理员,需要拥有新表空间的CREATE权限。
数据库新的默认表空间new_tablespace需要是已存在的表空间。
执行该命令会将数据库中建立在默认表空间的对象迁往新的默认表空间。
-
修改进入数据库会话参数值
ALTER DATABASE database_name SET configuration_parameter { { TO | = } { value | DEFAULT } | FROM CURRENT };
修改某个按数据库设置的相关参数,需要用户是数据库所有者或者系统管理员。
value需要是configuration_parameter的有效合法取值,或者为DEFAULT、OFF、RESET,default和reset表示使用默认设置,off表示关闭设置。
FROM CURRENT表示根据当前连接的数据库的值设置该参数。
设置完成后,当前连接该数据库的会话中不生效,而是在下一次连接该数据库的会话中生效。
-
重置数据库配置参数
ALTER DATABASE database_name RESET { configuration_parameter | ALL };
重置数据库某个参数或者全部参数。
-
修改数据库对象隔离属性
ALTER DATABASE database_name [ WITH ] { ENABLE | DISABLE } PRIVATE OBJECT;
修改数据库对象隔离属性时,需要用户是数据库所有者或者系统管理员,并且连接到要修改的数据库。
新创建的数据库默认关闭对象隔离属性,当开启后,普通用户只能查看有权访问的对象。
-
修改数据库最大连接数
ALTER DATABASE database_name [ [ WITH ] CONNECTION LIMIT connlimit ];
用户需要拥有数据库所有者权限。
4.总结
本文主要从语法角度入手,介绍了创建数据库时各个选项的含义,并介绍了如何修改数据库的属性。
- 点赞
- 收藏
- 关注作者
评论(0)