更新时间:2026-10-21 GMT+08:00
分享

CREATE DATABASE

功能描述

创建新数据库。默认情况下,新数据库将通过复制标准系统数据库template0模板的方式进行创建。

注意事项

  • 仅拥有CREATEDB权限的用户可以执行该命令,系统管理员默认拥有此权限。
  • 不能在事务块中执行该命令。
  • 创建数据库时,禁止使用templatem作为数据库名称。
  • 在创建数据库时,若未指定DBCOMPATIBILITY关键字和TEMPLATE关键字时,默认兼容的数据库的类型以GUC参数distribute_default_compatibility的取值为准。
  • 在创建兼容模式的数据库时,当创建的数据库为非ORA兼容模式、非M兼容模式以及非MYSQL兼容模式时,以下系统对象中的部分信息存在差异,具体如表1所示。
    表1 系统对象差异

    系统对象类型

    系统对象名称

    差异

    系统视图

    pg_catalog.my_tab_modifications

    创建数据库时,视图中timestamp字段为timestamp(0) without time zone类型。

    视图升级后,该字段类型会变成date类型。

    pg_catalog.db_tab_modifications

    pg_catalog.v$open_cursor

    创建数据库时,视图中last_sql_active_time字段为timestamp(0) without time zone类型。

    视图升级后,该字段类型会变成date类型。

    pg_catalog.my_audit_trail

    创建数据库时,视图中timestamp、logoff_time字段为timestamp(0) without time zone类型。

    视图升级后,该字段类型会变成date类型。

    sys.v_session

    创建数据库时,视图中logon_time、prev_exec_start字段为timestamp(0) without time zone类型。

    视图升级后,该字段类型会变成date类型。

    sys.gv_session

    sys.db_indexes

    创建数据库时,视图中last_analyzed字段为timestamp(0) without time zone类型。

    视图升级后,该字段类型会变成date类型。

    sys.adm_indexes

    sys.adm_tab_cols

    sys.db_tab_columns

    sys.adm_tab_columns

    sys.db_tab_col_statistics

    sys.adm_tab_col_statistics

    sys.db_part_col_statistics

    sys.adm_part_col_statistics

    sys.db_subpart_col_statistics

    sys.adm_subpart_col_statistics

    高级包函数

    dbe_scheduler.set_attribute

    创建数据库时,缺少dbe_scheduler.set_attribute(name text, attribute text, value date)重载函数。

    packages插件升级后,存在dbe_scheduler.set_attribute(name text, attribute text, value date)重载函数。

语法格式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
CREATE DATABASE database_name
    [ [ WITH ] { [ OWNER [=] user_name ] |
               [ TEMPLATE [=] template ] |
               [ ENCODING [=] 'encoding' ] |
               [ LC_COLLATE [=] 'lc_collate' ] |
               [ LC_CTYPE [=] 'lc_ctype' ] |
               [ DBCOMPATIBILITY [=] 'compatibility_type' ] |
               [ TABLESPACE [=] tablespace_name ] |
               [ CONNECTION LIMIT [=] connlimit ] |
               [ DBTIMEZONE [=] 'time_zone' ] }[...] ];

参数说明

  • database_name

    数据库名称。

    取值范围:字符串,要符合标识符命名规范且最大长度不超过63个字符。

    • 当数据库名称超过63个字符,数据库会截断并保留前63个字符当作数据库名称。
    • 当数据库名称中包含大写字母时,数据库会自动转换为小写字母,如果需要创建包含大写字母的数据库名称则需要使用双引号进行包裹。
  • OWNER [ = ] user_name

    可选,数据库所有者。

    取值范围:已存在的用户名,未指定时,新数据库的所有者为当前用户。

  • TEMPLATE [ = ] template

    可选,创建数据库时,根据指定的标准系统数据库模板进行创建。

    GaussDB采用从模板数据库复制的方式进行创建新的数据库。GaussDB包含模板数据库(template0、template1、templatea和templatem)以及默认的用户数据库(postgres)。

    取值范围:template0、templatem或者templatea。

  • ENCODING [ = ] 'encoding'

    可选,指定数据库使用的字符编码。

    常用取值:GBK、UTF8、Latin1或者GB18030等,具体支持的字符编码如表2所示。

    • 不指定字符编码时,M-Compatibility模式数据库默认使用UTF8编码,其他兼容模式数据库默认使用模板数据库的编码。
    • 模板数据库template0、template1和templatea的默认编码与操作系统环境相关。
    • 模板数据库template1不允许修改字符编码,若要变更编码,请使用模板数据库template0或模板数据库templatea创建数据库。
    表2 GaussDB支持的字符编码

    名称

    描述

    语言

    是否服务器端?

    ICU(International Components for Unicode)?

    字节/字符

    别名

    BIG5

    Big Five

    繁体中文

    否

    否

    1-2

    WIN950、Windows950

    EUC_CN

    扩展UNIX编码-中国

    简体中文

    是

    是

    1-3

    -

    EUC_JP

    扩展UNIX编码-日本

    日文

    是

    是

    1-3

    -

    EUC_JIS_2004

    扩展UNIX编码-日本, JIS X 0213

    日文

    是

    否

    1-3

    -

    EUC_KR

    扩展UNIX编码-韩国

    韩文

    是

    是

    1-3

    -

    EUC_TW

    扩展UNIX编码-中国台湾

    繁体中文

    是

    是

    1-3

    -

    GB18030

    国家标准

    中文

    是

    否

    1-4

    -

    GB18030_2022

    国家标准

    中文

    是

    否

    1-4

    -

    GBK

    扩展国家标准

    简体中文

    是

    否

    1-2

    WIN936、Windows936

    ISO_8859_5

    ISO 8859-5, ECMA 113

    拉丁语/西里尔语

    是

    是

    1

    -

    ISO_8859_6

    ISO 8859-6, ECMA 114

    拉丁语/阿拉伯语

    是

    是

    1

    -

    ISO_8859_7

    ISO 8859-7, ECMA 118

    拉丁语/希腊语

    是

    是

    1

    -

    ISO_8859_8

    ISO 8859-8, ECMA 121

    拉丁语/希伯来语

    是

    是

    1

    -

    JOHAB

    JOHAB

    韩语

    否

    否

    1-3

    -

    KOI8R

    KOI8-R

    西里尔语(俄语)

    是

    是

    1

    KOI8

    KOI8U

    KOI8-U

    西里尔语(乌克兰语)

    是

    是

    1

    -

    LATIN1

    ISO 8859-1, ECMA 94

    西欧

    是

    是

    1

    ISO88591

    LATIN2

    ISO 8859-2, ECMA 94

    中欧

    是

    是

    1

    ISO88592

    LATIN3

    ISO 8859-3, ECMA 94

    南欧

    是

    是

    1

    ISO88593

    LATIN4

    ISO 8859-4, ECMA 94

    北欧

    是

    是

    1

    ISO88594

    LATIN5

    ISO 8859-9, ECMA 128

    土耳其语

    是

    是

    1

    ISO88599

    LATIN6

    ISO 8859-10, ECMA 144

    日耳曼语

    是

    是

    1

    ISO885910

    LATIN7

    ISO 8859-13

    波罗的海

    是

    是

    1

    ISO885913

    LATIN8

    ISO 8859-14

    凯尔特语

    是

    是

    1

    ISO885914

    LATIN9

    ISO 8859-15

    带欧罗巴和口音的LATIN1

    是

    是

    1

    ISO885915

    LATIN10

    ISO 8859-16, ASRO SR 14111

    罗马尼亚语

    是

    否

    1

    ISO885916

    MULE_INTERNAL

    Mule内部编码

    多语种编辑器

    是

    否

    1-4

    -

    SJIS

    Shift JIS

    日语

    否

    否

    1-2

    Mskanji、ShiftJIS、WIN932、Windows932

    SHIFT_JIS_2004

    Shift JIS, JIS X 0213

    日语

    否

    否

    1-2

    -

    SQL_ASCII

    未指定(见文本)

    任意

    是

    否

    1

    -

    UHC

    统一韩语编码

    韩语

    否

    否

    1-2

    WIN949, Windows949

    UTF8

    Unicode, 8-bit

    所有

    是

    是

    1-4

    Unicode

    WIN866

    Windows CP866

    西里尔语

    是

    是

    1

    ALT

    WIN874

    Windows CP874

    泰语

    是

    否

    1

    -

    WIN1250

    Windows CP1250

    中欧

    是

    是

    1

    -

    WIN1251

    Windows CP1251

    西里尔语

    是

    是

    1

    WIN

    WIN1252

    Windows CP1252

    西欧

    是

    是

    1

    -

    WIN1253

    Windows CP1253

    希腊语

    是

    是

    1

    -

    WIN1254

    Windows CP1254

    土耳其语

    是

    是

    1

    -

    WIN1255

    Windows CP1255

    希伯来语

    是

    是

    1

    -

    WIN1256

    Windows CP1256

    阿拉伯语

    是

    是

    1

    -

    WIN1257

    Windows CP1257

    波罗的海

    是

    是

    1

    -

    WIN1258

    Windows CP1258

    越南语

    是

    是

    1

    ABC, TCVN, TCVN5712, VSCII

    ZHS16GBK

    扩展国家标准

    简体中文

    是

    否

    1-2

    -

    • 并非所有的客户端API都支持表2中列出的字符编码。
    • SQL_ASCII编码格式的设置与其他编码格式的设置表现存在差异。如果服务器字符编码格式为SQL_ASCII时,服务器会将字节值0~127根据ASCII标准解析,而字节值128~255则当作无法解析的字符。通常如果使用任何非ASCII数据,请勿将字符编码格式设置为SQL_ASCII,如果设置为SQL_ASCII,数据库将无法转换或者校验非ASCII字符。
    • 新指定的数据库字符编码必须与所选择的本地环境中(LC_COLLATE和LC_CTYPE)的设置兼容。
    • 当指定的字符编码为GBK或ZHS16GBK时,部分中文生僻字无法直接作为对象名。主要因为GBK第二个字节的编码范围在0x40~0x7E之间时,字节编码与ASCII字符@、A~Z、[、\、]、^、_、`、a~z、{、|以及}重叠。其中,@、[、\、]、^、_、'、{、|以及}为数据库中的操作符,直接作为对象名时,会产生语法报错。
    • 若客户端编码和服务器端编码不一致时,数据库需要支持编码格式转换,支持的所有的编码格式转换可通过系统表PG_CONVERSION进行查看。若数据库无法进行编码格式转换,则建议客户端编码与服务器端编码保持一致,客户端编码可通过GUC参数client_encoding修改。
    • 当指定数据库字符集编码与客户端编码同时为GB18030_2022时,须确保客户端操作系统支持的GB18030字符集为2022版本,否则由于GB18030字符集各版本间存在不完全兼容可能导致数据的不一致性。同时,当涉及历史数据切换为GB18030_2022数据库时,应当遵循切换数据库流程进行数据迁移操作。
    • 当指定的字符编码为ZHS16GBK时,支持欧元符号(€)的输入,其编码值为0x80。
  • LC_COLLATE [ = ] 'lc_collate'

    可选,指定新数据库使用的字符集。

    取值范围:操作系统支持的字符集,默认使用模板数据库的字符集。

    • 该参数的使用会影响到对字符串的排序顺序,如执行ORDER BY操作的结果排序或在文本列上使用索引的排序。
    • 该参数对M-Compatibility模式数据库不生效。
    • lc_collate和lc_ctype参数的取值范围,与本地环境支持的字符集相关,如在Linux操作系统上,可通过locale -a命令获取操作系统支持的字符集列表,当指定LC_COLLATE和LC_CTYPE关键字时,从获取的字符集列表中选择用户需要的字符集和字符分类。
    • 如果需要设置字符编码为GB18030_2022时,lc_collate参数和lc_ctype参数的取值范围与GB18030字符编码保持一致。
    • 如果需要设置字符编码为ZHS16GBK时,lc_collate参数和lc_ctype参数的取值范围需与GBK字符编码保持一致。
  • LC_CTYPE [ = ] 'lc_ctype'

    可选,指定新数据库使用的字符分类。

    取值范围:操作系统支持的字符分类,默认使用模板数据库的字符分类。

    • 该参数的使用会影响到字符的分类,如大写、小写和数字。
    • 该参数对M-Compatibility模式数据库不生效。
    • lc_collate和lc_ctype参数的取值范围,与本地环境支持的字符集相关,如在Linux操作系统上,可通过locale -a命令获取操作系统支持的字符集列表,当指定LC_COLLATE和LC_CTYPE关键字时,从获取的字符集列表中选择用户需要的字符集和字符分类。
    • 如果需要设置字符编码为GB18030_2022时,lc_collate参数和lc_ctype参数的取值范围与GB18030字符编码保持一致。
    • 如果需要设置字符编码为ZHS16GBK时,lc_collate参数和lc_ctype参数的取值范围需与GBK字符编码保持一致。
  • DBCOMPATIBILITY [ = ] 'compatibility_type'

    可选,指定兼容的数据库的类型。未指定该选项时,默认兼容模式受TEMPLATE关键字以及GUC参数distribute_default_compatibility的设置影响。

    取值范围:MYSQL、TD、ORA、PG和M。分别表示:MySQL兼容性MYSQL模式、TD(Teradata)、Oracle、PostgreSQL和MySQL兼容性M-Compatibility模式。

    • ORA兼容模式数据库下,将空字符串作为NULL处理。当GUC参数mapping_date_to_datea关闭时,数据类型DATE会被替换为TIMESTAMP(0) WITHOUT TIME ZONE,当GUC参数mapping_date_to_datea打开时,数据类型DATE会被替换为DATEA。
    • 将字符串类型转换成整数类型时,如果输入不合法,MYSQL兼容模式数据库会将输入转换为0,而其他兼容模式数据库下则会报错。
    • PG兼容模式数据库下,CHAR和VARCHAR以字符为计数单位,其他兼容模式数据库下以字节为计数单位。例如,UTF-8字符编码,CHAR(3)在PG兼容性下能存放3个中文字符,而在其他兼容模式数据库下只能存放1个中文字符。
    • 执行语句报错时,部分报错信息中显示“A-format”或“B-format”,表示“ORA-format”和“MYSQL-format”。
    • M-Compatibility模式数据库下,具体的数据库特性请参见《M-Compatibility开发指南》。
  • TABLESPACE [ = ] tablespace_name

    可选,指定数据库对应的表空间。

    取值范围:已存在表空间名。

  • CONNECTION LIMIT [ = ] connlimit

    可选,数据库可以接受的并发连接数。

    取值范围:[-1, 231-1]的整数。默认值为-1,表示没有限制。

    • 系统管理员不受此参数的限制。
    • 每个节点的connlimit单独统计,集群整体的连接数 = connlimit * 当前正常CN节点个数。
  • DBTIMEZONE [ = ] 'time_zone'

    指定新数据库的时区。该参数会影响新数据库的时区,默认设置为PRC时区。

    取值范围:

    • 操作系统支持的时区名称和缩写。
    • -15:59~+15:00。
    • 该参数仅在ORA兼容模式数据库下且已设置a_format_version='10c'以及a_format_dev_version='s2'时支持使用。
    • 有关字符编码的一些限制:
      • 若区域设置为C或POSIX,则允许所有的编码类型;对于其他的区域设置,字符编码必须和区域设置相同。
      • 字符编码和区域设置必须匹配模板数据库(除将template0作为模板),当数据库中包含不匹配指定编码的数据或者包含排序顺序受LC_COLLATE和LC_CTYPE影响的索引,复制数据时可能会存在新数据库中的索引失效的场景。

示例

--创建jim用户。
gaussdb=# CREATE USER jim PASSWORD '********';

--创建一个GBK编码的数据库testdb1。
gaussdb=# CREATE DATABASE testdb1 ENCODING 'GBK' template = template0;

--查看数据库testdb1信息。
gaussdb=# SELECT datname,pg_encoding_to_char(encoding) FROM pg_database WHERE datname = 'testdb1';
 datname | pg_encoding_to_char 
---------+---------------------
 testdb1 | GBK
(1 row)

--创建兼容ORA格式的数据库testdb2,并指定所有者为jim。
gaussdb=# CREATE DATABASE testdb2 OWNER jim DBCOMPATIBILITY = 'ORA';

--查看testdb2信息。
gaussdb=# SELECT t1.datname,t2.usename,t1.datcompatibility 
          FROM pg_database t1,gs_user t2 
          WHERE t1.datname = 'testdb2' AND t1.datdba=t2.usesysid;
 datname | usename | datcompatibility 
---------+---------+------------------
 testdb2 | jim     | ORA
(1 row)
gaussdb=# CREATE DATABASE testdb_tmp OWNER jim template=templatea;

--查看testdb2信息。
gaussdb=# SELECT t1.datname,t2.usename,t1.datcompatibility 
                   FROM pg_database t1,gs_user t2 
                   WHERE t1.datname = 'testdb_tmp' AND t1.datdba=t2.usesysid;
  datname   | usename | datcompatibility 
------------+---------+------------------
 testdb_tmp | jim     | ORA
(1 row)

--创建可以接受1000并发连接数的数据库。
gaussdb=# CREATE DATABASE testdb4 CONNECTION LIMIT=1000;

--查看testdb4信息。
gaussdb=# SELECT datname,datconnlimit  FROM pg_database where datname = 'testdb4';
 datname | datconnlimit 
---------+--------------
 testdb4 |         1000
(1 row)

--创建表空间。
gaussdb=# CREATE TABLESPACE tbs_test RELATIVE LOCATION 'test_tablespace/tbs_test';

--创建数据库指定默认表空间为tbs_test。
gaussdb=# CREATE DATABASE testdb5 TABLESPACE = tbs_test;

--查看testdb5信息。
gaussdb=# SELECT db.datname,ts.spcname FROM pg_database db JOIN pg_tablespace ts ON db.dattablespace = ts.oid WHERE db.datname = 'testdb5';
 datname | spcname  
---------+----------
 testdb5 | tbs_test
(1 row)

--切换至ORA兼容性数据库testdb2,并设置会话参数。
gaussdb=# \c testdb2
testdb2=# SET a_format_version='10c';
testdb2=# SET a_format_dev_version='s2';

--创建兼容ORA格式的数据库并指定时区。
testdb2=# CREATE DATABASE testdb3 DBCOMPATIBILITY 'ORA' DBTIMEZONE='+08:00';

--查看testdb3信息。
testdb2=# SELECT datname,datcompatibility,dattimezone FROM pg_database WHERE datname = 'testdb3';
 datname | datcompatibility | dattimezone 
---------+------------------+-------------
 testdb3 | ORA              | +08:00
(1 row)

--切换至初始数据库,请根据实际情况修改数据库名。
testdb2=# \c postgres

--删除数据库。
gaussdb=# DROP DATABASE testdb1;
gaussdb=# DROP DATABASE testdb2;
gaussdb=# DROP DATABASE testdb3;
gaussdb=# DROP DATABASE testdb4;
gaussdb=# DROP DATABASE testdb5;
gaussdb=# DROP DATABASE testdb_tmp;

--删除用户。
gaussdb=# DROP USER jim;

--删除表空间。
gaussdb=# DROP TABLESPACE tbs_test;

相关链接

ALTER DATABASE,DROP DATABASE

相关文档