创建和管理数据库

前提条件

用户必须拥有数据库创建的权限或者是数据库的系统管理员权限才能创建数据库,赋予创建数据库的权限参见管理用户及权限

背景信息

  • 初始时,openGauss包含两个模板数据库template0、template1,以及一个默认的用户数据库postgres。postgres默认的数据库兼容类型为O(即DBCOMPATIBILITY = A),该兼容类型下将字符串作为NULL处理。
  • CREATE DATABASE实际上通过拷贝模板数据库来创建新数据库。默认情况下,拷贝template0。请避免使用客户端或其他手段连接及操作两个模板数据库。
  • openGauss允许创建的数据库总数目上限为128个。
  • 数据库系统中会有多个数据库,但是客户端程序一次只能连接一个数据库。也不能在不同的数据库之间相互查询。一个openGauss中存在多个数据库时,需要通过-d参数指定相应的数据库实例进行连接。

注意事项

如果数据库的编码为SQL_ASCII(可以通过“show server_encoding;”命令查看当前数据库存储编码),则在创建数据库对象时,如果对象名中含有多字节字符(例如中文),超过数据库对象名长度限制(63字节)的时候,数据库将会将最后一个字节(而不是字符)截断,可能造成出现半个字符的情况。

针对这种情况,请遵循以下条件:

  • 保证数据对象的名称不超过限定长度。
  • 使用例如utf-8编码集做为数据库的默认存储编码集(server_encoding)。
  • 不要使用多字节字符做为对象名。
  • 创建的数据库总数目不得超过128个。
  • 如果出现因为误操作导致在多字节字符的中间截断而无法删除数据库对象的现象,请使用截断前的数据库对象名进行删除操作,或将该对象从各个数据库节点的相应系统表中依次删掉。

操作步骤

  1. 创建数据库

    使用如下命令创建一个新的表空间tpcds_local。

    1. postgres=# CREATE TABLESPACE tpcds_local RELATIVE LOCATION 'tablespace/tablespace_1' ;
    2. CREATE TABLESPACE

    使用如下命令创建一个新的数据库db_tpcc。

    1. postgres=# CREATE DATABASE db_tpcc WITH TABLESPACE = tpcds_local;
    2. CREATE DATABASE

    创建和管理数据库 - 图1 说明:

    • 数据库名称遵循SQL标识符的一般规则。当前角色自动成为此新数据库的所有者。
    • 如果一个数据库系统用于承载相互独立的用户和项目,建议把它们放在不同的数据库里。
    • 如果项目或者用户是相互关联的,并且可以相互使用对方的资源,则应该把它们放在同一个数据库里,但可以规划在不同的模式中。模式只是一个纯粹的逻辑结构,某个模式的访问权限由权限系统模块控制。
    • 创建数据库时,若数据库名称长度超过63字节,server端会对数据库名称进行截断,保留前63个字节,因此建议数据库名称长度不要超过63个字节。
  2. 查看数据库

    • 使用\l元命令查看数据库系统的数据库列表。

      1. \l
    • 使用如下命令通过系统表pg_database查询数据库列表。

      1. SELECT datname FROM pg_database;
  3. 修改数据库

    用户可以使用如下命令修改数据库属性(比如:owner、名称和默认的配置属性)。

    • 使用以下命令为数据库设置默认的模式搜索路径。

      1. postgres=# ALTER DATABASE db_tpcc SET search_path TO pa_catalog,public;
      2. ALTER DATABASE
    • 使用如下命令修改数据库表空间。

      1. postgres=# ALTER DATABASE db_tpcc SET TABLESPACE tpcds;
      2. ALTER DATABASE
    • 使用如下命令为数据库重新命名。

      1. postgres=# ALTER DATABASE db_tpcc RENAME TO human_tpcds;
      2. ALTER DATABASE
  4. 删除数据库

    用户可以使用DROP DATABASE命令删除数据库。这个命令删除了数据库中的系统目录,并且删除了带有数据的磁盘上的数据库目录。用户必须是数据库的owner或者系统管理员才能删除数据库。当有人连接数据库时,删除操作会失败。删除数据库时请先连接到其他的数据库。

    使用如下命令删除数据库:

    1. postgres=# DROP DATABASE human_tpcds;
    2. DROP DATABASE