
引言
掌握了 ksql 对接本地 KingbaseES 数据库的基本操作之后,接下来要学习的是"数据库自身的运作",数据库是数据存储的顶级容器,所有的表,视图等对象均依托数据库而存在,本文将会细致阐述怎样经由 ksql 命令行来完成本地数据库从"创建,查看,切换到删除"的全部操作,各个步骤均配有具体的实例以及需要注意的地方,从而保证初学者能够顺利实施。 @[toc]
一、前置条件:明确 "在哪操作"------ 权限库与连接状态
创建或者管理数据库之前,要先明确两件事,其一,要连上正确的"权限库",各个模式所要求的不尽相同,其二,当前用户需具备足够的权限,创建数据库就要有CREATEDB
权限,这在文档里被一再提及,也是防止操作出现错误的重要因素。
1.1 确认连接到 "权限库"
KingbaseES 支持不同兼容模式,不同模式下创建数据库的 "权限库" 要求不同,必须严格区分:
-
普通模式(默认) :可连接任意已存在的数据库(如默认的
kingbase
库),只要当前用户有创建数据库的权限即可; -
SQLServer 兼容模式 :必须连接
master
库 才能创建新数据库(这是兼容 SQLServer 架构的特殊要求),若当前连接的是其他库,需先切换到master
库,切换命令:sql\c master
执行后若提示
You are now connected to database "master" as user "system".
,表示切换成功。
1.2 确认当前用户权限(避免 "权限不足" 报错)
创建数据库时,用户应具有 CREATEDB
权限(系统默认管理员用户 system
拥有该权限,普通用户则要手动获取),可经由如下命令来查看当前用户的权限
sql
\du 用户名
示例(查看 system
用户权限):
sql
\du system

执行之后在属性栏当中,如果存在"创建 DB",就表明具备创建数据库的权限;倘若不存在,则须要管理员(比如 system
)运行下面的命令予以授予(以普通用户 user1
为例)
sql
ALTER USER user1 CREATEDB;
在完成授权之后再度查看,确保"创建 DB"的权限得以落实。
二、创建本地数据库:两种核心方式(语句 / 工具)
KingbaseES 提供 "SQL 语句" 和 "命令行工具" 两种创建数据库的方式,前者灵活支持自定义配置(如编码、表空间),后者更简洁快速,可根据场景选择。
2.1 方式一:采用 CREATE DATABASE 语句来创建数据库(此方法较为推荐,比较灵活)
CREATE DATABASE
属于 SQL 标准语句,经由"选项"可以自定义数据库属性(譬如编码,默认表空间等),相关文档给出了基本语法及范例,下面是对这些内容的具体分析。
2.1.1 基础语法
sql
CREATE DATABASE 数据库名 [WITH 选项];
其中 "选项" 可选,常用选项包括:
-
ENCODING '编码格式'
:指定数据库字符编码(如UTF8
,避免中文乱码); -
TABLESPACE 表空间名
:指定数据库默认表空间(需提前创建表空间,后续文章讲解); -
OWNER 用户名
:指定数据库所有者(默认是当前创建用户)。
2.1.2 基础示例:创建空白数据库
以 system
用户身份切换到普通模式并创建一个名为 temp_db
的空白数据库,相关命令如下:
sql
CREATE DATABASE temp_db;

执行之后若是出现 CREATE DATABASE
这个提示,就说明创建已经完成(没有错误提示就算成功),ksql 对于完成的 DDL 语句只会返回操作类型,并不会显示其他内容
2.1.3 进阶示例:指定编码创建(避免中文乱码)
如果打算存储中文数据,最好指定 UTF8
编码,可以参考下面这个命令
sql
CREATE DATABASE temp_db WITH ENCODING 'UTF8';

执行该命令之后,再运行"查看数据库详情"这样的命令,就可以验证编码是否被正确设置。
2.2 方式二:用 createdb 工具创建(快捷,适合简单场景)
createdb
是 KingbaseES 暴露出来的命令行工具,实际上是 CREATE DATABASE
语句的一种"封装",不用进入 ksql 交互模式就能创建数据库,比较适合用来快速创建一些简单的数据库。
2.2.1 基础语法
bash
createdb -U 用户名 -d 父数据库 新数据库名 [选项]
参数说明:
-U 用户名
:指定执行创建操作的用户(需有CREATEDB
权限);-d 父数据库
:指定 "模板库"(默认用kingbase
库作为模板,普通模式)或master
库(SQLServer 兼容模式);新数据库名
:要创建的数据库名称;- 选项:与
CREATE DATABASE
一致(如-E UTF8
指定编码)。
2.2.2 示例:用 createdb 快速创建数据库
在 Linux 终端(无需进入 ksql),用 system
用户基于 kingbase
库创建 temp_db
,命令如下:
bash
createdb -U system -d kingbase temp_db -E UTF8
执行后若无报错,说明创建成功(createdb
工具成功时无返回信息,报错时才会提示)。
2.2.3 注意事项
createdb
工具需在 "系统终端" 执行(Linux 终端、Windows 命令提示符),而非 ksql 交互模式;- 若执行
createdb
时提示 "command not found",需先配置 KingbaseES 的环境变量(将安装目录/Server/bin
路径添加到PATH
中)。
三、查看本地数据库:了解当前数据库列表与详情
创建数据库之后,要经由 ksql 命令来查看"全部数据库列表"和"单个数据库详情",以此确认创建情况或者管理已有的数据库,包括 \l
一系列命令,属于最为常见的查看方法。
3.1 查看所有数据库列表(\l 命令)
在 ksql 交互模式里,运行如下指令,就能显示本地各个数据库的关键信息(包含名称,所有者,编码,权限等等)。
sql
\l
执行后会显示类似以下的表格(示例):
表格中关键信息解读:
名称
:数据库名称(确认temp_db
已存在);字符编码
:字符编码(确认是否为UTF8
);拥有者
:数据库所有者(确认是否为当前用户)。
3.2 筛选查看特定数据库(\l 数据库名称)
如果本地数据库数量较多,可以凭借"数据库名称"立即找到目的数据库,其语法表现为如下形式。
sql
\l 数据库名称
示例:筛选名称为 "temp_db" 的数据库
sql
\l temp_db

3.3 查看单个数据库详情(\l+ 命令)
如果想要知道数据库有关"存储路径,大小,表空间"等细致情况,就要运行如下命令(在 \l 后面加上 +)。
sql
\l+ 数据库名
示例:查看 temp_db
的详情:
sql
\l+ temp_db
执行后会显示类似以下的信息:

四、切换本地数据库:在不同库间灵活跳转
切换本地数据库:要操作不同数据库的时候,比如从 kingbase
切换到 temp_db
,不必断开连接再重新登录,只要用 \c
命令就能马上完成切换,kingbaseES文档里清楚地记载了这个命令的用法。
4.1 切换命令语法
sql
\c 目标数据库名 [用户名]
目标数据库名
:要切换到的数据库(必须已存在);用户名
(可选):若需切换用户,可在后面加用户名(如\c temp_db user1
),默认保持当前用户。
4.2 切换示例:从test 切换到 temp_db
当前连接 test
库(提示符为 test=#
),执行以下命令切换到 temp_db
:
sql
\c temp_db
执行后若提示以下信息,说明切换成功:

同时,ksql 的提示符会从 test=#
变为 temp_db=#
,直观体现当前连接的数据库。
4.3 注意事项
- 切换数据库之前,如果当前库存在尚未提交的事务,比如未执行
COMMIT
的INSERT
操作,那么在切换的时候会自动回滚该事务,所以事先要确认数据是否已被保存。 - 目标数据库若不存在,将会出现"database does not exist"这条错误信息,此时要核查数据库名的拼写是否正确。
五、删除本地数据库:谨慎操作,避免数据丢失
谨慎执行删除本地数据库的操作,防止造成数据丢失,删除数据库属于"高危操作",其会把数据库中的全部表以及数据彻底删除,文档特意提示了"删除前的确认流程"和"需注意的语法事项",下面就是安全删除的完整步骤。
5.1 前提:不能连接到要删除的数据库
这是反复强调的关键点 ------无法删除当前正在连接的数据库 ,否则会报错
因此,删除前需先切换到其他数据库(如 kingbase
或 master
),示例:
若当前连接 temp_db
,先切换到 kingbase
:
sql
\c kingbase
确认提示符变为 kingbase=#
后,再执行删除操作。
5.2 删除命令语法
为避免误删,建议加上 IF EXISTS
选项(若数据库不存在,仅提示警告,不报错),语法如下:
sql
DROP DATABASE [IF EXISTS] 数据库名;
IF EXISTS
:可选,防止 "删除不存在的数据库" 报错;数据库名
:要删除的数据库(必须已切换到其他库)。
5.3 删除示例:安全删除 temp_db
sql
DROP DATABASE IF EXISTS temp_db;
执行后若提示 DROP DATABASE
,表示删除成功
5.4 高危操作提醒(必看)
- 备份优先 删除之前,要确认数据库里没有重要数据,或者已经做了备份(KingbaseES 的备份能够用
pg - dump
工具来完成,后面的文章会讲述)。 - 避免生产环境误删 :生产环境切勿误删数据库,若要在生产环境删除数据库,则要经过审批流程,建议先利用
\l+
查看数据库详情,之后再予以删除。 - 无法恢复:KingbaseES 没有"回收站"功能,删除的数据无法直接恢复,只能依靠备份
六、常见问题排查:解决创建 / 删除数据库的高频报错
在数据库运作时,常常会碰到创建或者删除数据库时报错的情况,下面列举了三种典型的错误及其解决办法,供新手参考来定位并解决问题。
问题 1:报错 "创建数据库的权限被拒绝"
报错完整信息:
plaintext
ERROR: permission denied to create database
原因:
当前用户没有 CREATEDB
权限(如普通用户 user1
未授予权限)。
解决方案:
- 切换到管理员用户
system
(\c kingbase system
); - 执行授权命令:
ALTER USER 用户名 CREATEDB;
(如ALTER USER user1 CREATEDB;
); - 切换回原用户(
\c kingbase user1
),重新执行创建命令。
问题 2:删除报错 "数据库正被其他用户访问"
报错完整信息:
plaintext
ERROR: database "temp_db" is being accessed by other users
DETAIL: There are 2 other sessions using the database.
原因:
有其他会话(如其他终端的 ksql 连接)正在使用要删除的数据库,无法删除。
解决方案:
-
查看当前连接
temp_db
的会话:sqlSELECT pid, usename, application_name FROM pg_stat_activity WHERE datname = 'temp_db';
其中
pid
是会话进程 ID; -
终止这些会话(需管理员权限):
sqlSELECT pg_terminate_backend(进程ID);
示例:终止 pid 为 1234 的会话:
SELECT pg_terminate_backend(1234);
; -
确认无其他会话后,重新执行删除命令。
问题 3:报错 "无法删除当前打开的数据库"
报错完整信息:
plaintext
ERROR: cannot drop the currently open database
原因:
当前 ksql 会话正在连接要删除的数据库(如要删除 temp_db
,但当前连接的就是 temp_db
)。
解决方案:
- 切换到其他数据库(如
kingbase
):\c kingbase
; - 再次执行删除命令:
DROP DATABASE IF EXISTS temp_db;
。
总结
本文包含本地数据库的"创建,查看,切换,删除"操作,先做"权限库确认"的前置准备,然后灵活选择两种创建方式,最后注意安全删除时的事项,各个环节均符合文档规范,并附有实际操作案例,掌握了这些操作之后,你就具有了管理 KingbaseES 数据存储"顶层容器"的能力,下篇文章将会详细阐述"表空间与模式"的管理,从而更为细致地剖析数据存储的逻辑和物理结构。