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

时间:2019-01-24 09:04:10

标签: sql cratedb

我们有一个数据库,其中有一个名为“学生”的表,其中包含ID,名称,年龄,学校列。

现在,我想编写一个迁移脚本,以将3列(假设我有数百万条记录)从Student表复制到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管理员界面中执行时,出现以下错误

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

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

问题:

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

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

在创建表语句后输入分号

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;

答案 2 :(得分:0)

  1. 在单个请求中只有一条语句,因为您说当您分开查询时它可以工作,因此您确实需要执行两条语句。

  2. 即使有上百万条记录,它仍然是单个语句,所以效率不重要吗?您只需要再运行1个单独的脚本来创建一个新表,插入就可以按预期的方式工作,而可能需要花费很长的时间。

答案 3 :(得分:0)

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

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

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