创建数据库

最近更新时间: 2026-03-13 09:03:00

本节介绍如何在TDSQL PG通过 SQL 命令创建数据库。

数据库简介

在TDSQL PG中,一个数据库是一个或多个模式的集合,而模式包含表、函数等。

前置条件

  • 必须由超级用户或者拥有CREATEDB 权限的用户来执行命令。

数据库命名规范

  • 在TDSQL PG中,每个数据库的名称必须保证全局唯一。
  • 数据库名长度限制小于等于 63 个字符。
  • 避免使用保留关键字作为数据库名。
  • 数据库名称包含大小写字母、数字、下划线,不要以数字,下划线开头。
  • 为避免与系统表,系统视图名称混淆,数据库名称不建议以pg_、pgxc或sys_开头。

数据库创建建议

  • 建议给数据库起一个意义明确的名字,使其能够反映其用途和内容。避免使用拼音缩写作为数据库名称。
  • 建议使用 tbase 用户创建数据库和相关用户,并且只赋予必要的权限,以确保数据库的安全性和可控性。
  • 建议在创建数据库时使用 UTF-8 字符集编码,以确保能够存储绝大多数字符。数据库支持的字符集编码相关内容请参见 数据库级字符集。

使用命令行创建数据库

请使用 CREATE DATABASE 语句创建数据库。默认情况下将创建 postgresql 类型的数据库,除此之外,通过指定SQL MODE参数为 oracle 则可以创建 oracle 兼容的数据库。
默认情况下,postgresql 类型的新数据库将通过克隆模板数据库 template1 来创建,oracle 类型的新数据库通过克隆模板数据库 template1_ora 来创建。同时,可以通过 TEMPLATE name 指定一个不同的模板。通过 TEMPLATE template0TEMPLATE template0_ora 可以创建一个干净的 postgresql 或 oracle 数据库,它将只包含你的TDSQL PG所预定义的标准对象。

CREATE DATABASE 语法如下:

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 ] 
           [SQL MODE [=] sqlmode]]

参数说明:

  • name:即将创建的数据库名称。
  • user_name:即将拥有该数据库的用户的角色名,默认为执行该命令的用户。
  • encoding:新数据库中使用的字符集编码,默认使用模板数据库的字符集。
  • template:新数据库的模板数据库。创建 postgresql 类型数据库,默认模板数据库为 template1;oracle 类型数据库的默认模板库为 template1_ora。通过指定模板库为 template0/template0_ora 可以创建一个原始的标准的 postgresql/oracle 类型数据库。
  • lc_collate:新数据库中使用的排序规则顺序,默认使用模板数据库的排序规则顺序。
  • lc_ctype:新数据库中使用的字符分类,默认使用模板数据库的字符分类。
  • tablespace_name:新数据库相关的表空间名称,默认为模板数据库的表空间。
  • allowconn:是否允许连接到该数据库。
  • connlimit:数据库允许的并发连接数量,默认为-1,表示没有限制。
  • istemplate:如果为真,则任何具有CREATEDB特权的用户都可以从这个数据库克隆。如果为假(默认),则只有超级用户或者该数据库的拥有者可以克隆它。
  • sqlmode:数据库类型。若为oracle,则表示创建oracle兼容的数据库;若为postgresql(默认),则表示创建postgres数据库。

示例

使用默认参数创建数据库

tdsql=# create database tbase_db;
CREATE DATABASE

tdsql=# \l+ tbase_db
                                                    List of databases
   Name   | Owner | Encoding | Sqlmode  |  Collate   |   Ctype    | Access privileges | Size  | Tablespace | Description 
----------+-------+----------+----------+------------+------------+-------------------+-------+------------+-------------
 tbase_db | tbase | UTF8     | postgres | zh_CN.utf8 | zh_CN.utf8 |                   | 30 MB | pg_default | 
(1 row)

从指定模板数据库中创建

tdsql=# create database tbase_db_template TEMPLATE template0;
CREATE DATABASE
tdsql=# \l+ tbase_db_template
                                                        List of databases
       Name        | Owner | Encoding | Sqlmode  |  Collate   |   Ctype    | Access privileges | Size  | Tablespace | Description 
-------------------+-------+----------+----------+------------+------------+-------------------+-------+------------+-------------
 tbase_db_template | tbase | UTF8     | postgres | zh_CN.utf8 | zh_CN.utf8 |                   | 29 MB | pg_default | 
(1 row)

指定数据库所有者

tdsql=# create role pgxz with login;
CREATE ROLE
tdsql=# create database tbase_db_owner owner 'pgxz';
CREATE DATABASE
tdsql=# \l+ tbase_db_owner
                                                       List of databases
      Name      | Owner | Encoding | Sqlmode  |  Collate   |   Ctype    | Access privileges | Size  | Tablespace | Description 
----------------+-------+----------+----------+------------+------------+-------------------+-------+------------+-------------
 tbase_db_owner | pgxz  | UTF8     | postgres | zh_CN.utf8 | zh_CN.utf8 |                   | 30 MB | pg_default | 
(1 row)

指定数据库字符集编码

tdsql=# create database tbase_db_encoding ENCODING UTF8;    
CREATE DATABASE
tdsql=# \l+ tbase_db_encoding
                                                        List of databases
       Name        | Owner | Encoding | Sqlmode  |  Collate   |   Ctype    | Access privileges | Size  | Tablespace | Description 
-------------------+-------+----------+----------+------------+------------+-------------------+-------+------------+-------------
 tbase_db_encoding | tbase | UTF8     | postgres | zh_CN.utf8 | zh_CN.utf8 |                   | 30 MB | pg_default | 
(1 row)

创建gbk编码

tdsql=# CREATE DATABASE db_gbk template template0 encoding = gbk LC_COLLATE = 'zh_CN.gbk' LC_CTYPE = 'zh_CN.gbk';
CREATE DATABASE
tdsql=# \l+ db_gbk
                                                  List of databases
  Name  | Owner | Encoding | Sqlmode  |  Collate  |   Ctype   | Access privileges | Size  | Tablespace | Description 
--------+-------+----------+----------+-----------+-----------+-------------------+-------+------------+-------------
 db_gbk | tbase | GBK      | postgres | zh_CN.gbk | zh_CN.gbk |                   | 29 MB | pg_default | 
(1 row)

创建gb18030编码

tdsql=# create database db_gb18030 template template0 encoding=gb18030 LC_COLLATE = 'zh_CN.gb18030' LC_CTYPE = 'zh_CN.gb18030';  
CREATE DATABASE
tdsql=# \l+ db_gb18030
                                                        List of databases
    Name    | Owner | Encoding | Sqlmode  |    Collate    |     Ctype     | Access privileges | Size  | Tablespace | Description 
------------+-------+----------+----------+---------------+---------------+-------------------+-------+------------+-------------
 db_gb18030 | tbase | GB18030  | postgres | zh_CN.gb18030 | zh_CN.gb18030 |                   | 29 MB | pg_default | 
(1 row)

指定排序规则

tdsql=# create database tbase_db_lc_collate lc_collate 'C' template template0;
CREATE DATABASE
tdsql=# \l+ tbase_db_lc_collate
                                                        List of databases
        Name         | Owner | Encoding | Sqlmode  | Collate |   Ctype    | Access privileges | Size  | Tablespace | Description 
---------------------+-------+----------+----------+---------+------------+-------------------+-------+------------+-------------
 tbase_db_lc_collate | tbase | UTF8     | postgres | C       | zh_CN.utf8 |                   | 29 MB | pg_default | 
(1 row)

指定分组规则

tdsql=# create database tbase_db_lc_ctype LC_CTYPE 'C' template template0;
CREATE DATABASE
tdsql=# \l+ tbase_db_lc_ctype
                                                      List of databases
       Name        | Owner | Encoding | Sqlmode  |  Collate   | Ctype | Access privileges | Size  | Tablespace | Description 
-------------------+-------+----------+----------+------------+-------+-------------------+-------+------------+-------------
 tbase_db_lc_ctype | tbase | UTF8     | postgres | zh_CN.utf8 | C     |                   | 29 MB | pg_default | 
(1 row)

配置数据可连接

tdsql=# create database tbase_db_allow_connections ALLOW_CONNECTIONS true;
CREATE DATABASE
tdsql=# select datallowconn from pg_database where datname='tbase_db_allow_connections'; 
 datallowconn 
--------------
 t
(1 row)

配置连接数

tdsql=# create database tbase_db_connlimit CONNECTION LIMIT 100;
CREATE DATABASE
tdsql=# select datconnlimit  from pg_database where datname='tbase_db_connlimit';
 datconnlimit 
--------------
          100
(1 row)

配置数据库可以被复制

tdsql=# create database tbase_db_istemplate is_template true;
CREATE DATABASE
tdsql=# select datistemplate from pg_database where datname='tbase_db_istemplate'; 
 datistemplate 
---------------
 t
(1 row)

创建oracle兼容数据库

tdsql=# create database db_oracle sql mode oracle;
CREATE DATABASE
tdsql=# \l+ db_oracle
                                                    List of databases
   Name    | Owner | Encoding | Sqlmode |  Collate   |   Ctype    | Access privileges | Size  | Tablespace | Description 
-----------+-------+----------+---------+------------+------------+-------------------+-------+------------+-------------
 db_oracle | tbase | UTF8     | oracle  | zh_CN.utf8 | zh_CN.utf8 |                   | 42 MB | pg_default | 
(1 row)

多参数同时配置

tdsql=# create database tbase_db_mul owner 'pgxz' CONNECTION LIMIT 50 template template0 encoding 'utf8'  lc_collate 'C';
CREATE DATABASE
tdsql=# \l+ tbase_db_mul
                                                    List of databases
     Name     | Owner | Encoding | Sqlmode  | Collate |   Ctype    | Access privileges | Size  | Tablespace | Description 
--------------+-------+----------+----------+---------+------------+-------------------+-------+------------+-------------
 tbase_db_mul | pgxz  | UTF8     | postgres | C       | zh_CN.utf8 |                   | 29 MB | pg_default | 
(1 row)