CREATE PLUGGABLE DATABASE
功能描述
创建一个新的Pluggable Database(PDB),即内核多租特性中租户的概念,是一种特殊的Database,也可以被看作是在一个数据库实例中被划分出来的逻辑实例。
注意事项
- 不能在事务块中执行创建PDB的DDL语句,包括CREATE、ALTER、DROP。
- 只能在GUC参数enable_mtd为on的状态下使用。
- 只能在非PDB中进行该操作。不支持在M兼容数据库中执行该命令。
- 操作用户需要为gs_role_create_pdb的角色,或拥有sysadmin权限。
- 最多可以创建128个用户PDB。
- 在创建数据库过程中,出现类似“Permission denied”的错误提示,可能是由于文件系统上数据目录的权限不足。出现类似“No space left on device”的错误提示,可能是由于磁盘满引起的。
- 在兼容性选项缺省的情况下,将创建A兼容模式PDB。
- 若安装数据库实例时没有指定初始化账户密码,且初始化账户名字区分大小写,且新创建的PDB为M-Compatibility模式数据库的情况下,需要在开启并使用该PDB前,先在命令行执行以下语句,使数据库将双引号中的内容作为对象引用进行处理。语句执行后再开启并使用该PDB,按照提示重置始账户密码。
gs_guc set --pdbname my_pdb -Z datanode -N all -I all -c "sql_mode = 'ansi_quotes'" # my_pdb为新建的PDB名
(该举是为保证能正常为新PDB设置账户密码,后续操作可以按需重置sql_mode参数)
语法格式
CREATE PLUGGABLE DATABASE pdb_name [ [ WITH ] { [ ENCODING [=] 'encoding' ] | [ LC_COLLATE [=] 'lc_collate' ] | [ LC_CTYPE [=] 'lc_ctype' ] | [ DBCOMPATIBILITY [=] 'compatibility_type' ] | [ DBTIMEZONE [=] 'time_zone' ] }];
参数说明
- pdb_name
PDB名称。
取值范围:字符串,要符合标识符命名规范。此外PDB名不能带“$”符号。
- ENCODING [ = ] 'encoding'
可选。指定数据库使用的字符编码,可以是字符串(如'SQL_ASCII')、整数编号。
不指定时,对于M-Compatibility数据库,默认使用utf8编码;其他默认使用模版数据库的编码。模板数据库template0、template1和templatea的编码默认与操作系统环境相关。template1不允许修改字符编码,因此若要变更编码,A兼容模式数据库请使用templatea创建数据库, 非A兼容模式数据库请使用template0创建数据库。
常用取值:GBK、UTF8、Latin1、GB18030等。
- LC_COLLATE [ = ] 'lc_collate'
可选。指定新数据库使用的字符集。例如,通过lc_collate = 'zh_CN.gbk'设定该参数。
该参数的使用会影响到对字符串的排序顺序(如使用ORDER BY执行,以及在文本列上使用索引的顺序)。默认是使用模板数据库的字符集。该参数对M-Compatibility数据库不生效。
取值范围:操作系统支持的字符集。
- LC_CTYPE [ = ] 'lc_ctype'
可选。指定新数据库使用的字符分类。例如,通过lc_ctype = 'zh_CN.gbk'设定该参数。该参数的使用会影响到字符的分类,如大写、小写和数字。默认是使用模板数据库的字符分类。该参数对M-Compatibility数据库不生效。
取值范围:操作系统支持的字符分类。
- DBCOMPATIBILITY [ = ] compatibility_type
可选。指定兼容的数据库的类型,默认兼容O。
取值范围:A、C、PG、M。分别表示兼容O、TD、POSTGRES和M-Compatibility。
- DBTIMEZONE [ = ] time_zone
指定新数据库的时区。例如,通过DBTIMEZONE = '+00:00'设定该参数。该参数会影响新数据库的时区。默认设置为PRC时区。
前提条件:当前连接数据库是A兼容、a_format_version='10c'、a_format_dev_version='s2'。
取值范围:操作系统支持的时区名称和缩写或者-15:59到+15:00时间戳范围。