【发布时间】:2018-08-22 13:38:07
【问题描述】:
我想有效地将多行插入到 VERTICA。在 PostgreSQL(可能还有其他 SQL 实现)中,可以在一个语句中 INSERT 多行,这比执行单次插入要快得多(尤其是在自动提交模式下)。
在新创建的表中加载两行的最小独立示例可能如下所示(a):
CREATE TABLE my_schema.my_table (
row_count int,
some_float float,
some_string varchar(8));
INSERT INTO my_schema.my_table (row_count, some_float, some_string)
VALUES (1,1.0,'foo'),(2,2.0,'bar');
但这样做的美妙之处在于,值的捆绑顺序可以更改为类似于 (b):
INSERT INTO my_schema.my_table (some_float, some_string, row_count)
VALUES (1.0,'foo',1),(2.0,'bar',2);
此外,此语法允许省略列,然后由默认值填充(例如自动递增整数等)。
但是,VERTICA 似乎无法进行具有相同微调的多行插入。事实上,模拟类似行为的唯一方法似乎是 UNION 几个选择一起用于类似 (c):
INSERT INTO my_schema.my_table SELECT 1,1.0,'foo' UNION SELECT 2,2.0,'bar';
在这个答案中:Vertica SQL insert multiple rows in one statement。
但是,这似乎只在插入列的顺序与其初始定义的顺序相匹配时才有效。我的问题是,可以制作像 (c) 这样的单个插入,但可以像 (b) 那样更改列顺序?还是我完全错误地解决了这个问题?如果是这样,多行插入有什么替代方法?我应该试试COPY LOCAL吗?
【问题讨论】: