
# 管理数据库
图1创建和管理数据库   
![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/figure/zh-cn_image_0000002558219407.gif "点击放大")
#### 前提条件
用户需具备数据库创建权限或系统管理员权限方可执行数据库创建操作，具体权限授予方法请参见[用户及权限](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-0018.html#ZH-CN_TOPIC_0000002558947771)。
#### 背景信息
- 初始时，GaussDB包含四个模板数据库template0、template1、templatem、templatea以及一个默认的用户数据库postgres。postgres默认的兼容数据库类型为A（即DBCOMPATIBILITY = A ），该兼容类型下将空字符串作为NULL处理。
- CREATE DATABASE实际上通过复制模板数据库来创建新数据库。默认情况下，A兼容模式数据库复制templatea，非A兼容模式数据库复制template0。请避免使用客户端或其他方式连接及操作两个模板数据库。
  ![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  - 模板数据库中没有用户表，可通过系统表PG_DATABASE查看模板数据库属性。
  
  - 模板template0、templatea不允许用户连接，模板template1和templatem只允许数据库初始用户和系统管理员连接，普通用户无法连接。
  
  - 创建A兼容模式数据库时指定模板库为template0时会产生NOTICE，实际以templatea为模板创建。
  
  - templatem为系统保留数据库名称，不允许用户以其为数据库名创建数据库
  
  - templatea、templatem不允许用户修改名称。
    
- 数据库系统中会有多个数据库，但是客户端程序一次只能连接一个数据库。也不能在不同的数据库之间相互查询。GaussDB中存在多个数据库时，需要通过-d参数指定相应的数据库实例进行连接。
 
#### 注意事项
如果数据库的编码为SQL_ASCII（可以通过"show server_encoding;"命令查看当前数据库存储编码），则在创建数据库对象时，如果对象名中含有多字节字符（例如中文），超过数据库对象名长度限制（63字节）的时候，数据库将会将最后一个字节（而不是字符）截断，可能造成出现半个字符的情况。
针对这种情况，请遵循以下条件：
- 保证数据对象的名称不超过限定长度。
- 修改数据库的默认存储编码集（server_encoding）为UTF8编码集。
- 不要使用多字节字符作为对象名。
- 当出现因为误操作导致在多字节字符的中间截断，从而导致无法删除数据库对象的现象时，请使用截断前的数据库对象名进行删除操作，或将该对象从各个数据库节点的相应系统表中依次删除。
 
#### 操作步骤
1. 使用如下命令创建一个新的数据库db_tpcc。 
   ```
   gaussdb=# CREATE DATABASE db_tpcc;
   CREATE DATABASE
   gaussdb=# CREATE DATABASE db_tpcc1 TEMPLATE templatea;
   CREATE DATABASE
   ```
   ![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
   - 数据库名称遵循SQL标识符的一般规则。当前角色自动成为此新数据库的所有者。
   
   - 如果一个数据库系统用于承载相互独立的用户和项目，建议把它们放在不同的数据库里。
   
   - 如果项目或者用户是相互关联的，并且可以相互使用对方的资源，则应该把它们放在同一个数据库里，但可以规划在不同的模式中。模式只是一个纯粹的逻辑结构，某个模式的访问权限由权限系统模块控制。
   
   - 创建数据库时，若数据库名称长度超过63字节，server端会对数据库名称进行截断，保留前63个字节，因此建议数据库名称长度不要超过63个字节。
   
   - 数据库默认创建在pg_default表空间下。若要指定表空间，可以使用如下语句。
     ```
     gaussdb=# CREATE DATABASE db_tpcc WITH TABLESPACE = hr_local;
     CREATE DATABASE
     ```
     其中hr_local为表空间名称，关于如何创建表空间，请参见[管理表空间](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-0036.html#ZH-CN_TOPIC_0000002527827970)。
     
   
   - 创建完db_tpcc数据库后，可以选择继续在默认的postgres数据库进行其他操作，也可以按如下方法退出postgres数据库，使用新用户连接到此数据库执行创建表等操作。
     ```
     gaussdb=# \q
     gsql -d db_tpcc -p 8000 -U joe
     Password for user joe:
     gsql ((GaussDB Kernel XXX.X.XXX build f521c606) compiled at 2021-09-16 14:55:22 commit 2935 last mr 6385 release)
     Non-SSL connection (SSL connection is recommended when requiring high-security)
     Type "help" for help.
     ```
     
    
   
   
2. 查看数据库。 
   - 使用\\l元命令查看数据库系统的数据库列表。
     ```
     gaussdb=# \l
     ```
     
   
   - 使用如下命令通过系统表pg_database查询数据库列表。
     ```
     gaussdb=# SELECT datname FROM pg_database;
     ```
     
   
   
   
   
3. 修改数据库。 
   用户可以执行如下命令修改数据库属性（比如：owner、名称和默认的配置属性）。
   - 执行如下命令为数据库设置默认的模式搜索路径。
     ```
     gaussdb=# ALTER DATABASE db_tpcc SET search_path TO pa_catalog,public;
     ALTER DATABASE
     ```
     
   
   - 执行如下命令为数据库重新命名。
     ```
     gaussdb=# ALTER DATABASE db_tpcc RENAME TO human_tpcds;
     ALTER DATABASE
     ```
     
   
   
   
   
4. 删除数据库。 
   用户可通过[DROP DATABASE](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-0597.html#ZH-CN_TOPIC_0000002559108043)命令删除数据库。该命令会移除数据库系统目录并永久删除磁盘上的数据文件。仅数据库所有者或者拥有系统管理员权限的用户可以执行删除操作。若存在活跃数据库连接，删除操作将失败，操作前请确保已连接到其他数据库。
   执行如下命令删除数据库。
   ```
   gaussdb=# DROP DATABASE human_tpcds;
   DROP DATABASE
   ```
   
   
 
