使用 ksql 连接数据库
ksql 是金仓数据库提供的交互式终端工具,用于执行SQL语句和管理数据库。以下是使用ksql连接到金仓数据库的几种方式:
基本连接命令
直接连接
ksql -d 数据库名 -U 用户名 -W -h 主机地址 -p 端口号
其中:
-d
指定要连接的数据库名称。
-U
指定连接数据库使用的用户名。
-W
提示输入用户密码(不推荐在命令行中直接写密码以避免安全问题)。
-h
指定数据库服务器的主机地址,默认为本地主机。
-p
指定数据库服务器监听的端口号,默认可能是54321或根据安装配置有所不同。
例如,连接名为testdb的数据库,使用用户名kingbase,可以这样操作:
ksql -d testdb -U kingbase -W
如果数据库服务器不在本地,还需要指定其IP地址和端口,比如:
ksql -d testdb -U kingbase -h 192.168.1.100 -p 54321 -W
使用环境变量
为了简化连接过程,可以设置以下环境变量:
KINGBASE_USER
:默认用户名。
KINGBASE_PASSWORD
:默认密码(注意安全性)。
KINGBASE_HOST
:数据库服务器地址。
KINGBASE_PORT
:数据库服务器端口号。
KINGBASE_DBNAME
:默认数据库名。
设置这些环境变量后,可以直接使用ksql命令而无需额外参数。
在 ksql 中的基本操作命令
一旦成功连接到数据库,就可以使用一系列SQL命令来管理和查询数据。这里列出一些常用命令:
查看当前数据库中的表
\dt
查看某个表的结构
\d 表名
执行SQL查询
直接输入SQL语句并按回车键即可执行,如:
SELECT * FROM 表名;
退出 ksql
输入以下命令退出ksql:
\q
数据库管理
数据库管理
创建数据库
使用SQL语句创建新的数据库:
CREATE DATABASE database_name;
删除数据库
删除指定的数据库:
DROP DATABASE database_name;
Schema 操作
方法 1:使用 SQL 查询
可以通过查询系统表或系统视图来获取所有 Schema 的信息。
运行以下 SQL 命令:
SELECT schema_name
FROM information_schema.schemata;
说明:
- information_schema.schemata 是一个系统视图,包含了当前数据库中所有的 Schema 信息。
- 查询结果会列出当前数据库中的所有 Schema 名称。
方法 2:使用 \dn 命令(仅适用于交互式终端)
如果使用的是 Kingbase 的交互式命令行工具(类似于 PostgreSQL 的 psql),可以直接运行以下命令查看所有 Schema:
\dn
说明:
- \dn 是 Kingbase 和 PostgreSQL 中用于列出所有 Schema 的快捷命令。
- 输出结果会显示每个 Schema 的名称及其所有者。
方法 3:查询系统表 pg_namespace
也可以直接查询系统表 pg_namespace 来获取 Schema 信息:
SELECT nspname AS schema_name
FROM pg_namespace;
说明:
- pg_namespace 是 PostgreSQL 和 Kingbase 中存储 Schema 信息的系统表。
- 查询结果会列出所有 Schema 的名称。
示例输出
假设数据库中有以下 Schema:
- public
- my_schema
- test_schema
执行上述任意查询后,可能会得到类似以下结果:
schema_name
-------------
public
my_schema
test_schema
(3 rows)
注意事项
- 权限问题:
- 如果没有足够的权限访问某些 Schema,查询结果可能不完整。
- 确保使用具有足够权限的用户登录数据库。
- 当前数据库:
- 上述查询仅适用于当前连接的数据库。如果需要查看其他数据库的 Schema,请先切换到目标数据库:
\c database_name
- 默认 Schema:
- 在 Kingbase 中,默认的 Schema 是 public,如果没有显式创建其他 Schema,数据通常存储在 public 中。
表管理
创建表
定义新表的结构,包括字段名称和类型:
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
...
);
例如,创建一个名为employee的表:
CREATE TABLE employee (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
age INT,
salary REAL
);
修改表
添加列:
ALTER TABLE table_name ADD COLUMN column_name datatype;
修改列:
ALTER TABLE table_name ALTER COLUMN column_name TYPE new_datatype;
删除列:
ALTER TABLE table_name DROP COLUMN column_name;
删除表
删除整个表及其所有数据:
DROP TABLE table_name;
数据查询与操作
插入数据
向表中插入新记录:
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
查询数据
从表中检索数据:
SELECT column1, column2, ... FROM table_name WHERE conditions;
例如,查询所有员工的信息:
SELECT * FROM employee;
更新数据
修改现有记录的数据:
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE conditions;
删除数据
从表中移除记录:
DELETE FROM table_name WHERE conditions;
事务处理
事务是保证数据库操作原子性、一致性、隔离性和持久性(ACID特性)的基本单位。
开始事务
BEGIN;
提交事务
完成事务并保存更改:
COMMIT;
回滚事务
撤销未提交的更改:
ROLLBACK;
数据导出
使用 ksql 工具导出数据
ksql 是金仓数据库提供的交互式终端工具,可以用来执行SQL语句并导出查询结果。
导出查询结果到文件:
ksql -d database_name -U user_name -c "COPY (SELECT * FROM table_name) TO STDOUT WITH CSV HEADER" > output_file.csv
这条命令会将table_name表的所有数据以CSV格式导出,并保存到output_file.csv文件中。
使用 pg_dump 工具进行逻辑备份
虽然名为pg_dump,但许多功能也适用于KingbaseES,特别是如果使用的是兼容PostgreSQL的版本。
导出整个数据库:
pg_dump -h host_address -p port_number -U user_name -F c -b -v -f "backup_file.dump" database_name
-F c 表示输出文件格式为自定义归档格式,便于后续恢复。
导出某个表的数据:
pg_dump -h host_address -p port_number -U user_name -t table_name -f "table_backup.sql" database_name
数据导入
使用 ksql 工具导入数据
可以利用COPY命令来快速导入数据。
将文件中的数据导入到表中:
ksql -d database_name -U user_name -c "\copy table_name FROM 'input_file.csv' WITH CSV HEADER"
注意这里的反斜杠\前缀,它表示这是一个ksql元命令而不是SQL语句。
使用 pg_restore 恢复数据
当使用pg_dump生成了备份文件后,可以用pg_restore来进行恢复。
恢复整个数据库:
pg_restore -h host_address -p port_number -U user_name -d database_name -v "backup_file.dump"
注意事项
- 在执行导入导出操作之前,请确保有足够的权限访问目标数据库以及读写相关文件。
对于大型数据库或表,考虑在系统负载较低的时候执行这些操作,以免影响其他用户的正常使用。- 根据实际情况选择合适的导出格式(如文本、CSV或自定义归档)以及导入导出的方法,以便更好地满足需求。
导入导出SQL
1. 导出 SQL 文件
使用 ksql 工具导出 SQL 文件
ksql 是金仓数据库的交互式终端工具,可以通过执行 SQL 语句或元命令将表结构和数据导出为 SQL 文件。
导出整个数据库
ksql -d database_name -U user_name -f export.sql > backup.sql
这里:
- -d 指定目标数据库名称。
- -U 指定用户名。
- -f 指定要执行的 SQL 脚本文件(可选)。
> backup.sql
将输出重定向到 backup.sql 文件。
导出单个表的结构和数据
ksql -d database_name -U user_name -c "\COPY (SELECT * FROM table_name) TO 'table_backup.sql';"
使用 pg_dump 工具导出 SQL 文件
pg_dump 是一个强大的工具,支持导出数据库的结构和数据。
导出整个数据库为 SQL 文件
pg_dump -h host_address -p port_number -U user_name -d database_name -f backup.sql
参数说明:
- -h:数据库服务器地址。
- -p:数据库端口号。
- -U:连接数据库的用户名。
- -d:目标数据库名称。
- -f:输出的 SQL 文件路径。
仅导出表结构
如果只想导出表结构而不包含数据,可以使用 -s 参数:
pg_dump -h host_address -p port_number -U user_name -d database_name -s -f schema_only.sql
仅导出数据
如果只想导出数据而不包含表结构,可以使用 --data-only 参数:
pg_dump -h host_address -p port_number -U user_name -d database_name --data-only -f data_only.sql
2. 导入 SQL 文件
使用 ksql 工具导入 SQL 文件
ksql 可以直接读取 SQL 文件并执行其中的 SQL 语句。
导入 SQL 文件
ksql -d database_name -U user_name -f import.sql
参数说明:
- -d:目标数据库名称。
- -U:用户名。
- -f:指定要导入的 SQL 文件路径。
使用 psql 工具导入 SQL 文件
如果金仓数据库兼容 PostgreSQL 的工具,也可以使用 psql 命令。
导入 SQL 文件
psql -h host_address -p port_number -U user_name -d database_name -f import.sql
3. 示例操作
示例 1:导出并导入整个数据库
导出数据库
pg_dump -h localhost -p 54321 -U kingbase -d testdb -f testdb_backup.sql
导入数据库
ksql -d new_testdb -U kingbase -f testdb_backup.sql
示例 2:导出单个表并导入
导出单个表
pg_dump -h localhost -p 54321 -U kingbase -d testdb -t employee -f employee_backup.sql
导入单个表
ksql -d new_testdb -U kingbase -f employee_backup.sql
注意事项
- 权限问题
确保当前用户对目标数据库和表具有足够的权限(如读写权限)。- 字符编码
在导出和导入时,确保文件的字符编码与数据库的字符集一致,避免出现乱码问题。- 大文件处理
对于大型数据库或表,导出和导入可能会耗费较多时间。建议在低负载时段执行,并确保磁盘空间充足。- 事务控制
如果导入的数据量较大,建议在导入前开启事务(BEGIN;),并在导入完成后提交(COMMIT;),以保证数据一致性。- 版本兼容性
确保导出和导入的金仓数据库版本兼容。如果跨版本操作,请参考官方文档确认兼容性。
5. 其他工具
除了上述方法外,还可以使用图形化管理工具(如 Kingbase Studio 或第三方工具 DBeaver)来实现 SQL 文件的导入和导出。这些工具通常提供更直观的操作界面,适合不熟悉命令行的用户。