更新时间:2023-12-18 GMT+08:00

通过命令行创建数据库

创建数据库时,您可以指定模板库,并为每个数据库设置不同的字符集、本地化collate等属性。

通过数据管理服务DAS查询窗口、psql或者pgadmin等工具连接到数据库(本章节以数据管理服务DAS查询窗口为例),使用命令行示例来介绍如何通过CREATE DATABASE命令设置。

本土化信息collate包括LC_COLLATE(字符排序规则) 和 LC_CTYPE(字符分类),详细介绍请参考官方文档

语法格式

CREATE DATABASE name    
[ [ WITH ] [ OWNER [=] user_name ]           
       [ TEMPLATE [=] template ]           
       [ ENCODING [=] encoding ]           
       [ LC_COLLATE [=] lc_collate ]           
       [ LC_CTYPE [=] lc_ctype ]           
       [ TABLESPACE [=] tablespace_name ]          
       [ ALLOW_CONNECTIONS [=] allowconn ]           
       [ CONNECTION LIMIT [=] connlimit ]          
       [ IS_TEMPLATE [=] istemplate ] ]

操作步骤

  1. 登录管理控制台
  2. 单击管理控制台左上角的,选择区域和项目。
  3. 单击页面左上角的,选择“数据库 > 云数据库 RDS”,进入RDS信息页面。
  4. “实例管理”页面,选择目标实例,单击操作列的“登录”,进入数据管理服务登录界面。

    图1 登录数据库

  5. 正确输入数据库用户名和密码,单击“登录”,即可进入您的数据库。
  6. 选择“SQL操作 > SQL查询”。
  7. “SQL窗口”输入命令创建数据库。

    create database 数据库名;

参数说明

  • TEMPLATE

    RDS forPostgreSQL数据库默认有template0、template1两个模板,默认模板为template1,使用template1模板库建库时不可指定新的字符集,否则会报错。用户也可以指定其他的自定义模板创建数据库。

  • ENCODING

    创建数据库时可以通过WITH ENCODING指定字符集,字符集含义及支持的字符集类型请参考官方文档

  • LC_COLLATE

    字符排序规则,默认en_US.utf8。

    不同的排序规则下,相同字符串的比较其结果可能是不同的。

    例如,在en_US.utf8下, SELECT 'a'>'A'; 执行结果为false,但在'C'下,SELECT 'a'>'A'; 结果为true。如果数据库从“O”迁移到RDS forPostgreSQL,数据库排序集需使用'C'才能得到一致的预期。支持的排序规则可以查询系统表 pg_collation。

  • LC_CTYPE

    字符集中的字符分类,用来区分字母、数字、及大小写等,支持的字符分类可以查询系统表 pg_collation。

  • 其余参数请参考官方文档,此章节不再赘述。

参数使用方式

  • 通过TEMPLATE指定数据库模板
    • 使用 template1 模板库建库时不可指定新的字符集和本地化collate属性,collate属性请参见▪设置数据库的本土化信息(collate)
      CREATE DATABASE my_db WITH TEMPLATE template1 ;
    • 使用template0可指定字符集和本地化collate属性,collate属性请参见▪设置数据库的本土化信息(collate)
      CREATE DATABASE my_db WITH ENCODING = 'UTF8' LC_COLLATE ='zh_CN.utf8' LC_CTYPE ='zh_CN.utf8' TEMPLATE = template0 ;
    • 创建数据库时不指定模板,则默认模板为template1。用户也可以指定其他的自定义模板创建数据库。
      CREATE DATABASE my_db WITH TEMPLATE = mytemplate;
  • 通过WITH ENCODING指定字符集
    CREATE DATABASE my_db WITH ENCODING 'UTF8';
  • LC_COLLATELC_CTYPE
    • 查询字符集支持的LC_COLLATE和LC_CTYPE信息
      SELECT pg_encoding_to_char(collencoding) AS encoding,collname,collcollate AS "LC_COLLATE",collctype AS "LC_CTYPE" FROM pg_collation;

      encoding为空时,表示当前LC_COLLATE支持所有的字符集。

    • 设置数据库的本土化信息(collate)

      执行如下命令,创建一个 LC_COLLATE 和 LC_CTYPE 分别为 zh_CN.utf8 的数据库。

      CREATE DATABASE my_db WITH ENCODING = 'UTF8' LC_COLLATE ='zh_CN.utf8' LC_CTYPE ='zh_CN.utf8' TEMPLATE = template0 ;

      如果指定的LC_COLLATE与字符集不兼容,则会报如下错误信息。

      1. 指定的LC_COLLATE和LC_CTYPE必须与目标字符集兼容,参考▪查询字符集支持的LC_COLLATE和LC_C...查询出的字符集,否则会报错。
      2. 目前无法直接通过ALTER DATABASE命令修改已有数据库的LC_COLLATE和LC_CTYPE信息,但可以通过创建新的数据库,然后导出再导入数据的方式进行修改。