KingbaseES数据库:用 ksql 实现本地库创建 / 查看 / 切换 / 删除(附避坑技巧)
本文围绕本地 KingbaseES 数据库的全生命周期操作展开,先明确操作前的关键前提 —— 根据不同兼容模式确认 “权限库”(普通模式连任意已存库,SQLServer 兼容模式需连 master 库),并通过 \du 命令核查用户是否具备 CREATEDB 权限。核心讲解两种创建方式:推荐用 CREATE DATABASE 语句自定义编码、表空间等配置,也可通过 createdb 工具在系统终端快速创建。后续依次介绍 \l 查看所有库列表、\l + 查单库详情、\c 切换库的方法,强调切换前需提交事务避免数据回滚。删除操作重点提醒需先切换至其他库,建议加 IF EXISTS 选项,并做好数据备份以防丢失。最后针对权限不足、数据库被占用等高频报错,给出具体排查解决步骤,助力初学者顺利完成 KingbaseES 本地库管理。
前言
中电科金仓(北京)科技股份有限公司(以下简称“电科金仓”)成立于1999年,是成立最早的拥有自主知识产权的国产数据库企业,也是中国电子科技集团(CETC)成员企业。电科金仓以“提供卓越的数据库产品助力企业级应用高质量发展”为使命,致力于“成为世界卓越的数据库产品与服务提供商”。
电科金仓自成立起始终坚持自主创新,专注数据库领域二十余载,具备出色的数据库产品研发及服务能力,核心产品金仓数据库管理系统KingbaseES(简称“KES”)是面向全行业、全客户关键应用的企业级大型通用数据库。KES产品V9版本已通过国家权威机构认证,产品核心源代码自主率达到100%。2018年,电科金仓申报的“数据库管理系统核心技术的创新与金仓数据库产业化”项目荣获国家科学技术进步二等奖。金仓数据库管理系统KES于2022年入选国务院国资委发布的十项国有企业数字技术典型成果,彰显数据库领域国家队硬实力。继2023年金仓数据库管理系统V8通过第一批《安全可靠测评》后,2024年金仓数据库管理系统V9、金仓分布式HTAP数据库软件集群V3再度入围,至此电科金仓共计2款产品3个版本通过《安全可靠测评》*。
🥇 点击进入金仓数据库专栏,本专栏聚焦金仓数据库(KingbaseES)这一国产企业级融合数据库,为开发者及技术决策者提供从基础操作到架构设计的系统化学习路径。从多语法兼容(Oracle/MySQL/PostgreSQL)、多模数据存储(关系 / 文档 / 时序 / GIS)等功能展开讲解!
之前咱们已经掌握了用 ksql 对接本地 KingbaseES 数据库的基础操作,接下来就该深入了解数据库自身是怎么运作的了。要知道,数据库可是数据存储的“顶层容器”,不管是表还是视图,所有数据对象都得依托它才能存在。所以这篇文章,我会一步步教大家怎么通过 ksql 命令行,把本地数据库从创建、查看、切换到删除的全流程走通。每个步骤都会配上具体例子,还有需要特别注意的地方,确保刚入门的朋友也能跟着操作,不会走弯路。
一、前置条件:明确 “在哪操作”—— 权限库与连接状态
在动手创建或管理数据库之前,有两件事得先弄明白,不然很容易出错。一是得连对“权限库”,不同模式下对权限库的要求不一样;二是当前登录的用户得有足够权限,比如创建数据库就必须有CREATEDB权限。这两点在官方文档里反复强调,大家可千万别忽略。
1.1 确认连接到 “权限库”
KingbaseES 支持多种兼容模式,不同模式下创建数据库,对“权限库”的要求差异很大,一定要分清楚:
-
普通模式(默认):只要当前用户有创建数据库的权限,连接任何一个已存在的数据库都行,比如默认的
kingbase库就没问题; -
SQLServer 兼容模式:这个模式有特殊要求,必须连接
master库才能创建新数据库,这是为了兼容 SQLServer 的架构。要是你当前连的是其他库,得先切换到master库,切换命令长这样:\c master执行后如果看到提示“
You are now connected to database "master" as user "system".”,就说明切换成功了。
1.2 确认当前用户权限(避免 “权限不足” 报错)
创建数据库时,用户必须有CREATEDB权限才行。系统默认的管理员用户system自带这个权限,但普通用户就得手动授权了。想知道当前用户有没有这个权限,用下面这个命令就能查到:
\du 用户名
举个例子,要是想查看system用户的权限,就输入:
\du system
执行后会看到用户属性列表,里面要是有“创建 DB”这一项,就说明有创建数据库的权限;要是没有,就得让管理员(比如system用户)运行下面的命令来授权。比如给普通用户user1授权,命令是:
ALTER USER user1 CREATEDB;
授权之后,记得再查一次,确认“创建 DB”的权限真的加上了才算完。
二、创建本地数据库:两种核心方式(语句 / 工具)
KingbaseES 给大家提供了两种创建数据库的方式,一种是用 SQL 语句,另一种是用命令行工具。用 SQL 语句的好处是灵活,能自定义编码、表空间这些配置;用命令行工具则更简洁快速,大家可以根据自己的场景选。
2.1 方式一:采用 CREATE DATABASE 语句来创建数据库(此方法较为推荐,比较灵活)
CREATE DATABASE是 SQL 标准语句,通过加“选项”能自定义数据库的各种属性,比如编码、默认表空间之类的。官方文档里给了基本语法和例子,我这里就给大家拆解开讲讲具体怎么用。
2.1.1 基础语法
CREATE DATABASE 数据库名 [WITH 选项];
这里的“选项”不是必须加的,常用的选项有这么几个:
-
ENCODING '编码格式':指定数据库的字符编码,比如选UTF8就能避免中文乱码; -
TABLESPACE 表空间名:指定数据库的默认表空间,不过这个表空间得提前创建好,后面的文章我再跟大家细说怎么弄; -
OWNER 用户名:指定数据库的所有者,默认就是当前创建数据库的用户。
2.1.2 基础示例:创建空白数据库
比如用system用户切换到普通模式,想创建一个叫temp_db的空白数据库,命令很简单,就是:
CREATE DATABASE temp_db;
执行后如果看到“CREATE DATABASE”这个提示,就说明创建完成了。其实只要没出现错误提示,基本就是成功了——ksql 对执行成功的 DDL 语句,只会返回操作类型,不会多显示其他内容,这点大家了解一下就行。
2.1.3 进阶示例:指定编码创建(避免中文乱码)
要是你打算在数据库里存中文数据,那最好指定UTF8编码,不然很容易出现乱码。具体命令可以参考下面这个:
CREATE DATABASE temp_db WITH ENCODING 'UTF8';
执行完这个命令后,大家可以再运行“查看数据库详情”的命令,确认一下编码是不是真的设置成UTF8了。
2.2 方式二:用 createdb 工具创建(快捷,适合简单场景)
createdb是 KingbaseES 提供的命令行工具,其实它就是把CREATE DATABASE语句封装了一下,不用进入 ksql 交互模式就能创建数据库,适合用来快速搞个简单的数据库。
2.2.1 基础语法
createdb -U 用户名 -d 父数据库 新数据库名 [选项]
这里每个参数的意思得搞清楚:
-
-U 用户名:指定执行创建操作的用户,这个用户必须有CREATEDB权限; -
-d 父数据库:指定“模板库”,普通模式下默认用kingbase库当模板,SQLServer 兼容模式下就得用master库; -
新数据库名:就是你要创建的数据库的名字; - 选项:和
CREATE DATABASE里的选项一样,比如用-E UTF8就能指定编码。
2.2.2 示例:用 createdb 快速创建数据库
比如在 Linux 终端里(不用进入 ksql),用system用户基于kingbase库创建temp_db,命令是这样的:
createdb -U system -d kingbase temp_db -E UTF8
执行后要是没报错,就说明创建成功了。这里要注意,createdb工具成功的时候不会返回任何信息,只有出错了才会提示问题在哪。
2.2.3 注意事项
- 用
createdb工具得在“系统终端”里执行,比如 Linux 终端或者 Windows 命令提示符,可别在 ksql 交互模式里用; - 要是执行
createdb的时候出现“***mand not found”的提示,那就是还没配置 KingbaseES 的环境变量。把“安装目录/Server/bin”这个路径添加到PATH里,问题就能解决了。
三、查看本地数据库:了解当前数据库列表与详情
创建完数据库,总得确认一下创建得对不对,或者管理已有的数据库吧?这时候就可以通过 ksql 命令查看“所有数据库列表”和“单个数据库详情”。常用的就是\l这一系列命令,大家记熟了很实用。
3.1 查看所有数据库列表(\l 命令)
在 ksql 交互模式里,输入下面这个命令,本地所有数据库的关键信息都会显示出来,比如名称、所有者、编码、权限这些:
\l
执行后会看到一个表格,表格里的关键信息大家得会看:
-
名称:数据库的名字,能确认你创建的temp_db在不在里面; -
字符编码:数据库的字符编码,看看是不是你之前设置的UTF8; -
拥有者:数据库的所有者,确认一下是不是当前用户。
3.2 筛选查看特定数据库(\l 数据库名称)
要是本地数据库特别多,一个个找太麻烦,直接用“数据库名称”就能快速定位到目标数据库,语法很简单:
\l 数据库名称
比如想找名叫“temp_db”的数据库,就输入:
\l temp_db
这样就能直接看到temp_db的信息,不用在一大堆数据库里翻了。
3.3 查看单个数据库详情(\l+ 命令)
要是你想知道数据库更细致的信息,比如存储路径、大小、表空间这些,就得在\l后面加个+,命令是这样的:
\l+ 数据库名
举个例子,想查看temp_db的详情,就输入:
\l+ temp_db
执行后就能看到temp_db的详细信息了,比如数据存在哪个路径下、占用多大存储空间之类的。
四、切换本地数据库:在不同库间灵活跳转
有时候咱们需要操作不同的数据库,比如从kingbase切换到temp_db,难道还得断开连接再重新登录吗?不用这么麻烦!用\c命令就能直接切换,官方文档里也写了这个命令的用法,特别方便。
4.1 切换命令语法
\c 目标数据库名 [用户名]
这里的参数要注意:
-
目标数据库名:就是你要切换到的数据库,必须是已经存在的; -
用户名(可选):要是想顺便切换用户,就在后面加上用户名,比如\c temp_db user1,不写的话就默认保持当前用户。
4.2 切换示例:从 test 切换到 temp_db
假设你当前连的是test库,ksql 的提示符会显示test=#。这时候想切换到temp_db,输入下面的命令就行:
\c temp_db
执行后要是看到提示信息,就说明切换成功了。而且你会发现,ksql 的提示符会从test=#变成temp_db=#,一眼就能看出来当前连的是哪个数据库。
4.3 注意事项
- 切换数据库之前,得先看看当前库里有没有没提交的事务。比如你执行了
INSERT操作,但还没运行***MIT,这时候切换数据库,这个事务会自动回滚。所以一定要先确认数据已经保存好了,再切换库; - 要是目标数据库根本不存在,就会出现“database does not exist”的错误提示。这时候先检查一下数据库名是不是拼错了,别白忙活一场。
五、删除本地数据库:谨慎操作,避免数据丢失
删除数据库这个操作可得格外小心,一不小心就可能把数据弄丢了!要知道,删除数据库是“高危操作”,一旦删了,数据库里所有的表和数据都会被彻底删掉。官方文档里也特意提醒了“删除前的确认流程”和“语法注意事项”,下面我就给大家讲讲怎么安全删除数据库。
5.1 前提:不能连接到要删除的数据库
这一点必须重点强调——当前正在连接的数据库,是没办法删除的,强行删只会报错。
所以删除之前,得先切换到其他数据库,比如kingbase或者master库。举个例子:
要是你当前连的是temp_db,先切换到kingbase库,命令是:
\c kingbase
等看到 ksql 的提示符变成kingbase=#,确认已经切换成功了,再执行删除操作。
5.2 删除命令语法
为了避免误删不存在的数据库而报错,建议大家加上IF EXISTS选项。要是数据库不存在,只会显示一个警告,不会报错,语法是这样的:
DROP DATABASE [IF EXISTS] 数据库名;
这里的参数要记好:
-
IF EXISTS:可选参数,主要作用是防止“删除不存在的数据库”时出现报错; -
数据库名:就是你要删除的数据库的名字,记住一定要先切换到其他库才能删。
5.3 删除示例:安全删除 temp_db
比如想安全删除temp_db,就输入这个命令:
DROP DATABASE IF EXISTS temp_db;
执行后要是看到“DROP DATABASE”的提示,就说明删除成功了。
5.4 高危操作提醒(必看)
-
备份优先:删除数据库之前,一定要确认库里没有重要数据,或者已经做好备份了。KingbaseES 备份可以用
pg - dump工具,后面我会专门写文章讲怎么用这个工具; -
避免生产环境误删:生产环境里的数据库千万不能随便删!要是真的需要在生产环境删数据库,必须走审批流程。删之前最好先用
\l+查看一下数据库详情,确认没问题了再动手; - 无法恢复:KingbaseES 没有“回收站”功能,删了的数据可没法直接恢复,只能靠之前的备份找回。所以删之前多检查几遍,别冲动操作。
六、常见问题排查:解决创建 / 删除数据库的高频报错
在操作数据库的时候,大家可能会碰到创建或删除数据库报错的情况。我整理了三个最常见的错误,还有对应的解决办法,刚入门的朋友可以参考一下,遇到问题的时候能快速定位和解决。
问题 1:报错 “创建数据库的权限被拒绝”
报错完整信息:
ERROR: permission denied to create database
原因:
很简单,就是当前用户没有CREATEDB权限。比如普通用户user1没被授予这个权限,就会报这个错。
解决方案:
- 先切换到管理员用户
system,命令是\c kingbase system; - 执行授权命令:
ALTER USER 用户名 CREATEDB;。比如给user1授权,就是ALTER USER user1 CREATEDB;; - 切换回原来的用户,比如用
\c kingbase user1,然后再重新执行创建数据库的命令,就能成功了。
问题 2:删除报错 “数据库正被其他用户访问”
报错完整信息:
ERROR: database "temp_db" is being a***essed by other users
DETAIL: There are 2 other sessions using the database.
原因:
有其他会话正在使用这个要删除的数据库,比如其他终端里的 ksql 连接还没断开,这时候肯定删不了。
解决方案:
-
先查看一下当前有哪些会话在连接
temp_db,用这个命令:SELECT pid, usename, application_name FROM pg_stat_activity WHERE datname = 'temp_db';这里面的
pid就是每个会话的进程 ID,记下来; -
然后终止这些会话,不过这个操作需要管理员权限,命令是:
SELECT pg_terminate_backend(进程ID);比如要终止 pid 是 1234 的会话,就输入
SELECT pg_terminate_backend(1234);; -
确认没有其他会话在连接
temp_db了,再重新执行删除命令,就能删掉了。
问题 3:报错 “无法删除当前打开的数据库”
报错完整信息:
ERROR: cannot drop the currently open database
原因:
这个错误很直观,就是你当前的 ksql 会话正在连接要删除的数据库。比如你想删temp_db,但当前连的正好就是temp_db,自然删不了。
解决方案:
- 先切换到其他数据库,比如
kingbase,命令是\c kingbase; - 然后再执行删除命令:
DROP DATABASE IF EXISTS temp_db;,这时候就能顺利删除了。
总结
这篇文章把本地数据库的“创建、查看、切换、删除”全流程都讲透了。操作之前,先做好“确认权限库”的准备工作;创建数据库的时候,根据需求选 SQL 语句或者命令行工具;最后删除的时候,一定要注意安全,别误删数据。每个环节都符合官方文档的规范,还配了实际操作的例子,跟着做基本不会出问题。
掌握了这些操作,大家就具备管理 KingbaseES 数据存储“顶层容器”的能力了。下一篇文章,我会跟大家详细讲“表空间与模式”的管理,帮大家更深入地理解数据存储的逻辑和物理结构,咱们下次见!
联系博主
xcLeigh 博主,全栈领域优质创作者,博客专家,目前,活跃在CSDN、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台,全网拥有几十万的粉丝,全网统一IP为 xcLeigh。希望通过我的分享,让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂,尤其对于一些复杂的技术话题,他能通过通俗的语言来解释,帮助初学者更好地理解。博客通常也会涉及一些实践经验,项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者,或者在学习一些新的编程语言或框架,关注他的文章对你有很大帮助。
亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。
愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。
至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。
💞 关注博主 🌀 带你实现畅游前后端!
🥇 从零到一学习Python 🌀 带你玩转Python技术流!
🏆 人工智能学习合集 🌀 搭配实例教程与实战案例,帮你构建完整 AI 知识体系
💦 注:本文撰写于CSDN平台,作者:xcLeigh(所有权归作者所有) ,https://xcleigh.blog.csdn.***/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。
📣 亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(或者关注下方公众号,看见后第一时间回复,还有海量编程资料等你来领!),博主看见后一定及时给您答复 💌💌💌