金仓数据库基本操作

使用 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

注意事项

  1. 权限问题
    确保当前用户对目标数据库和表具有足够的权限(如读写权限)。
  2. 字符编码
    在导出和导入时,确保文件的字符编码与数据库的字符集一致,避免出现乱码问题。
  3. 大文件处理
    对于大型数据库或表,导出和导入可能会耗费较多时间。建议在低负载时段执行,并确保磁盘空间充足。
  4. 事务控制
    如果导入的数据量较大,建议在导入前开启事务(BEGIN;),并在导入完成后提交(COMMIT;),以保证数据一致性。
  5. 版本兼容性
    确保导出和导入的金仓数据库版本兼容。如果跨版本操作,请参考官方文档确认兼容性。

5. 其他工具

除了上述方法外,还可以使用图形化管理工具(如 Kingbase Studio 或第三方工具 DBeaver)来实现 SQL 文件的导入和导出。这些工具通常提供更直观的操作界面,适合不熟悉命令行的用户。