如何编写 cratedb 迁移脚本?迁移脚本不起作用



我们有一个名为"学生"的数据库,其中包含 id、姓名、年龄、学校等列。

现在我想编写一个迁移脚本,将 3 列(假设我有数百万条记录)从 Students 表复制到New_students表。

下面是我编写的示例脚本。它抛出一个错误

CREATE TABLE IF NOT EXISTS New_Students (
id PRIMARY KEY,
name string,
age string,
)
INSERT INTO New_Students(id,name,age)
SELECT  id,name,age
FROM students;

在上面在 crateDb 管理员 UI 中执行时,我得到以下错误

SQLActionException[SQLParseException: line 8:1: mismatched input 'INSERT' expecting <EOF>]

上述语句在单独执行时有效。

问题:

  1. 为什么以上多个语句不起作用,但是单独键入时有效?2.我们如何将数据从表列复制到另一个新表。假设我有数百万条记录,如何更有效地做到这一点?

CrateDB AdminUI 的 SQL 控制台不支持多个语句。

您可以改用 crash CLI 工具,该工具确实支持多个语句,请参阅 https://crate.io/docs/clients/crash/en/latest/。

在创建表语句后放置一个分号

CREATE TABLE IF NOT EXISTS New_Students (
id int PRIMARY KEY,
name varchar(100),
age varchar(100) -- you need to remove this line coma as well 
);
INSERT INTO New_Students(id,name,age)
SELECT  id,name,age
FROM students;
    单个
  1. 请求期间只有 1 个语句,正如您所说的那样,当您分离查询时它有效,因此您确实需要执行两个语句。

  2. 即使有数百万条记录,它仍然是一个单一的语句,所以效率不应该重要吗?您只运行 1 个单独的脚本来创建一个新表,无论插入需要多长时间,它都会按预期工作。

为什么不直接从数据创建表呢?

CREATE TABLE New_Students as
    SELECT id, name, age
    FROM students;

您的问题是一次只允许您发送 on 语句的界面。 但是,在这种情况下,您可能不需要两个语句。

最新更新