本节介绍如何在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 template0 或TEMPLATE 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)